本文概述
- 为什么选择Jenkins管道?
- 什么是Jenkins管道?
- 创建一条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仪表板上, 单击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映像, 删除文件等。
上面说明的管道具有一些阶段, 这些阶段具有简单的步骤供你了解其工作原理。一旦学习了如何创建管道, 就可以增加更多的复杂性并创建复杂的管道。
在” 管道” 选项卡中找到代码后, 单击” 应用并保存” 。最后, 单击立即构建以开始构建你刚刚创建的Jenkins管道。
文章图片
这是管道运行时用户界面的外观。如果正确执行了所有步骤, 则构建将成功, 并且该构建将显示为蓝色(#27)。如果构建中有错误, 它将为构建赋予红色(#27)。
文章图片
现在, 单击#27 build, 然后单击Console Output, 以检查后端运行时到底发生了什么。
文章图片
这就是输出看起来像以SUCCESS消息结尾的样子。
Success Console OutputStarted 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管道()】我希望这能使你对Jenkins管道的好处以及如何创造收益有所了解。上面是一个简单的演示, 最好的学习方法是尝试构建复杂的管道。
推荐阅读
- 开源101(版本控制系统和Git)
- 创建你的第一个Nuxt应用程序– CRUD书店
- centos 遇到/dev/mapper/cl-root 100% 解决方法
- Android 开发环境搭建及程序打包方法
- kotlin android中Recyclerview的适配器类
- Android OS的image文件组成
- Android-原笔迹手写的探索与开发
- 当前Android开发人员如何提升岗位竞争力
- mybatis使用Dao和Mapper方式