前话
上一章节《Jenkins新手实战系列——2.管道(Pipeline)模式项目》在工作中已经满足绝大部分场景的持续集成需求。
一般而言,一个项目多分支持续集成的话可以通过开发、测试、正式服务器各部署一套jenkins服务实现,现实公司中也是这么做的。
但是如果我只想一套jenkins服务管理多个分支持续集成咋办,那这个就是我们这章节的主题了。
案例
我有一个前端项目,这个项目使用git进行版本管理,有两个分支分别是master和develop,其中:
- master分支是正式分支,不能提交代码,只能有管理员合并develop分支代码
- develop分支是开发分支,开发只要提到变更到这个分支
我想每个分支都能在有新的提交的时候能够被感知,然后按顺序执行以下动作:
- 拉取最新代码
- 将目标资源文件部署到nginx服务器上
- 在部署完成后,jenkins项目管理后台能够下载最新的目标资源文件的压缩包
下面开始案例实战。
开始
1.新建git项目
- 新建项目my-multibranch-pipeline
- 创建分支master和develop
- 在develop分支中新增文件index.html
- 在master分支合并develop分支代码
详细过程略,项目地址为:http://localhost:3000/root/my-multibranch-pipeline
2.新建jenkins项目
新建项目名称为my-multibranch-pipeline,选中Multibranch Pipeline项目模式
3.配置jenkins项目
3.1 设置git仓库地址
因为jenkins需要感知git项目分支,因此需要配置git项目地址。
3.2 设置构建详情
直接选择默认选项,通过git项目Jenkinsfile脚本定义执行构建动作。
3.3 设置扫描分支触发器
一个git项目分支基本是立项确定,变动很少,但仍会存在增删改情况,因此设置定时任务自动扫描分支。
3.4 配置完成
到这里就配置完了。前面的两个模式都有构建触发器配置,多分支管道模式比较特殊,其构建触发器需要在Jenkinsfile内定义,且目前官方只支持三种触发模式:
- cron:定时拉取代码构建
- pollSCM:定时拉取代码,存在新变更时构建
- upsteam
这个在后续写Jenkinsfile时会体现。
4.git项目新增Jenkinsfile文件
- 在develop分支新建文件Jenkinsfile
- 在master分支合并develop分支
Jenkinsfile脚本内容如下:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
echo '开始拉取代码...'
cleanWs()
git branch: '$BRANCH_NAME', credentialsId: '1b458187-1203-4ef5-8f9a-97fe7576e4b1', url: 'http://gitea:3000/root/my-multibranch-pipeline.git'
}
}
stage('Build') {
steps {
echo '开始构建代码...'
}
}
stage('Archive') {
steps {
echo '开始打包文件...'
archiveArtifacts '**/*'
}
}
stage('Deploy') {
steps {
echo '开始部署文件...'
sshPublisher(publishers: [sshPublisherDesc(configName: 'nginx', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nginx -s reload', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '$BRANCH_NAME', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '**/*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
triggers {
pollSCM 'H/2 * * * *'
}
}
5.jenkins项目中手动出发扫描分支
点击扫描按钮
jenkins项目首页即可看到维护的分支信息
测试
在develop分支新增变更提交,大概两分钟后即可看到项目自动触发进行项目构建动作。