个性化阅读
专注于IT技术分析

如何创建你的第一个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管道

这就是Jenkins管道流程的样子, 它由开发人员在创建软件(编码)和在生产环境中交付的软件之间的多个阶段组成。

Jenkins管道

让我们创建一个声明性管道。

在Jenkins仪表板上, 单击New Item。然后输入项目名称, 例如” First Pipeline”, 然后选择” Pipeline”项目。然后单击确定。

Jenkins管道

单击管道选项卡, 如下图所示, 然后在此处放置你的JenkinsFile代码(Groovy代码)。

Jenkins文件代码
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)。

Jenkins创建27

现在, 单击#27 build, 然后单击Console Output, 以检查后端运行时到底发生了什么。

Jenkins创建

这就是输出看起来像以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管道的好处以及如何创造收益有所了解。上面是一个简单的演示, 最好的学习方法是尝试构建复杂的管道。

赞(0)
未经允许不得转载:srcmini » 如何创建你的第一个Jenkins管道?

评论 抢沙发

评论前必须登录!