2016-11-08 37 views
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),怎麼可以做到?

回答

1

我相信,它可以在下面簡單做處理修補程序發佈

腳本:

def showRelease(val, regex) { 
    switch (val) { 
     case ~/$regex/: 
      println "branch is set: ${val}" 
      break  

     default: 
      println "Branch name was not set!" 
      break 
    } 
} 

def pattern = "(release|hotfix)\\/(\\d+\\.)?(\\d+\\.)?(\\*|\\d+)" 
showRelease('release/1.0.1', pattern) 
showRelease('release/2.2.3', pattern) 
showRelease('release.3.x', pattern) 
showRelease('hotfix/3.0.2', pattern) 

而且你可能會注意到輸出:

branch is set: release/1.0.1
branch is set: release/2.2.3
Branch name was not set!
branch is set: hotfix/3.0.2

編輯:基於OP的評論,添加固定模式片段:

switch(BRANCH_NAME) { 
     case ~/(release|hotfix)\/(\d+\.)?(\d+\.)?(\*|\d+)/: 
      BUILDFLAV = "Staging" 
      BUILDTYPE = "Debug" 
      ARTIFACT_NAME = "AutoCAD360-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk" 
      break 
.... 
} 
+0

感謝您的回答。它在Groovy IDE中完美工作,但是如何將它添加到我的代碼中?我需要BRANCH_NAME變量來保存分支名稱,即使它是發佈/修補程序。 –

+0

在上面所示的例子中,'val'是可變的,並且用戶在不同的時間通過(你的情況即,釋放或修復)不同的值。你打電話給你的方法怎麼樣? – Rao

+0

請檢查編輯#1 –

相關問題