Пошаговое руководство по созданию пайплайна Jenkins
Почему пайплайн Jenkins?
Непрерывная доставка (CD) является неотъемлемой частью жизненного цикла DevOps.Это гарантирует, что разработчики программного обеспечения / приложений всегда готовы к работе.
Это тот случай, где Jenkins Pipeline входит в игру.
В DevOps непрерывная интеграция и непрерывная доставка (CI / CD) достигаются с помощью пайплайна Jenkins.
Что такое пайплайн 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, нажмите на New Item.
Затем введите имя элемента, например, «First Pipeline» и выберите проект «Pipeline». Затем нажмите ОК.
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 – это отдельная задача, которую необходимо выполнить, например, создать каталог, запустить образ докера, удалить файл и т. д.
Build'
и выполняю простой шаг echo.Deploy start
содержит шаг с командой echo, а в Deploying now теперь есть шаг, который тащит образ узла Nginx на узле.Наконец, есть стадия Prod с простым шагом echo.
Вышеописанный пайплан имеет этапы, на которых есть простые шаги, чтобы вы могли понять, как он работает.
Как только вы научитесь создавать пайплайны, вы можете добавить больше сложного в этот кода и создавать сложные конвейеры.
Получив код на вкладке Pipeline, нажмите Применить и Сохранить.
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
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 и о том, как вы можете его создать. Вышесказанное является простой демонстрацией, и лучший способ научиться этому – попытаться построить сложные конвейеры.