设置Jenkins多分支管道作业和定义Jenkinsfile的基础。
创建多分支管道作业
如果您想阅读本文,但没有手头的Jenkins实例,则可以使用我的GitHub项目启动dockerized Jenkins:
git clone https://github.com/hoto/jenkinsfile-examples.git
cd jenkinsfile-examples
docker-compose pull
docker-compose up
让我们通过转到localhost:8080
打开Jenkins
那里已经有几个工作,但是请忽略它们,因为我们将创建一个新工作。
创造新工作
单击“ New Item
以打开工作创建向导。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/726be7df739ed857045011b7908fe76a.png)
提供my-pipeline-job
作为my-pipeline-job
的名称,并选择Multibranch Pipeline
作为类型,然后单击OK
。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/c5ce8ff0685c5648ef15153c9235c9ea.png)
Pipeline
作业类型允许您将Jenkinsfile直接粘贴到作业配置中,或者引用单个git存储库作为源,然后指定Jenkinsfile所在的单个分支。 您很少要使用此作业类型,最好避免使用。
Multibranch Pipeline
作业类型,您可以定义一个作业,Jenkins将从一个git存储库中检测到多个分支,并在找到Jenkinsfile时创建嵌套作业。 这是使用Jenkins管道的最佳方法。
定义Jenkinsfile源
添加一个Git
源,并提供https://github.com/hoto/jenkinsfile-examples.git
存储库链接。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/0a4300ea7abd4f3e8e3fb5b23f4a0016.png)
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/0e828ecd22d62945f2951cf97c0bf011.png)
Jenkins正在寻找Jenkinsfile的默认位置是使用Jenkinsfile
作为文件名的项目的根。
Jenkinsfile可以放在任何目录中,文件名可以是您想要的任何文件。 但是除非您有充分的理由不Jenkinsfile
做,否则我会遵循默认约定,即使用项目的根目录和Jenkinsfile
作为文件名。
一个Jenkins作业只能引用一个Jenkinsfile。 如果您的存储库中有更多Jenkinsfile,则必须为每个文件创建一个Multibranch Pipeline
作业。
提供jenkinsfiles/001-stages-declarative-style.groovy
作为Jenkinsfile Script Path
。 我们也可以只为要扫描的特定分支指定一个正则表达式,但我更喜欢扫描并构建所有分支。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/db402d76587988aeaed1fe00ef32f858.png)
我们引用的Jenkinsfile非常简单,看起来像这样:
pipeline {
agent any
stages {
stage('Stage 1') {
steps {
script {
echo 'Stage 1'
}
}
}
stage('Stage 2') {
steps {
script {
echo 'Stage 2'
}
}
}
}
}
通过轮询检测更改
外部Webhook可以立即通过存储库中的更改(例如,新提交)通知Jenkins,但是如果您不知道如何设置它,则始终可以从Jenkins轮询git存储库并检查新更改开始。
激活“ Scan Multibranch Pipeline Triggers
使Jenkins git fetch
在1分钟的间隔内git fetch
新更改。 当检测到新的提交或分支时,Jenkins将自动开始构建。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/680ad7e26255a604e0f0dd5c1a3e32a7.png)
然后,如果您可以在git托管提供程序中设置一个Webhook,以将新更改通知Jenkins,因为它会使开发人员的构建反馈循环更快。
单击“ Save
,Jenkins将开始第一次扫描。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/cbfd364650b83a4cb396afa1432eaa73.png)
发生的事情是Jenkins克隆了存储库,并在每个分支中查找Jenkinsfile。 找到匹配项后,它将为每个分支创建嵌套作业,并为其运行构建。 在我们当前的设置中,詹金斯将每分钟执行一次此循环。
在撰写本文时,只有master
分支符合我的工作标准。 因此,仅创建了一个作业。
Checking branches...
Checking branch master
‘jenkinsfiles/001-stages-declarative-style.groovy’ found
Met criteria
巢状工作
让我们看看詹金斯创造了什么。
回到詹金斯的家,然后点击my-pipeline-job
。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/9aa6654e7aa908597d6e5b9fa44b76d6.png)
如果您在无法自动创建或创建分支的作业中遇到问题,请检查“ Scan Multibranch Pipeline Log
。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/a09d5dc99a9e0410bac191e4ca0eb8ac.png)
这与我们之前看到的日志视图相同,但是日志将每分钟刷新,或者当有人单击“ Scan Multibranch Pipeline Now
链接时刷新。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/c821145a262c694de1146a19fe5900c3.png)
根据我的经验,这种观点是调试多分支管道问题的最佳方法。 如果您在git
命令上看到超时,则通常意味着Jenkins无法访问git存储库。
以下日志告诉我们,仅检测到1个分支,并且Jenkins已经在该分支上具有提交的构建。
No changes detected: master (still at c9b78b77a085becd313f1efff2497)
Processed 1 branches
返回嵌套作业视图,然后单击master
分支的作业。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/b83828800ec6e1b918e4f605157cb7a4.png)
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/7a6b94dee7c873d215374769ff77e2de.png)
如果引用的git仓库从不更改,则不会再运行任何构建。 如果需要,您始终可以通过单击Build Now
链接手动触发构建。 当构建由于随机原因而失败时,这很有用。
自动分支检测
在本教程中,我将创建一个新分支并将其推送到存储库,以便我们可以测试是否创建了新的嵌套作业。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/72ee67653175ea55af2fe220c1487a95.png)
一分钟后,自动创建creating-a-jenkins-pipeline-blog
分支的新工作。
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/e92529151dd72dddece7e76da52c6b45.png)
从日志中,我们可以看到Jenkins检测到新的分支匹配管道条件并为其计划了构建。
Started by timer
[...]
Checking branches...
Checking branch master
‘jenkinsfiles/001-stages-declarative-style.groovy’ found
Met criteria
No changes detected: master (still at c9b78b77a085becd313f1efff249)
Checking branch creating-a-jenkinsfile-pipeline-blog
‘jenkinsfiles/001-stages-declarative-style.groovy’ found
Met criteria
Scheduled build for branch: creating-a-jenkinsfile-pipeline-blog
Processed 2 branches
![Jenkinsfile管道](https://i-blog.csdnimg.cn/blog_migrate/3cfbd3ff30a845c667a2eb1b644c7ae7.png)
而已! 下一步将是为即时构建创建一个Webhook,并修改Jenkinsfile以做一些有用的事情,例如构建和部署您的应用程序。
翻译自: https://www.javacodegeeks.com/2019/05/creating-jenkinsfile-pipeline.html