📜 Как создать свой первый пайплайн CI/CD в Jenkins?

by itisgood

Пошаговое руководство по созданию пайплайна Jenkins

Почему пайплайн Jenkins?


Непрерывная доставка (CD) является неотъемлемой частью жизненного цикла DevOps.
Это гарантирует, что разработчики программного обеспечения / приложений всегда готовы к работе.
Чтобы это происходило, всякий раз, когда обновляется код , его необходимо постоянно создавать, тестировать и развертывать.

Это тот случай, где Jenkins Pipeline входит в игру.

В DevOps непрерывная интеграция и непрерывная доставка (CI / CD) достигаются с помощью пайплайна Jenkins.

Использование Jenkins Pipeline для CD помогает доставлять программное обеспечение быстрее и чаще.
Это помогает включать обратную связь в каждый следующий выпуск.

Что такое пайплайн Jenkins?

Jenkins Pipeline – это сочетание заданий для непрерывной доставки программного обеспечения с использованием Jenkins.

Пайплайн Jenkins состоит из нескольких состояний или этапов, и они выполняются в последовательности один за другим.

JenkinsFile – это простой текстовый файл, который используется для создания пайплайна в виде кода в Jenkins.

Он содержит код на Groovy Domain Specific Language (DSL), который прост в написании и удобочитаем.

Вы можете запустить JenkinsFile отдельно, либо вы можете запустить этот код из Jenkins Web UI.

Существует два способа создания пайплайна с помощью Jenkins.

  • Declarative (декларативный) -новый способ создания Jenkins Pipeline. Здесь вы пишете код, содержащий блоки «пайплайна», который проверяется в SCM (Source Code Managemen)
  • Scripted (скриптовой) – способ написания  кода, где код определяется внутри «узловых» блоков.
Прежде чем мы перейдем к демонстрации всего этого, если вы еще не установили Jenkins, пожалуйста, установите его.
Убедитесь, что в вашей системе запущен и работает Jenkins.

Создание пайплана Jenkins

Так выглядит пайплаен Jenkins, состоящий из нескольких этапов между разработкой программного обеспечения и программного обеспечения, поставляемое в производство.

Давайте создадим декларативный пайплайн.

В дашборде Jenkins, нажмите на New Item.

Затем введите имя элемента, например, «First Pipeline» и выберите проект «Pipeline». Затем нажмите ОК.

Нажмите на вкладку Pipeline, как показано на рисунке ниже, и введите свой код JenkinsFile (Groovy Code)
pipeline {
         agent any
         stages {
                 stage('2) {
                 steps {
                     echo 'Hi, itisgood. Starting to build the App.'
                 }
                 }
                 stage('Test') {
                 steps {
                    input('Do you want to proceed?')
                 }
                 }
                 stage('Deploy') {
                 parallel {
                            stage('Deploy start ') {
                           steps {
                                echo "Start the deploy .."
                           }
                           }
                            stage('Deploying now') {
                            agent {
                                    docker {
                                            reuseNode true
                                            image ‘nginx’
                                           }
                                    }

                              steps {
                                echo "Docker Created"
                              }
                           }
                           }
                           }
                 stage('Prod') {
                     steps {
                                echo "App is Prod Ready"
                              }

              }
}
}
Позвольте мне объяснить вышеупомянутые блоки.
  • Блок Pipeline состоит из всех инструкций по сборке, тестированию и доставке программного обеспечения. Это ключевой компонент пайплайна Jenkins
  • agent назначается для выполненияпайплайна на узле и выделения рабочего пространства для пайплайна.
  • stage – это блок, в котором есть шаги для сборки, тестирования и развертывания приложения. Stage используются для визуализации процессовпайплайна Jenkins.
  • step – это отдельная задача, которую необходимо выполнить, например, создать каталог, запустить образ докера, удалить файл и т. д.
