Jenkinsfile 同时检出多个 Git 仓库
2024-09-08 15:16:41
前置
通常,在 Jenkinsfile 中使用 Git 仓库是这样的:
stage('Checkout git repo') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: 'develop']],
userRemoteConfigs: [[
credentialsId: 'ssh-private-key-id',
url: 'project-git-repo-url'
]]
])
}
}
以上写法的结果是远程 Git 仓库中所有内容都被检出到当前工作目录下,因此我们才能像下面这样(不用切换目录而)直接运行一些命令:
stage('generate version number') {
steps {
VERSION_NUBMER = sh(script: "git describe --always", returnStdout: true).trim()
}
}
将 Git 仓库检出到指定文件夹
如果要同时拉取多个 Git 仓库,面临的首要问题是如何将 Git 仓库检出到指定文件夹。对此,可以通过使用 $class: 'RelativeTargetDirectory'
解决,具体代码如下:
stage('Checkout git repo') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: 'develop']],
userRemoteConfigs: [[
credentialsId: 'ssh-private-key-id',
url: 'project-git-repo-url'
]],
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'repo-folder'
]]
])
}
}
这样一来,远程 Git 仓库中所有内容将被检出到 ./repo-folder
文件夹下;后续我们若想在 Git 项目目录下操作,就需要先 cd ./repo-folder
了,例如:
stage('generate version number') {
steps {
VERSION_NUBMER = sh(script: "cd ./repo-folder && git describe --always", returnStdout: true).trim()
}
}
检出多 Git 仓库
在解决了将 Git 仓库检出到指定文件夹这一问题后,检出多 Git 仓库这一需求就稍显容易,下面以检出repoA、repoB、repoC三个仓库为例:
stage('Checkout multiple git repos') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: 'develop']],
userRemoteConfigs: [[
credentialsId: 'ssh-private-key-id',
url: 'project-git-repoA-url'
]],
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'repoA-folder'
]]
])
checkout([
$class: 'GitSCM',
branches: [[name: 'develop']],
userRemoteConfigs: [[
credentialsId: 'ssh-private-key-id',
url: 'project-git-repoB-url'
]],
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'repoB-folder'
]]
])
checkout([
$class: 'GitSCM',
branches: [[name: 'develop']],
userRemoteConfigs: [[
credentialsId: 'ssh-private-key-id',
url: 'project-git-repoC-url'
]],
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'repoC-folder'
]]
])
}
}
上面代码的结果就是工作目录下有了 repoA-folder
、repoB-folder
、repoC-folder
三个文件夹。
同时
截止现在,还没有达到我们的最终目的。本文标题叫做“Jenkinsfile 同时检出多个 Git 仓库”,但现在我们仅仅做到了“多个”还没有做到“同时”,为此我们需要使用Jenkins Pipeline语法中的 parallel
关键字。
stage('Checkout multiple git repos') {
parallel {
stage('repoA') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: 'develop']],
userRemoteConfigs: [[
credentialsId: 'ssh-private-key-id',
url: 'project-git-repoA-url'
]],
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'repoA-folder'
]]
])
}
}
stage('repoB') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: 'develop']],
userRemoteConfigs: [[
credentialsId: 'ssh-private-key-id',
url: 'project-git-repoB-url'
]],
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'repoB-folder'
]]
])
}
}
stage('repoC') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: 'develop']],
userRemoteConfigs: [[
credentialsId: 'ssh-private-key-id',
url: 'project-git-repoC-url'
]],
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'repoC-folder'
]]
])
}
}
}
}
参考
最新文章
- Linux 信号量详解一
- ae arcgis engine 关于面转线的方法和注意事项
- Knockoutjs 实践入门 (1) 属性绑定
- Jump Game 的三种思路 - leetcode 55. Jump Game
- [问题2015S14] 复旦高等代数 II(14级)每周一题(第十五教学周)
- 解决:新版火狐浏览器3d打不开
- Android 核心分析之十三Android GWES之Android窗口管理
- 设置一个POJO的某个属性的默认值
- Linux内核spin_lock与spin_lock_irq分析
- session与cookie的关系
- java 每天一练(二)
- 开涛spring3(6.9) - 对JDBC的支持 之 7.1 概述
- 【BootStrap】 布局组件 II
- 深度神经网络(DNN)是否模拟了人类大脑皮层结构?
- python数据结构-如何统计序列中元素的频度
- Leetcode 191.位1的个数 By Python
- 《DSP using MATLAB》Problem 5.18
- mybatis-generator-maven逆向工程
- python_分布式进程中遇到的问题
- 插入标识列identity_insert
热门文章
- 【ASP.NET Core】在Blazor中获取 HTTP 上下文信息
- KingbaseES lag 和 lead 函数
- C# 脚本与Unity Visual Scripting 交互,第一步(使用C# 脚本触发Script Graph的事件)(Custom Scripting Event)
- 6.第五篇 安装keepalived与Nginx
- Beats: Filebeat和pipleline processors
- Fluent插件管理
- input 禁用历史下拉框
- oneplus8手机蓝牙连接tws耳机无法双击退出语音助手
- Java学习之路:HelloWorld
- Selenium+Python系列 - 开发环境搭建