2016-11-08 38 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 –

相关问题