overview:

多分支工作流程带来了以下几个关键能力:

  1. 在代码仓库中,每个新分支都有自己单独的工作流水线(job)。
  2. 每个工作流水线都记录了对应分支的构建和变更历史。
  3. 可以自定义设置流水线随着分支的删除而删除或修建。
  4. 通过重写父属性(如果需要),可以灵活地单独配置分支流水线属性。

Jenkins pipeline-as-code 使您可以在项目/应用程序源代码存储库中维护CI / CD工作流逻辑,而无需在Jenkins中为每个分支维护其配置。用于构建/测试/部署的流水线代码始终和你的项目/应用程序源代码同步。在仓库中我们用jenkinsfile对流水线代码进行描述。关于jenkinsfile,其简介及语法可参考官方文档


do it:

1.jenkins需要安装多分支流水线插件:

首先打开插件中心:jenkins>Manage Jenkins>Manage Plugins

并且安装如下两个插件(有可能已经安装了):

2.新建一个多分支流水线项目:

2.1 jenkins>新建Item

2.2 填写项目,代码源相关信息

创建完之后在首页会显示

创建完成。

3.接下来在我们的项目根目录添加jenkinsfile(以下用已经存在的项目做演示)

然后在Jenkinsfile中编写流水线代码(pipeline代码语法请参考 语法,以下为示例

pipeline {
options {
buildDiscarder(logRotator(numToKeepStr: '7', artifactNumToKeepStr: '10', daysToKeepStr: '5'))
timeout(time: 12, unit: 'MINUTES')
disableConcurrentBuilds()
}
agent {
label 'master'
} environment {
JOB_NAME = 'pipeline-demo'
} parameters {
booleanParam(name: 'FAST_MODE', defaultValue: false, description: '此操作将会跳过单元测试以及代码质量检查。')
} stages {
stage('pipeline环境准备') { steps {
script {
echo "开始构建"
if(!env.BRANCH_NAME.startsWith('feature-') && !env.BRANCH_NAME.startsWith('release-')){
error("自动构建分支名称必须以feature-或release-开头,当前分支名称为: ${env.BRANCH_NAME}")
} if (env.BRANCH_NAME.startsWith('feature-') ) {
env.env = "beta"
}
if (env.BRANCH_NAME.startsWith('release-')) {
env.env = "stage"
} sh "echo 当前分支 : ${env.BRANCH_NAME}"
sh "echo 当前环境 : ${env.env}"
sh "echo 当前提交 : ${env.commit}"
sh "echo WORKSPACE : ${env.WORKSPACE}"
sh "echo GIT_BRANCH : ${env.GIT_BRANCH}"
sh "echo BUILD_NUMBER : ${env.BUILD_NUMBER}"
sh "echo JOB_NAME : ${env.JOB_NAME}"
sh "./mvnw -v"
sh "java -version"
}
}
} stage("运行测试&收集报告"){
when{
expression {
params.FAST_MODE == false
}
}
steps{
script {
echo "开始运行测试"
sh "./mvnw clean test jacoco:report"
}
}
} stage('代码静态检查') {
when{
expression {
params.FAST_MODE == false
}
}
steps {
withSonarQubeEnv( installationName: 'sonar_server') {
sh './mvnw sonar:sonar'
}
}
} stage("检查结果分析") {
when{
expression {
params.FAST_MODE == false
}
}
steps {
timeout(time: 1, unit: 'HOURS') {
waitForQualityGate abortPipeline: true
}
}
} stage("发布应用") {
steps {
script {
echo "开始发布"
sh "curl --location --request POST 'http://0.0.0.0:8080/job/${env.JOB_NAME}/buildWithParameters' \
--header 'Authorization: ${env.ecarx_jenkins_auth}' \
--form 'env=${env.env}' \
--form 'branchname=origin/${env.BRANCH_NAME}'"
}
}
}
}
}

4.在我们的代码仓库中添加webhook

如下(示例中使用gitlab,如果是其他仓库,可参考各仓库文档):

上图中一系列trigger的多选框,我们只选push事件,意味着在push的时候触发jenkins构建。

之后点击add webhook保存。

⚠️:每个不同的代码仓库可能webhook地址的组成不同,所以添加前可查看各个仓库文档。

准备就绪。

5.push代码

将带有Jenkinsfile的项目代码push的远程代码仓库,回到jenkins控制台

每当有分支push代码时,都会自动触发Jenkins的自动构建。

从而实现ci/cd。

6.总结:

jenkins能让我们轻松实现持续集成/持续部署(ci/cd)。ci/cd让我们实现代码质量内建,ci/cd中最重要的是测试自动化,没有自动化测试的持续集成只是一堆不会带来任何用处的垃圾。我们在流水线中嵌入测试自动化,代码质量检查来保证我们的开发质量。流水线能够及时给开发者反馈,这种反馈非常重要,当我们的流水线失败的时候,我们需要第一时间修复它,从而断绝错误进一步积累(解决错误最好的时机就是错误出现的那一刻),而不是继续开发别的功能。否则等到失败积累到一定程度,我们在去修复的时候,需要付出的成本将是更大的。


关注笔者公众号,推送各类原创/优质技术文章 ⬇️

Jenkins打造多分支流水线指南的更多相关文章

  1. .Net Core自动化部署系列(二):使用Jenkins打造镜像发布流水线

    一.简介 之前写过一篇关于Jenkins搭配GitLab实现.net core项目自动发布到IIS的博文,比较简单哈,只是个Demo.本篇我们将会使用Jenkins搭配GitLab实现镜像的自动打包和 ...

  2. 使用 jenkins 搭建CI/CD流水线 (MAC)

    如何搭建持续集成/持续交付平台?? 如何使用jenkins搭建持续交付流水线,以及和其他工具(如artifactory)集成?如何使用元数据,记录软件发布过程的构建信息,测试结果,并用rest Api ...

  3. Jenkins+Docker+Git+Harbor流水线打包

    Jenkins+Docker+Git+Harbor流水线打包 环境: CentOS Linux release 7.6.1810 (Core) 192.168.247.214 Jenkins+dock ...

  4. Jenkins自动化CI CD流水线之1--介绍与安装

    第1章 大纲 CI/CD, DevOps介绍 Git安装与使用 Jenkins安装与使用 权限管理 参数化构建 Master-Slave 流水线(Pipeline) 邮件通知 应用案例 自动发布PHP ...

  5. Jenkins动态选择分支/tag

    目录 一.简介 二.配置 三.配置tag 四.其它方法 五.List Git Branches插件 一.简介 一般选择分支构建,Git Parameter插件即可.这里是应用pipline的同时,可以 ...

  6. gitlab分支代码本地拉取及jenkins关联gitlab分支

    git本地拉取 git init git remote add origin http://47.*.*.*:8089/back_dev/claimeureka.git git fetch origi ...

  7. Jenkins自动化CI CD流水线之5--pipeline

    一.概览 二.安装 在对jenkins进行初始化安装时,默认已经安装了jenkins的相关插件,如下图所示: 三.实操 新建任务: 编写pipeline脚本: 我们可以借助流水线语法去做. test流 ...

  8. Jenkins自动化CI CD流水线之3--参数化构建

    一. 背景 如果只是简单的构建,jenkins自己默认的插件可以做,但是如果我们想要在构建过程中有更多功能,比如说:选择性构建.传参.项目指定变量等等其他功能,基础的参数化构建可以实现一些简单功能,但 ...

  9. Jenkins自动化CI&CD流水线

    1 环境说明 主机名称 IP cpu核数/内存/硬盘 安装软件 用途 controlnode 172.16.1.120 2/2/60 git 代码仓库 slavenode1 172.16.1.121 ...

随机推荐

  1. NIO-EPollSelectorIpml源码分析

    目录 NIO-EPollSelectorIpml源码分析 目录 前言 初始化EPollSelectorProvider 创建EPollSelectorImpl EPollSelectorImpl结构 ...

  2. 什么是x86什么是x64 它们有什么区别

    1.内存寻址不同: 32位系统,最大支持3.5G内存,如果在32位系统中使用4G或更大的内存,电脑最多只可以识别3.4G左右可用,而64位系统最大可以支持128G大内存. 2.运算速度不同: 64位系 ...

  3. 利用机器学习检测HTTP恶意外连流量

    本文通过使用机器学习算法来检测HTTP的恶意外连流量,算法通过学习恶意样本间的相似性将各个恶意家族的恶意流量聚类为不同的模板.并可以通过模板发现未知的恶意流量.实验显示算法有较好的检测率和泛化能力. ...

  4. 一文看懂js中元素的滚动大小(scrollWidth,scrollHeight,scrollTop,scrollLeft)

    滚动大小(scroll dimension) 滚动大小指的是包含滚动内容元素的大小. 以下是与元素滚动内容大小相关的属性: 1. scrollWidth:在没有滚动条的情况下,元素内容的总宽度. 2. ...

  5. 使用contenteditable+div模拟textarea文本域实现高度自适应

    使用contenteditable+div模拟textarea文本域实现高度自适应 开发过程中由于需要在发送消息的时候需要有一个可以高度自适应的文本域,一开始是使用textarea并搭配auto-si ...

  6. 阿里云ECS开放批量创建实例接口,实现弹性资源的创建

    摘要: 为了更方便的实现弹性的资源创建,方便用户一次运行多台ECS按量实例来完成应用的开发和部署,阿里云开放了ECS的批量创建实例接口RunInstances,可以单次最多创建100台实例,避免重复调 ...

  7. 配置ubunto 流量使用限制 python 实现简单 http server

    很多ubunto 都有流量限制,使用流量.如每天使用200M ,超过了就要提示信息 原理,在本机 开一个 http 服务, 显示错误信息,哪流量使用完以后,使用 iptables 将 流量转发到 本机 ...

  8. 【03】openlayers 地图事件

    绑定事件:map.on(type, listener) 取消绑定:map.un(type, listener) type:事件类型 listener:执行得函数体 事件类型: //事件类型 let t ...

  9. Js数组代替写循环的几个方法

    简介 循环是个不可避免的结构,而且不好复用,同时循环还很难加入其他操作中.更麻烦的是,使用循环就意味着在每一个新的迭代中有更多变化需要响应. 上了循环的控制结构会使代码看起来变得复杂,故而这里提几个替 ...

  10. 玩转控件:重写/重绘Dev中MessageBox弹窗控件

    很久没有更新博客了,本想着直接发一篇<手撕ERP>系列,从控件重写.重绘,到框架搭建,再到部分模块实现+业务的.但是每次动手的时候,都觉得难以下手.直接从数据库设计开始吧,模块设计还没定下 ...