我可以为脚本化管道中的方法创建一个共享库.groovy脚本到声明式

时间:2018-02-20 18:16:29

标签: jenkins jenkins-declarative-pipeline jenkins-shared-libraries

我正在尝试将我工作场所的所有脚本管道转换为声明性管道。我是新来的。我有一个脚本管道,有2个方法。我能够完成其余的脚本化声明,但却陷入了方法困境。由于声明并不真正支持方法,并且因为我必须在其他声明性管道中多次使用此方法,所以我想将此方法描述为共享库中的groovy脚本。

我的问题是,因为这是一个来自脚本管道的方法,我可以直接将我的方法粘贴到groovy脚本中,还是需要groovy的确切语法我检查了groovy语法,并没有真正看到很多差异?

下面是方法之一:我可以将其复制到像getversion.groovy这样的东西并从我的dec管道中调用它吗?还是需要将语法/代码更改放入groovy脚本?

def getProjectVersion(directory) {
   dir(directory) {
      withEnv(["PATH+MAVEN=${env.M3}/bin"]) {
         sh 'rm -f version.txt'
         sh(
               """mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate \
               -Dexpression=project.version | grep -v '\\[\\|\\D'  > version.txt"""
           )      
           return readFile('version.txt').trim()
}

}

在我试图转换为声明性的一些其他脚本管道中还有一些其他复杂的方法,因此这些信息将非常有用。

由于

1 个答案:

答案 0 :(得分:0)

如果您尚未这样做,请查看Shared Libraries了解详情。您应该可以通过创建vars/getVersion.groovy

来使用您的示例
def call(directory) {
   dir(directory) {
    ...  
   }
}

按照链接中的说明设置您的共享库,您应该能够在管道中调用您的代码:

...
stage('Some stage') {
  steps {
    script {
      versionNumber = getVersion('/directory/of/project/')
    }
  }
}
...

如果您的方法没有返回值,则调用可能如下所示:

...
stage('Some stage') {
  steps {
    setVersion '/directory/of/project/'
  }
}
...