这是我的情况,我在gitlab中有两个分支:“ master”和暂存。
我需要合并jenkinsfile,以便可以将相同的文件用于登台分支和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。
我真的对MULTIJRANCH JENKINS感到困惑。我们应该在gitlab中配置2个不同的webhook吗?一个用于登台,另一个用于大师?当我们将git标签推送到gitlab中的登台分支时,jenkins是否会拉动并自动切换到登台分支?
当我们将标签推入gitlab中的登台分支时,jenkins看起来是从登台分支中提取jenkinsfile,但在master分支中处理文件。
有什么方法可以使用“ JENKINS PIPELINE”项目代替“ MULTI BRANCH”?
答案 0 :(得分:0)
在GitLab上好像不是env.BRANCH_NAME
,而是CI_COMMIT_REF_NAME
。
https://docs.gitlab.com/ee/ci/variables/#predefined-environment-variables
我用来验证Jenkinsfile中的环境变量的一个技巧是运行一个shell脚本命令来显示您的环境。例如sh printenv
(假设您的Jenkins构建代理基于Linux)
答案 1 :(得分:0)
您可以使用“等于”功能代替“ ==“运算符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 = ""
}
在多分支管道中,变量env.BRANCH_NAME
可用。