git - Jenkins:使用来自另一个 repo 的 jenkinsfile 构建多分支管道
问题描述
所以我正在尝试为几个不同的项目制作一个多分支管道。
这些是基本要求:
- 每个客户的三个工作开发,阶段,产品
- 对于每个作业,从每个 repo 中提取相应的分支并构建一个机器人
- 如果作业正在使用的存储库中有任何更改,请触发该环境的构建
因此,这些要求非常简单。
但还有第四个要求。我想弄清楚的是我是否可以拥有一个可以保存我所有 jenkinsfiles 的存储库,然后构建另一个存储库的所有分支。这可能吗?所有其他答案似乎都指向已弃用的解决方案,例如自由式 Multibranch 项目。
解决方案
是否可以使用来自另一个仓库的 jenkinsfile 构建多分支管道?
简短的回答: 不,不是,因为 Multibranch Pipeline 中的每个作业总是从它配置为监视的同一分支(因此,来自同一个 repo)引用 Jenkinsfile。不包含 Jenkinsfile 的分支不会被索引。
扩展答案: 为了或多或少地实现您的要求,我将执行以下操作:
- 使用自定义
Jenkinsfiles
(每个分支、每个客户端、每个环境......无论如何)创建一个存储库。每个都Jenkinsfile
将描述您希望在每种特定情况下执行的阶段。使用脚本化管道语法。 - 在您的产品存储库中添加另一个
Jenkinfile
:使用您的自定义管道签出专用存储库,加载管道并执行它。 - 为产品存储库配置多分支管道。
例子
git@github.com:your-org/custom-pipelines.git/Jenkinsfile-dev
// Jenkinsfile-dev
def stages() {
stage ("Checkout") {
checkout scm
}
stage ("Build") {
}
stage ("Test") {
}
}
return this
git@github.com:your-org/product-repo.git/Jenkinsfile
// Jenkinsfile
node ("ubuntu") {
// Checkout custom Jenkinsfiles
stage ("Checkout pipelines") {
git url: "git@github.com:your-org/custom-pipelines.git",
branch: "master",
credentialsId: "github-ssh"
}
load ("Jenkinsfile-${env.BRANCH_NAME}").stages()
}
推荐阅读
- jquery - 删除和添加锚href jQuery
- php - “此集合实例上不存在属性 [registration_types]。”
- mysql - MySQLCommand ExecuteReader 行大小太大,查询在 CLI 上工作正常
- python - IntelliJ Pycharm如何将插入符号移动到行的某个第n个字符
- sql - SQL Server:为连续日期创建跨多行的唯一键
- c# - 对象不能从 DBNull 转换为其他类型 Linq
- django - 在 Django 'contains' 查询中包含通配符 (%)
- python - 如何在来自 json 站点的 if 和 alse 语句中排除 keyerror
- c++ - C++ - 从没有自定义 .lib 文件的 Lua C 模块调用 Lua 函数
- python - Python中的多线程诅咒输出