jenkins ci/cd
在我的文章“使用开源工具构建DevOps管道的初学者指南”中 ,我分享了一个有关从头开始构建DevOps管道的故事。 推动该计划发展的核心技术是Jenkins ,这是一种用于建立持续集成和持续交付(CI / CD)管道的开源工具。
在花旗,有一个单独的团队为专用的Jenkins管道提供稳定的主从节点设置,但是该环境仅用于质量保证(QA),暂存和生产环境。 开发环境仍然是非常手动的,我们的团队需要使其自动化以在加快开发工作的同时获得尽可能多的灵活性。 这就是我们决定为DevOps建立CI / CD管道的原因。 Jenkins的开源版本由于其灵活性,开放性,强大的插件功能和易用性而成为显而易见的选择。
在本文中,我将分步演示如何使用Jenkins构建CI / CD管道。
什么是管道?
首先,了解Jenkins本身不是管道很有帮助。 仅仅创建一个新的詹金斯工作并不能构建一条流水线。 像遥控器一样思考詹金斯-在这里单击按钮即可。 当您单击按钮时会发生什么情况取决于遥控器要控制的内容。 Jenkins为其他应用程序API,软件库,构建工具等提供了一种插入Jenkins的方法,它可以执行并自动执行任务。 Jenkins本身不执行任何功能,但是随着其他工具的插入而变得越来越强大。
管道是一个单独的概念,指的是按顺序连接在一起的事件或作业组:
管道是可以执行的一系列事件或作业。
理解管道的最简单方法是可视化一系列阶段,如下所示:
![管道示例 Pipeline example](https://i-blog.csdnimg.cn/blog_migrate/24d2cc572563da9914f43e613b08b4a5.jpeg)
在这里,您应该看到两个熟悉的概念: Stage和Step 。
- 阶段:包含一系列步骤的块。 阶段块可以命名为任何名称; 它用于可视化管道过程。
- 步骤:说明要做什么的任务。 步骤在阶段块内定义。
在上面的示例图中,阶段1可以命名为“ Build”,“ Gather Information”或其他名称,其他阶段模块也可以采用类似的想法。 “步骤”仅说明要执行的内容,并且可以是简单的打印命令(例如, echo“ Hello,World” ),程序执行命令(例如, java HelloWorld ),外壳执行命令(例如, chmod 755) Hello )或其他任何命令-只要在Jenkins环境中将其识别为可执行命令即可。
Jenkins管道作为通常称为Jenkinsfile的编码脚本提供,尽管文件名可以不同。 这是一个简单的Jenkins管道文件的示例。
// Example of Jenkins pipeline script
pipeline
{
stages
{
stage
(
"Build"
)
{
steps
{
// Just print a Hello, Pipeline to the console
echo
"Hello, Pipeline!"
// Compile a Java file. This requires JDKconfiguration from Jenkins
javac HelloWorld.
java
// Execute the compiled Java binary called HelloWorld. This requires JDK configuration from Jenkins
java HelloWorld
// Executes the Apache Maven commands, clean then package. This requires Apache Maven configuration from Jenkins
mvn clean package .
/ HelloPackage
// List the files in current directory path by executing a default shell command
sh
"ls -ltr"
}
}
// And next stages if you want to define further...
}
// End of stages
}
// End of pipeline
从此示例脚本可以很容易地看到Jenkins管道的结构。 请注意,某些命令(例如java , javac和mvn)默认情况下不可用,需要通过Jenkins进行安装和配置。 因此:
Jenkins管道是一种通过将其编码并在包含多个包含任务的多个步骤的多个块中进行结构化来以定义的方式顺序执行Jenkins作业的方法。
好。 既然您了解了Jenkins管道是什么,我将向您展示如何创建和执行Jenkins管道。 在本教程的最后,您将构建如下的Jenkins管道:
![最后结果 Final Result](https://i-blog.csdnimg.cn/blog_migrate/41a8eba9b9d0df55fcb6092d035d9ed9.png)
如何建立詹金斯管道
为了使本教程更容易理解,我创建了一个示例GitHub存储库和一个视频教程。
在开始本教程之前,您需要:
- Java开发工具包:如果尚未安装,请安装JDK并将其添加到环境路径中,以便可以通过终端执行Java命令(如java jar )。 这是利用本教程中使用的Jenkins的Java Web Archive(WAR)版本所必需的(尽管您可以使用任何其他发行版)。
- 基本的计算机操作:您应该知道如何键入一些代码,通过外壳执行基本的Linux命令以及打开浏览器。
让我们开始吧。
步骤1:下载Jenkins
导航至Jenkins下载页面 。 向下滚动到Generic Java软件包(.war) ,然后单击以下载文件。 将其保存在容易找到的位置。 (如果选择其他Jenkins发行版,则本教程的其余步骤应该与步骤2几乎相同。)使用WAR文件的原因是它是一次性可执行文件,可以轻松地执行和删除。
![将Jenkins下载为Java WAR文件 Download Jenkins as Java WAR file](https://i-blog.csdnimg.cn/blog_migrate/66852ed7cf365cee5d8e833977a49a80.png)
步骤2:将Jenkins作为Java二进制文件执行
打开一个终端窗口,并使用cd <您的路径>进入下载Jenkins的目录。 (在继续之前,请确保已安装JDK并将其添加到环境路径。)执行以下命令,该命令将WAR文件作为可执行二进制文件运行:
java -jar . / jenkins.war
如果一切顺利,Jenkins应该在默认端口8080上启动并运行。
![作为可执行JAR二进制文件执行 Execute as an executable JAR binary](https://i-blog.csdnimg.cn/blog_migrate/78ed1988bcac6d3318ec6595edffefda.jpeg)
步骤3:建立新的Jenkins工作
打开Web浏览器并导航到localhost:8080 。 除非您以前有Jenkins安装,否则应直接进入Jenkins仪表板。 单击创建新作业 。 您也可以单击左侧的“ 新建项目 ”。
![创造新工作 Create New Job](https://i-blog.csdnimg.cn/blog_migrate/a129dd0eebb7f0f2e4a37dbab0ad525c.jpeg)
步骤4:创建管道作业
在此步骤中,您可以选择并定义要创建的Jenkins作业类型。 选择管道并为其命名(例如,TestPipeline)。 单击“ 确定”创建管道作业。
![创建新的管道作业 Create New Pipeline Job](https://i-blog.csdnimg.cn/blog_migrate/f34cb5c84702bac1dfa4e0816d29520b.png)
您将看到一个Jenkins作业配置页面。 向下滚动以找到“ 管道”部分 。 有两种执行Jenkins管道的方法。 一种方法是直接在Jenkins上编写管道脚本 ,另一种方法是从SCM (源代码管理)中检索Jenkins文件 。 在接下来的两个步骤中,我们将经历两种方式。
步骤5:通过直接脚本配置和执行管道作业
要使用直接脚本执行管道,请首先从GitHub复制示例Jenkinsfile的内容。 选择Pipeline脚本作为目标并将Jenkinsfile内容粘贴到Script中 。 花一些时间研究Jenkins文件的结构。 请注意,共有三个阶段:构建,测试和部署,这是任意的,可以是任何阶段。 每个阶段中都有步骤; 在此示例中,他们只是打印一些随机消息。
单击“ 保存”以保留更改,它应自动将您带回到“作业概述”。
![配置为以Jenkins脚本运行 Configure to Run as Jenkins Script](https://i-blog.csdnimg.cn/blog_migrate/7a38804d0ecbbd9fcb5cd2d51606a612.png)
要开始构建管道的过程,请单击立即构建 。 如果一切正常,您将看到第一个管道(如下面的管道)。
![单击立即生成并查看结果 Click Build Now and See Result](https://i-blog.csdnimg.cn/blog_migrate/51a57b9cd4d1fb4ec5422b2b0f999a0c.png)
要查看管道脚本构建的输出,请单击任何阶段,然后单击Log 。 您会看到这样的消息。
![使用Jenkins访问示例GitHub获取克隆链接 Visit sample GitHub with Jenkins get clone link](https://i-blog.csdnimg.cn/blog_migrate/c729e53c03d6de6b551155152a412b0c.png)
步骤6:使用SCM配置和执行管道作业
现在,进行调整:在此步骤中,您将通过从源代码控制的GitHub复制Jenkinsfile来部署相同的Jenkins作业。 在同一GitHub存储库中 ,通过单击克隆或下载并复制其URL来选择存储库URL。
![从GitHub结帐 Checkout from GitHub](https://i-blog.csdnimg.cn/blog_migrate/f91f6fd263b1866bb30b94aa5eafc53d.png)
单击配置以修改现有作业。 滚动到“ 高级项目选项”设置,但这一次,在“ 目标”下拉列表中选择“ 来自SCM的管道脚本”选项。 将GitHub repo的URL粘贴到Repository URL中 ,然后在Script Path中键入Jenkinsfile 。 单击保存按钮保存 。
![从SCM更改为管道脚本 Change to Pipeline script from SCM](https://i-blog.csdnimg.cn/blog_migrate/866c6d70a86c70e0e67d8476076796dc.png)
要构建管道,返回到“任务概述”页面后,单击立即构建以再次执行作业。 结果将与之前相同,除了您还有一个额外的阶段,称为声明:Checkout SCM 。
![再次构建并验证 Build again and verify](https://i-blog.csdnimg.cn/blog_migrate/4f91d4170a7c1a8079c7823085b09deb.png)
要查看SCM构建中管道的输出,请单击舞台并查看日志以检查源代码控制克隆过程的进行情况。
![验证结帐程序 Verify Checkout Procedure](https://i-blog.csdnimg.cn/blog_migrate/56b65bb5cf6808c48703e1e9d76998eb.jpeg)
不仅仅是打印邮件
恭喜你! 您已经建立了第一个Jenkins管道!
您说,“但是等等,这是非常有限的。除了打印虚拟消息外,我真的不能做任何事情。” 那没问题。 到目前为止,本教程仅简要介绍了Jenkins管道可以做什么,但是您可以通过将其与其他工具集成来扩展其功能。 以下是您下一个项目的一些想法:
- 构建一个多阶段的Java构建管道,该阶段从以下阶段开始:从Nexus或Artifactory之类的JAR存储库中提取依赖项,编译Java代码,运行单元测试,打包到JAR / WAR文件中以及部署到云服务器。
- 实施高级代码测试仪表板,该仪表板将根据单元测试,负载测试和Selenium的自动用户界面测试,报告项目的运行状况。
- 构建多管道或多用户管道,以自动化执行Ansible剧本的任务,同时允许授权用户响应正在进行的任务。
- 设计一个完整的端到端DevOps管道,以提取存储在SCM(如GitHub)中的基础结构资源文件和配置文件,并通过各种运行时程序执行脚本。
遵循本文结尾处的任何教程,以了解这些更高级的案例。
管理詹金斯
在Jenkins主仪表板上,单击Manage Jenkins 。
![管理詹金斯 Manage Jenkins](https://i-blog.csdnimg.cn/blog_migrate/bcf83314b469b0aafad7921bd62f4c70.jpeg)
全局工具配置
有许多选项可用,包括管理插件,查看系统日志等。单击“ 全局工具配置” 。
![全局工具配置 Global Tools Configuration](https://i-blog.csdnimg.cn/blog_migrate/003239641c69dd09ae58e8c4ae35ffa0.png)
添加其他功能
在这里,您可以添加JDK路径,Git,Gradle等。 配置工具后,只需将命令添加到Jenkinsfile中或通过Jenkins脚本执行即可。
![查看插件的各种选项 See Various Options for Plugin](https://i-blog.csdnimg.cn/blog_migrate/afa8e02f7b6d77faacda042cb90acc41.jpeg)
然后去哪儿?
本文向您介绍使用酷炫的开源工具Jenkins创建CI / CD管道的方法。 要了解您可以使用Jenkins完成的许多其他操作,请在Opensource.com上查看以下其他文章:
- Jenkins X入门
- 使用Jenkins安装OpenStack云
- 运行Jenkins构建在容器中
- Jenkins管道入门
- 如何使用Jenkins运行JMeter
- 将OpenStack集成到您的Jenkins工作流程中
您可能对我为补充您的开源之旅而写的其他一些文章感兴趣:
翻译自: https://opensource.com/article/19/9/intro-building-cicd-pipelines-jenkins
jenkins ci/cd