0

我正在尝试将我工作场所的所有脚本化管道转换为声明性管道。我是新来的。我有一个有 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()
}

}

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

谢谢

4

1 回答 1

0

如果您还没有这样做,请查看共享库了解详细信息。您应该能够通过创建来使用您的示例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/'
  }
}
...
于 2018-03-12T14:11:03.983 回答