加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Jenkinsfile 8.18 KB
一键复制 编辑 原始数据 按行查看 历史
许大仙 提交于 2023-04-11 17:09 . 智能多分支自动化流水线
pipeline {
agent any
options { // 可选项
timestamps() // 显示时间
// skipDefaultCheckout() // 跳过从源代码控制中检出代码的默认情况
timeout(time: 6, unit: 'HOURS') // 超时时间设置为 6 小时
}
environment { // 环境变量
// git 检出的代码存放和共享的文件夹
GIT_DIR = 'ruoyi'
// 所有提交变化的项目
CHANGED_PROJECTS = ""
// 原始变化的所有项目
ORIGIN_CHANGED_PROJECTS = ""
// 基础项目配置,所有项目镜像必须重新打包
BASE_PROJECTS = "ruoyi-common,ruoyi-api"
// 是否基础项目发生了变化
BASE_PROJECTS_CHANGED = 'false'
HARBOR_CREDENTTIAL_ID = "harbor-id" // Harbor 仓库的账号和密码 id
REGISTRY = "harbor.xudaxian.com"
HARBOR_NAMESPACE = "mall"
GITLAB_CREDENTIAL_ID = "git-secret"
}
triggers { // 触发器的目的是:任何分支提交了代码就根据不同分支决定如何发布!!!
GenericTrigger(
genericVariables: [
[key: 'ref', value: '$.ref'],
[key: 'committer', value: '$.pusher.username'],
[key: 'added', value: '$.commits[*].added'],
[key: 'removed', value: '$.commits[*].removed'],
[key: 'modified', value: '$.commits[*].modified'],
[key: 'gitUrl', value: '$.repository.clone_url'],
[key: 'hookName', value: '$.hook_name'],
[key: 'respBody', value: '$.*'],
],
causeString: '$committer 触发了 $ref 分支改变',
token: '',
printContributedVariables: true,
printPostContent: true,
silentResponse: false,
// shouldNotFlattern: false,
// regexpFilterText: '$ref',
// regexpFilterExpression: 'refs/heads/' + BRANCH_NAME
)
}
stages { // 构建阶段
// stage('检查环境') {
// failFast true
// parallel {
// stage('检查maven打包机') {
// agent {
// label 'maven'
// }
// steps {
// sh 'mvn -v'
// }
// }
// stage('检查docker打包机') {
// agent {
// label 'docker'
// }
// steps {
// sh 'docker version'
// sh 'docker images'
// }
// }
// stage('检查nodejs打包机') {
// agent {
// label 'nodejs'
// }
// steps {
// sh 'node -v'
// }
// }
// stage('检查kubectl打包机') {
// agent {
// label 'kubectl'
// }
// steps {
// sh ' kubectl version'
// }
// }
// }
// }
stage('环境信息分析') {
options { // 可选项
timeout(time: 1, unit: 'HOURS') // 超时时间设置为 1 小时
}
steps {
sh 'pwd && ls -lah'
// sh "mvn clean package -s '/app/maven/settings.xml' -Dmaven.test.skip=true"
sh "echo ======================= 远程触发基本信息如下: ============================"
sh "echo 分支:[$ref] 提交者:[$committer]"
sh "echo 添加:[$added] 移除了:[$removed] 修改了:[$modified] "
sh "echo git 地址:$gitUrl"
sh "echo 钩子 :$hookName"
sh 'printenv'
script {
def GIT_BRANCH = 'origin/' + sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
sh "echo 分支名:GIT_BRANCH:${GIT_BRANCH}"
// 提取所有变化
def matcher = "${modified}" + "," + "${added}" + "," + "${removed}" =~ /[\[\]]/
// 分割为数组
def changes = matcher.replaceAll('').split(',')
// 数组进行去重
def results = []
def h = new HashSet()
for (final def change in changes) {
int i = change.indexOf('/') // 找到 / 分割的项目名
if (i > 0) {
// 截串获取项目名
change = change.substring(0, i)
// 有子模块,按照子模块进行打包
if (change.contains('ruoyi-modules')) {
def x = change.substring(i + 1)
change += x.substring(0, x.indexOf('/'))
}
}
// 去除多余的引号
h.add(change.replaceAll('"', ''))
}
results.addAll(h)
// 判断基础项目是否发生变化
for (baseChange in "${BASE_PROJECTS}".split(",")) {
def mm = matcher.replaceAll('').contains(baseChange)
if (mm) {
BASE_PROJECTS_CHANGED = mm.toString()
echo "基础代码发生改变,将在后续环境重新构建项目:${BASE_PROJECTS}"
}
}
// 给环境变量赋值
CHANGED_PROJECTS = results.join(",")
ORIGIN_CHANGED_PROJECTS = changes.join(",")
}
}
echo "提交感知到的所有改变的项目:${ORIGIN_CHANGED_PROJECTS}"
echo "项目去重后发生该那边的项目:${CHANGED_PROJECTS}"
}
stage('项目编译') {
options { // 可选项
timeout(time: 1, unit: 'HOURS') // 超时时间设置为 1 小时
}
agent {
label 'maven'
}
steps {
sh "pwd && ls -lah"
}
}
stage('按需制作镜像') {
options { // 可选项
timeout(time: 1, unit: 'HOURS') // 超时时间设置为 1 小时
}
parallel { // 并发构建
stage('ruoyi-gateway') {
options {
retry(3)
}
when {
expression {
return ORIGIN_CHANGED_PROJECTS.contains('ruoyi-gateway') || BASE_PROJECTS_CHANGED.equals("true")
}
}
agent {
label 'maven'
}
steps {
sh 'pwd && ls -lah'
}
}
stage('ruoyi-auth') {
}
stage('ruoyi-modules') {
}
stage('ruoyi-ui') {
}
stage('ruoyi-visual') {
}
}
}
}
post { // 后置动作
always { // 总是执行,不管执行是否成功,都会执行该步骤
echo '*** 打印环境变量开始 ***'
sh 'printenv'
echo '*** 打印环境变量结束 ***'
sh 'pwd && ls -lah'
}
success { // 后置执行成功执行,即所有阶段都执行成功,就会执行该步骤
echo "后置执行 ---> 成功后执行..."
}
failure { // 后置执行失败执行,即只要有阶段失败就会执行该步骤
echo "后置执行 ---> 失败后执行..."
}
aborted { // 取消后执行,用户点击取消后就会执行该步骤
echo "后置执行 ---> 取消后执行..."
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化