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 –