jenkins 入门
Jenkins是著名的开源持续集成和持续开发自动化工具。 它有一个出色的支持社区,数百年来,许多插件和开发人员一直在使用它。
本文将提供有关如何开始使用管道和多分支管道的简要指南。
为什么要管道?
- 开发人员可以使用一个工具多次自动执行代码的集成,测试和部署,从源代码到产品使用者。
- 可以将称为“ Jenkinsfiles”的管道“作为代码”保存在任何源代码控制系统中。 在以前的Jenkins版本中,仅使用UI配置作业。 使用Jenkinfiles,管道更易于维护和移植。
- 多分支管道与Git集成在一起,因此不同的分支,功能和发行版可以具有独立的管道,从而使每个开发人员都可以自定义其开发/部署过程。
- 团队的非技术人员可以使用参数触发和自定义构建,分析测试报告,接收电子邮件警报并通过管道阶段视图(在Blue Ocean UI的最新版本中进行了改进)更好地了解构建和部署过程。
- Jenkins也可以使用Docker安装,并且管道可以与Docker代理进行交互。
要求:
- Java 8的Jenkins 2.89.2 (WAR)是本使用方法中使用的版本
- 使用的插件(要安装:
Manage Jenkins → Manage Plugins →Available
):- 管道: 声明式
- 蓝海
- Cucumber报告
Jenkins Pipelines入门
这是我使用的Jenkinsfile(您也可以在GitHub上访问此代码 ):
pipeline {
agent any
stages {
stage('testing pipeline'){
steps{
echo 'test1'
sh 'mkdir from-jenkins'
sh 'touch from-jenkins/test.txt'
}
}
}
}
1.单击新建项目 。
![欢迎来到詹金斯 Welcome to Jenkins](https://i-blog.csdnimg.cn/blog_migrate/189efe76b20f31c533980c01202286da.png)
2.为项目命名,选择Pipeline ,然后单击OK 。
![输入管道名称 Enter pipeline name](https://i-blog.csdnimg.cn/blog_migrate/d936ab1f2a5a294dfe909769825ee18e.png)
3.创建项目后,将显示配置页面。 在“ 定义”部分中,您必须决定从源代码管理(SCM)获取Jenkins文件,或者在Jenkins中创建Pipeline脚本。 建议在SCM中托管Jenkinsfile,以便其可移植和可维护。
![詹金斯的高级选项 Advanced options in Jenkins](https://i-blog.csdnimg.cn/blog_migrate/3b32249935178e6c4317fe4dfb531c3e.png)
我选择的SCM是具有简单用户和通过凭据的Git(也可以使用SSH)。 默认情况下,除非在Script Path目录中另外指定,否则Jenkins将在该存储库中查找Jenkinsfile。
4.保存Jenkinsfile之后,返回作业页面,然后选择Build Now 。 詹金斯将触发这份工作。 它的第一步是从SCM下拉Jenkinsfile。 它报告上一次运行的所有更改并执行。
![詹金斯仪表板 Jenkins dashboard](https://i-blog.csdnimg.cn/blog_migrate/b37b13f422e5df3f4feed5c359afb672.png)
单击舞台视图可提供控制台信息:
![詹金斯舞台原木 Jenkins stage logs](https://i-blog.csdnimg.cn/blog_migrate/ea353e83c997564b621023312b236515.png)
使用蓝海
詹金斯的《 蓝色海洋》为管道提供了更好的UI。 可从作业的主页进行访问(请参见上图)。
![蓝海管道 Blue Ocean pipeline](https://i-blog.csdnimg.cn/blog_migrate/86a7eb9fa1d192850f67043423ecd4cd.png)
这个简单的Pipeline有一个阶段(默认阶段除外): Checkout SCM ,它分三步拉取Jenkinsfile。 第一步回波的消息,所述第二创建一个名为目录from-
jenkins
在詹金斯的工作区,以及第三放一个称为文件test.txt
该目录内。 Jenkins工作区的路径是$user/.jenkins/workspace
,位于执行作业的计算机中。 在此示例中,作业在任何可用节点中执行。 如果没有其他节点连接,则在安装了Jenkins的计算机中执行该节点-选中“管理Jenkins”>“管理节点”以获取有关节点的信息。
创建管道的另一种方法是使用Blue Ocean的插件。 (以下屏幕截图显示了相同的仓库。)
1.单击打开蓝海 。
![](https://i-blog.csdnimg.cn/blog_migrate/f52c0d217596f72103802dda284cf20e.png)
屏幕快照:Miguel Suarez
2.单击新建管道 。
![蓝海新管道 Blue Ocean New Pipeline](https://i-blog.csdnimg.cn/blog_migrate/062f7f86ad9db22eb43ba71d3c4ea95f.png)
3.选择SCM并输入存储库URL; 将提供一个SSH密钥。 这必须添加到您的Git SSH密钥中(在Settings →SSH and GPG keys
)。
![输入存储库URL Enter repository URL](https://i-blog.csdnimg.cn/blog_migrate/db833398e9131f302266c81b5c26d50f.png)
4. Jenkins将自动检测分支和Jenkinsfile(如果存在)。 这也将触发工作。
![蓝海触发工作 Blue Ocean triggers job](https://i-blog.csdnimg.cn/blog_migrate/999fbae16e35e3a6becd3fe723320a69.png)
管道开发:
以下Jenkinsfile从GitHub存储库触发Cucumber测试,创建并存档JAR,发送电子邮件,并公开该作业可以通过变量,并行阶段等执行的不同方式。本演示中使用的Java项目是从cumcum / cucumber- jvm到mluyo3414 / cucumber-jvm 。 您也可以访问的 Jenkinsfile GitHub上。 由于Jenkinsfile不在存储库的顶层目录中,因此必须将配置更改为其他路径:
![输入脚本路径 Enter script path](https://i-blog.csdnimg.cn/blog_migrate/c10bb1254c587420d63253879a514486.png)
pipeline {
// 1. runs in any agent, otherwise specify a slave node
agent any
parameters {
// 2.variables for the parametrized execution of the test: Text and options
choice(choices: 'yes\nno', description: 'Are you sure you want to execute this test?', name: 'run_test_only')
choice(choices: 'yes\nno', description: 'Archived war?', name: 'archive_war')
string(defaultValue: "your.email@gmail.com", description: 'email for notifications', name: 'notification_email')
}
//3. Environment variables
environment {
firstEnvVar= 'FIRST_VAR'
secondEnvVar= 'SECOND_VAR'
thirdEnvVar= 'THIRD_VAR'
}
//4. Stages
stages {
stage('Test'){
//conditional for parameter
when {
environment name: 'run_test_only', value: 'yes'
}
steps{
sh 'cd examples/java-calculator && mvn clean integration-test'
}
}
//5. demo parallel stage with script
stage ('Run demo parallel stages') {
steps {
parallel(
"Parallel stage #1":
{
//running a script instead of DSL. In this case to run an if/else
script{
if (env.run_test_only =='yes')
{
echo env.firstEnvVar
}
else
{
echo env.secondEnvVar
}
}
},
"Parallel stage #2":{
echo "${thirdEnvVar}"
}
)
}
}
}
//6. post actions for success or failure of job. Commented out in the following code: Example on how to add a node where a stage is specifically executed. Also, PublishHTML is also a good plugin to expose Cucumber reports but we are using a plugin using Json.
post {
success {
//node('node1'){
echo "Test succeeded"
script {
// configured from using gmail smtp Manage Jenkins-> Configure System -> Email Notification
// SMTP server: smtp.gmail.com
// Advanced: Gmail user and pass, use SSL and SMTP Port 465
// Capitalized variables are Jenkins variables – see https://wiki.jenkins.io/display/JENKINS/Building+a+software+project
mail(bcc: '',
body: "Run ${JOB_NAME}-#${BUILD_NUMBER} succeeded. To get more details, visit the build results page: ${BUILD_URL}.",
cc: '',
from: 'jenkins-admin@gmail.com',
replyTo: '',
subject: "${JOB_NAME} ${BUILD_NUMBER} succeeded",
to: env.notification_email)
if (env.archive_war =='yes')
{
// ArchiveArtifact plugin
archiveArtifacts '**/java-calculator-*-SNAPSHOT.jar'
}
// Cucumber report plugin
cucumber fileIncludePattern: '**/java-calculator/target/cucumber-report.json', sortingMethod: 'ALPHABETICAL'
//publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: true, reportDir: '/home/reports', reportFiles: 'reports.html', reportName: 'Performance Test Report', reportTitles: ''])
}
//}
}
failure {
echo "Test failed"
mail(bcc: '',
body: "Run ${JOB_NAME}-#${BUILD_NUMBER} succeeded. To get more details, visit the build results page: ${BUILD_URL}.",
cc: '',
from: 'jenkins-admin@gmail.com',
replyTo: '',
subject: "${JOB_NAME} ${BUILD_NUMBER} failed",
to: env.notification_email)
cucumber fileIncludePattern: '**/java-calculator/target/cucumber-report.json', sortingMethod: 'ALPHABETICAL'
//publishHTML([allowMissing: true, alwaysLinkToLastBuild: false, keepAll: true, reportDir: '/home/tester/reports', reportFiles: 'reports.html', reportName: 'Performance Test Report', reportTitles: ''])
}
}
}
始终检查管道语法以了解如何在Jenkinsfile中使用不同的插件。
![管道语法 Pipeline Syntax](https://i-blog.csdnimg.cn/blog_migrate/27de6737d33d5e8689500bf98454d087.png)
一封电子邮件通知表明构建成功:
![电子邮件通知成功构建 Email notification of successful build](https://i-blog.csdnimg.cn/blog_migrate/33b12812f30a6fb50fb270f8680d3264.png)
成功构建的归档JAR:
![建立报告 Build report](https://i-blog.csdnimg.cn/blog_migrate/ec29753fc24175066e3a2413ca40a940.png)
您可以在同一页面上访问Cucumber报告 。
![Cucumber报告图 Cucumber report graph](https://i-blog.csdnimg.cn/blog_migrate/2393db674a48b338c877c5554bec9a91.png)
![Cucumber报告数据 Cucumber report data](https://i-blog.csdnimg.cn/blog_migrate/fcd901155aa8fa5430f17fc0a8b4c029.png)
如何创建多分支管道
如果您的项目已具有Jenkins文件,请按照Jenkins文档中的Multibranch Pipeline项目说明进行操作。 它使用Git并假设凭据已配置。 这是传统视图中配置的外观:
![传统的詹金斯配置 Traditional Jenkins configuration](https://i-blog.csdnimg.cn/blog_migrate/bed1ccdca426a3568b4544cd888dfdc8.png)
如果这是您第一次创建管道,请按照下列步骤操作:
1.选择打开蓝海 。
![](https://i-blog.csdnimg.cn/blog_migrate/f52c0d217596f72103802dda284cf20e.png)
2.选择新建管道 。
![新管道 New Pipeline](https://i-blog.csdnimg.cn/blog_migrate/fbc52a572d620ef983c10b7ca8574461.png)
3.选择Git并插入Git存储库地址。 该存储库当前没有Jenkinsfile。 将会生成SSH密钥; 它将在下一步中使用。
![连接到Git存储库 Connect to Git repository](https://i-blog.csdnimg.cn/blog_migrate/03690fe212da20dea17be402309fc0b4.png)
4.转到GitHub。 单击右上角的个人资料头像,然后选择设置。 然后从左侧菜单中选择SSH和GPG密钥 ,并插入Jenkins提供的SSH密钥。
![添加新的SSH密钥 Add new SSH key](https://i-blog.csdnimg.cn/blog_migrate/3f554e64cc08cf4b640527bd7b05de04.png)
5.返回到Jenkins,然后单击创建管道 。 如果项目不包含Jenkins文件,则Jenkins将提示您创建一个新文件。
![通知不存在Jenkinsfile Notification that no Jenkinsfile exists](https://i-blog.csdnimg.cn/blog_migrate/04b7721527481d1262ecef91cb8dc8ae.png)
6.单击创建管道后 ,交互式管道图将提示您通过单击+添加阶段。 您可以将并行或顺序阶段以及多个步骤添加到每个阶段。 列表为步骤提供了不同的选项。
![创建管道 Create pipeline](https://i-blog.csdnimg.cn/blog_migrate/a8b7c6eea0b08b987e7d3dc4a3e09408.png)
7.下图显示了三个阶段(阶段1,阶段2a和阶段2b),其中简单的打印消息指示步骤。 您还可以添加环境变量并指定将在哪个代理中执行Jenkinsfile。
![指定代理商 Specify agent](https://i-blog.csdnimg.cn/blog_migrate/4517b670b91c98fd10a6ccf746d17013.png)
单击“ 保存” ,然后单击“ 保存并运行”以提交新的Jenkinsfile。
![保存管道 Save pipeline](https://i-blog.csdnimg.cn/blog_migrate/b32e226755872b5794bfd2af81c7236a.png)
您也可以添加一个新分支。
![提交新分支 Commit to new branch](https://i-blog.csdnimg.cn/blog_migrate/bae7aaf13291672458c73304eac113b3.png)
8.作业将执行。
![执行工作 Executing job](https://i-blog.csdnimg.cn/blog_migrate/7a2d7f8416459918bc462d19aa920fcc.png)
![执行工作 Executing job](https://i-blog.csdnimg.cn/blog_migrate/3ed134b588052c8f771cd575116e6910.png)
如果添加了新分支,则可以在GitHub中看到它。
![GitHub中的分支 Branch in GitHub](https://i-blog.csdnimg.cn/blog_migrate/b8cfb712f840778929b93e7ee4760b8e.png)
9.如果创建了另一个带有Jenkinsfile的分支,则可以通过单击立即扫描多分支管道来发现它。 在这种情况下,将在Master上的GitHub中创建一个名为new-feature-2
的新分支(在Jenkins中仅显示具有Jenkinsfiles的分支)。
![新增功能 New feature added](https://i-blog.csdnimg.cn/blog_migrate/4aa9de429c4e4da8a87e5f93249846c1.png)
扫描后,新分支出现在Jenkins中。
![詹金斯的新分支 New branch in Jenkins](https://i-blog.csdnimg.cn/blog_migrate/e27587bae1eb3fc2d5b3b6853eba6931.png)
这个新功能是直接使用GitHub创建的; Jenkins执行扫描时将检测到新分支。 如果您不希望新发现的管道在发现时执行,请通过单击作业的“多分支管道”主页上的“ 配置 ”并添加属性“ 抑制自动SCM触发”来更改设置。 这样,詹金斯将发现新的管道,但必须手动触发它们。
![禁止自动SCM触发 Suppress automatic SCM triggering](https://i-blog.csdnimg.cn/blog_migrate/b4194faebe5ab298db26a5b3dddf42f5.png)
本文最初发布在Medium的ITNext频道上,经许可转载。
翻译自: https://opensource.com/article/18/4/jenkins-pipelines-with-cucumber
jenkins 入门