从头开始构建 DevOps 流水线。推动该计划的核心技术是 Jenkins,这是一个用于建立持续集成和持续交付(CI/CD)流水线的开源工具。
在花旗,有一个单独的团队为专用的 Jenkins 流水线提供稳定的主从节点环境,但是该环境仅用于质量保证(QA)、构建阶段和生产环境。开发环境仍然是非常手动的,我们的团队需要对其进行自动化以在加快开发工作的同时获得尽可能多的灵活性。这就是我们决定为 DevOps 建立 CI/CD 流水线的原因。Jenkins 的开源版本由于其灵活性、开放性、强大的插件功能和易用性而成为显而易见的选择。
在本文中,我将分步演示如何使用 Jenkins 构建 CI/CD 流水线。
什么是流水线pipeline?
在进入本教程之前,了解有关 CI/CD 流水线(pipeline) 的知识会很有帮助。
首先,了解 Jenkins 本身并不是流水线这一点很有帮助。
只是创建一个新的 Jenkins 作业并不能构建一条流水线。
可以把 Jenkins 看做一个遥控器,在这里点击按钮即可。当你点击按钮时会发生什么取决于遥控器要控制的内容。
Jenkins 为其他应用程序 API、软件库、构建工具等提供了一种插入 Jenkins 的方法,它可以执行并自动化任务。
Jenkins 本身不执行任何功能,但是随着其它工具的插入而变得越来越强大。
【流水线】是一个单独的概念,指的是按顺序连接在一起的事件或作业组:
“ 流水线(pipeline) ”是可以执行的一系列事件或作业。
理解流水线的最简单方法是可视化一系列阶段,如下所示:
在这里,你应该看到两个熟悉的概念: 阶段(Stage)和 步骤(Step)。
- 阶段:一个包含一系列步骤的块。阶段块可以命名为任何名称;它用于可视化流水线过程。
- 步骤:表明要做什么的任务。步骤定义在阶段块内。
在上面的示例图中,阶段 1 可以命名为 “构建”、“收集信息”或其它名称,其它阶段块也可以采用类似的思路。“步骤”只是简单地说放上要执行的内容,它可以是简单的打印命令(例如,echo "Hello, World"
)、程序执行命令(例如,java HelloWorld
)、shell 执行命令( 例如,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 流水线,如下所示:
作者:Linux中国
链接:https://zhuanlan.zhihu.com/p/90612874
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。