本文概述
创建Jenkins管道的分步指南
为什么选择Jenkins管道?
持续交付(CD)是DevOps生命周期的重要组成部分。
它确保开发人员正在创建的软件/应用程序始终可以投入生产。为此, 无论何时更新代码, 都需要不断地构建, 测试和部署它。这就是Jenkins Pipeline出现的地方。
在DevOps中, 通过Jenkins Pipeline实现了持续集成和持续交付(CI / CD)。使用Jenkins Pipeline CD有助于以更快, 更频繁的发行版本交付该软件。这有助于在每个下一个发行版中合并反馈。
什么是Jenkins管道?
Jenkins Pipeline是作业的组合, 可以使用Jenkins连续交付软件。
我想你知道Jenkins是什么。如果没有, 请查看此Udemy课程以掌握Jenkins。
Jenkins管道由多个状态或阶段组成, 它们按一个接一个的顺序执行。 JenkinsFile是一个简单的文本文件, 用于在Jenkins中作为代码创建管道。它包含Groovy领域特定语言(DSL)的代码, 该代码易于编写且易于阅读。
你可以单独运行JenkinsFile, 也可以从Jenkins Web UI运行管道代码。使用Jenkins可以通过两种方式创建管道。
- 声明式–创建Jenkins Pipeline的新方法。在这里, 你可以编写包含”管道”块的常规代码, 并将其检入SCM(源代码管理)
- 脚本化–编写常规代码的方式, 其中代码在”节点”块内定义。
在开始演示之前, 如果尚未安装Jenkins, 请先安装它。确保已在系统上启动并运行Jenkins。
创建一条Jenkins管道
这就是Jenkins管道流程的样子, 它由开发人员在创建软件(编码)和在生产环境中交付的软件之间的多个阶段组成。
让我们创建一个声明性管道。
在Jenkins仪表板上, 单击New Item。然后输入项目名称, 例如” First Pipeline”, 然后选择” Pipeline”项目。然后单击确定。
单击管道选项卡, 如下图所示, 然后在此处放置你的JenkinsFile代码(Groovy代码)。
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Hi, GeekFlare. 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"
}
}
}
}
让我解释一下上面的块。
- 管道块包括构建, 测试和交付软件的所有指令。它是Jenkins管道的关键组件。
- 分配了代理程序以在节点上执行管道并为管道分配工作区。
- 阶段是具有构建, 测试和部署应用程序步骤的模块。阶段用于可视化Jenkins Pipeline过程。
- 步骤是要执行的单个任务, 例如, 创建目录, 运行docker映像, 删除文件等。
上面的Groovy代码, 我用于JenkinsFile。任何可用的代理都将分配给管道。然后, 我定义Build阶段并执行一个简单的echo步骤。然后, 我定义了测试阶段, 其中该步骤询问你是否要继续。在那之后, 我创建了一个Deploy阶段, 其中有两个并行运行的阶段。部署开始阶段有一个使用echo命令的步骤, 而部署现在有一个步骤, 可在节点上提取Nginx的Docker映像。最后, 有一个带有简单回声步骤的Prod阶段。
上面说明的管道具有一些阶段, 这些阶段具有简单的步骤供你了解其工作原理。一旦学习了如何创建管道, 就可以增加更多的复杂性并创建复杂的管道。
在”管道”选项卡中找到代码后, 单击”应用并保存”。最后, 单击立即构建以开始构建你刚刚创建的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 [email protected]:/var/lib/jenkins/workspace/First [email protected]: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已经创建了Nginx的docker镜像。你可以通过运行以下命令来验证。你可以看到Nginx泊坞窗映像也已列出。
[email protected]:~$ 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管道的好处以及如何创造收益有所了解。上面是一个简单的演示, 最好的学习方法是尝试构建复杂的管道。
评论前必须登录!
注册