0
我为了建立一个Android应用程序编写詹金斯管道作为代码。如何定义的情况下开关,以检查是否的情况下变量包括通过使用正则表达式的特定字符串?
作业被配置为“GitHub的组织”,这意味着詹金斯正在扫描给定存储库,增加了每个分支的工作,每当有git的承诺发生开始作业运行。
switch(BRANCH_NAME) {
case "develop":
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "master":
BUILDFLAV = "Production"
BUILDTYPE = "Release"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "release_candidate":
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "hotfix":
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "jenkins-pipeline":
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "feature/upload_to_hockeyapp":
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "feature/notifications":
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
default:
println "Branch name was not set!"
break
}
一些分支的命名,像这样:
hotfix/3.0.1
release/3.2.1
我想定义这些分支机构的情况下的选择,是这样的:
case "^hotfix.*"
code....
break
和:
case "^release\/.*"
code...
break
编辑#1: 下面的代码加入你的一部分后:
// Branch selection
def showRelease(BRANCH_NAME, regex) {
def pattern = "(release|hotfix)\\/(\\d+\\.)?(\\d+\\.)?(\\*|\\d+)"
switch(BRANCH_NAME) {
case "develop":
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "master":
BUILDFLAV = "Production"
BUILDTYPE = "Release"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "release_candidate":
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "hotfix":
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "jenkins-pipeline":
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case "feature/notifications":
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
break
case ~/$regex/:
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
println BRANCH_NAME
break
default:
println "Branch name was not set!"
break
}
}
但是,当我运行构建,BRANCH_NAME设置不正确,下一个步骤是无法运行,因为他们缺乏BUILDFLAV和BUILDTYPE变量。
编辑#2: 我加你的建议代码:
case ~/(release|hotfix)\\/(\\d+\\.)?(\\d+\\.)?(\\*|\\d+)/:
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"
println "Branch Name: ${BRANCH_NAME}"
break
但现在我得到这个错误:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.ScriptBytecodeAdapter bitwiseNegate java.lang.Object
at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectStaticMethod(StaticWhitelist.java:190)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onStaticCall(SandboxInterceptor.java:142)
at org.kohsuke.groovy.sandbox.impl.Checker$2.call(Checker.java:180)
,但我不这么熟悉使用正则表达式詹金斯(groovy),怎么可以做到?
感谢您的回答。它在Groovy IDE中完美工作,但是如何将它添加到我的代码中?我需要BRANCH_NAME变量来保存分支名称,即使它是发布/修补程序。 –
在上面所示的例子中,'val'是可变的,并且用户在不同的时间通过(你的情况即,释放或修复)不同的值。你打电话给你的方法怎么样? – Rao
请检查编辑#1 –