Jenkins新手实战系列——3.多分支管道(Multibranch Pipeline)模式项目

3,705 阅读3分钟

前话

上一章节《Jenkins新手实战系列——2.管道(Pipeline)模式项目》在工作中已经满足绝大部分场景的持续集成需求。

一般而言,一个项目多分支持续集成的话可以通过开发、测试、正式服务器各部署一套jenkins服务实现,现实公司中也是这么做的。

但是如果我只想一套jenkins服务管理多个分支持续集成咋办,那这个就是我们这章节的主题了。

案例

我有一个前端项目,这个项目使用git进行版本管理,有两个分支分别是master和develop,其中:

  1. master分支是正式分支,不能提交代码,只能有管理员合并develop分支代码
  2. develop分支是开发分支,开发只要提到变更到这个分支

我想每个分支都能在有新的提交的时候能够被感知,然后按顺序执行以下动作:

  1. 拉取最新代码
  2. 将目标资源文件部署到nginx服务器上
  3. 在部署完成后,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内定义,且目前官方只支持三种触发模式:

  1. cron:定时拉取代码构建
  2. pollSCM:定时拉取代码,存在新变更时构建
  3. 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分支新增变更提交,大概两分钟后即可看到项目自动触发进行项目构建动作。