jenkinsfile
设置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
以打开工作创建向导。
提供my-pipeline-job
作为my-pipeline-job
的名称,然后选择Multibranch Pipeline
作为类型,然后单击OK
。
Pipeline
作业类型允许您将Jenkinsfile直接粘贴到作业配置中,或者引用单个git存储库作为源,然后指定Jenkinsfile所在的单个分支。 您很少要使用此作业类型,最好避免使用。
Multibranch Pipeline
作业类型,您可以定义一个作业,Jenkins将从单个git存储库中检测到多个分支,并在找到Jenkinsfile时创建嵌套作业。 这是使用Jenkins管道的最佳方法。
定义Jenkinsfile源
添加一个Git
源并提供https://github.com/hoto/jenkinsfile-examples.git
存储库链接。
Jenkins正在寻找Jenkinsfile的默认位置是使用Jenkinsfile
作为文件名的项目的根。
Jenkinsfile可以放在任何目录中,文件名可以是您想要的任何名称。 但是除非您有充分的理由不Jenkinsfile
做,否则我会遵循默认约定,即使用项目的根目录和Jenkinsfile
作为文件名。
一个Jenkins作业只能引用一个Jenkinsfile。 如果您的存储库中有更多Jenkinsfile,则必须为每个文件创建一个Multibranch Pipeline
作业。
提供jenkinsfiles/001-stages-declarative-style.groovy
作为Jenkinsfile Script Path
。 我们也可以只为要扫描的特定分支指定一个正则表达式,但我更喜欢扫描并构建所有分支。
我们引用的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将自动开始构建。
然后,如果您可以在git托管服务提供商中设置一个Webhook,以将新更改通知Jenkins,因为它会使开发人员的构建反馈循环更快。
单击“ Save
,Jenkins将开始第一次扫描。
发生的事情是Jenkins克隆了存储库,并在每个分支中寻找Jenkinsfile。 找到匹配项后,它将为每个分支创建嵌套作业,并为其运行构建。 在我们当前的设置中,詹金斯将每分钟执行一次此循环。
在撰写本文时,只有master
分支符合我的工作标准。 因此,仅创建了一个作业。
Checking branches...
Checking branch master
‘jenkinsfiles/001-stages-declarative-style.groovy’ found
Met criteria
巢状工作
让我们看看詹金斯创造了什么。
回到詹金斯的家,然后点击my-pipeline-job
。
如果您在无法自动创建或建立分支的作业中遇到问题,请检查“ Scan Multibranch Pipeline Log
。
这是我们之前看到的相同的日志视图,但是日志将每分钟刷新,或者当有人单击“ Scan Multibranch Pipeline Now
链接时刷新。
根据我的经验,这种观点是调试多分支管道问题的最佳方法。 如果您在git
命令上看到超时,则通常意味着Jenkins无法访问git存储库。
以下日志告诉我们,仅检测到1个分支,并且Jenkins已经在该分支上具有提交的构建。
No changes detected: master (still at c9b78b77a085becd313f1efff2497)
Processed 1 branches
返回嵌套作业视图,然后单击master
分支的作业。
如果引用的git仓库从不更改,则不会再运行任何构建。 如果需要,您始终可以通过单击Build Now
链接手动触发构建。 当构建由于随机原因而失败时,这很有用。
自动分支检测
在本教程中,我将创建一个新分支并将其推送到存储库,以便我们可以测试是否创建了新的嵌套作业。
一分钟后,自动创建creating-a-jenkins-pipeline-blog
分支的新作业。
从日志中,我们可以看到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
而已! 下一步将是为即时构建创建一个Webhook,并修改Jenkinsfile以执行一些有用的操作,例如构建和部署应用程序。
翻译自: https://www.javacodegeeks.com/2019/05/creating-jenkinsfile-pipeline.html
jenkinsfile