jenkins - jenkinsfile 自动检测 gitlab 分支
问题描述
这是我的场景,我在 gitlab 中有两个分支,“master”和 staging。
我需要整合 jenkinsfile 以便我可以将同一个文件用于 staging 和 master 分支,但需要为每个分支执行不同的操作集
我想要做的是,如果标签推送致力于暂存分支 jenkins 将构建 docker 文件,将其上传到 aws ecr 并在 aws ecs 暂存集群中启动一个新的 docker 实例,如果标签推送到 master 分支,它将将其部署到另一个实时集群中。
我使用了“JENKINS PIPELINE”项目并在 jenkinsfile 中编写了以下代码,但 env.BRANCH_NAME 始终返回空值。
if (env.BRANCH_NAME == "staging") {
def serviceName = ""
def taskFamily = ""
def clusterName = ""
} else if (env.BRANCH_NAME == "master") {
def serviceName = ""
def taskFamily = ""
def clusterName = ""
}
当使用“JENKINS MULTIBRANCH”管道项目时,它会扫描项目并自动识别所有分支,但似乎每个分支都有自己的 webhook。
我真的对 MULTIBRANCH JENKINS 感到困惑。我们应该在 gitlab 中配置 2 个不同的 webhook 吗?一个用于分期,另一个用于主控?当我们在 gitlab 中将 git 标签推送到暂存分支时,詹金斯会拉动并自动切换到暂存分支吗?
看起来当我们在 gitlab 中向 staging 分支推送标签时,jenkins 正在从 staging 分支中提取 jenkinsfile,但正在处理 master 分支中的文件。
有什么方法可以使用“JENKINS PIPELINE”项目而不是“MULTI BRANCH”?
解决方案
您可以使用“等于”函数代替“==”运算符myStringVar.equals(<someOtherValue>)
你的情况看起来像这样: -
if (env.BRANCH_NAME.equals('staging')) {
def serviceName = ""
def taskFamily = ""
def clusterName = ""
} else if (env.BRANCH_NAME.equals('master')) {
def serviceName = ""
def taskFamily = ""
def clusterName = ""
}
Ans 变量env.BRANCH_NAME
将在多分支管道的情况下可用。
推荐阅读
- amazon-web-services - Cloudfront Lambda Egde 错误?更改查看器响应中的响应状态代码
- python-3.x - 使用偶尔的多行日志分析日志数据
- ios - 显示视图控制器稍后会导致问题
- php - PHP:我可以安全地在多字节字符串上使用explode吗
- python - 如何仅在python中需要时才解码
- c++ - Arduino SPI 在传输期间挂起
- javascript - nock 拦截后所有 sinon 存根都失败
- elasticsearch - 按用户过滤elasticsearch中的产品索引
- reactjs - Reactstrap - 在轮播上显示本地图像
- node.js - Nodejs等待查询