Groovy код, показанный выше, я использую для JenkinsFile.
Любой доступный агент получает назначение в pipeline.
Затем я определяю этап Build' и выполняю простой шаг echo.
Затем я определил стадию Test, где шаг спрашивает, хотите ли вы продолжить или нет.
После этого я создал этап Deploy, в котором параллельно работают еще два этапа.
Этап Deploy start содержит шаг с командой echo, а в Deploying now теперь есть шаг, который тащит образ узла Nginx на узле.

Наконец, есть стадия Prod с простым шагом echo.

Вышеописанный пайплан имеет этапы, на которых есть простые шаги, чтобы вы могли понять, как он работает.

Как только вы научитесь создавать пайплайны, вы можете добавить больше сложного в этот кода и создавать сложные конвейеры.

Получив код на вкладке Pipeline, нажмите Применить и Сохранить.

Наконец, нажмите Build Now, чтобы начать сборку только что созданного пайплана Jenkins.
Так будет выглядеть пользовательский интерфейс при запуске пайплайна.
Если вы выполнили все шаги правильно, ваша сборка будет успешной, и у сборки будет показан синий цвет (# 27).
Если в сборке есть ошибки, сборка будет выделена красным цветом (# 27).
Теперь нажмите на #27 build, а затем на Console Output, чтобы проверить, что именно происходило в бэк-энде при его запуске.
Вот так будет выглядеть вывод, заканчивающийся сообщением SUCCESS.
Success Console Output

Started by user geekflare
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/First Pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo
Hi, GeekFlare. Starting to build the App.
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] input
Do you want to proceed?
Proceed or Abort
Approved by geekflare
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] parallel
[Pipeline] { (Branch: Deploy start )
[Pipeline] { (Branch: Deploying now)
[Pipeline] stage
[Pipeline] { (Deploy start )
[Pipeline] stage
[Pipeline] { (Deploying now)
[Pipeline] getContext
[Pipeline] isUnix
[Pipeline] sh
[Pipeline] echo
Start the deploy ..
[Pipeline] }
+ docker inspect -f . nginx
[Pipeline] // stage
[Pipeline] }

Error: No such object: nginx
[Pipeline] isUnix
[Pipeline] sh
+ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
8d691f585fa8: Pulling fs layer
5b07f4e08ad0: Pulling fs layer
abc291867bca: Pulling fs layer
abc291867bca: Verifying Checksum
abc291867bca: Download complete
5b07f4e08ad0: Verifying Checksum
5b07f4e08ad0: Download complete
8d691f585fa8: Verifying Checksum
8d691f585fa8: Download complete
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete
abc291867bca: Pull complete
Digest: sha256:922c815aa4df050d4df476e92daed4231f466acc8ee90e0e774951b0fd7195a4
Status: Downloaded newer image for nginx:latest
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 125:131 -w "/var/lib/jenkins/workspace/First Pipeline" -v "/var/lib/jenkins/workspace/First Pipeline:/var/lib/jenkins/workspace/First Pipeline:rw,z" -v "/var/lib/jenkins/workspace/First Pipeline@tmp:/var/lib/jenkins/workspace/First Pipeline@tmp:rw,z" -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** nginx cat
$ docker top 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943 -eo pid,comm
[Pipeline] {
[Pipeline] echo
Docker Created
[Pipeline] }
$ docker stop --time=1 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
$ docker rm -f 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Prod)
[Pipeline] echo
App is Prod Ready
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Вышеупомянутый Jenkins Pipeline создал образ Docker Nginx.
Вы можете убедиться в этом, выполнив приведенную ниже команду.
Вы можете видеть, что образ докера Nginx также есть в списке.
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 540a289bab6c 2 weeks ago 126MB
httpd latest 7d85cc3b2d80 2 months ago 154MB
redis latest f7302e4ab3a8 2 months ago 98.2MB
geekflare_mongodb latest 095d17727ca0 3 months ago 325MB

Заключение

Надеюсь, эта статья даст вам представление о преимуществах конвейера Jenkins и о том, как вы можете его создать. Вышесказанное является простой демонстрацией, и лучший способ научиться этому – попытаться построить сложные конвейеры.

You may also like

Leave a Comment