当前位置: 首页 > 知识库问答 >
问题:

我可以创建共享库吗。将脚本化管道中的方法的groovy脚本转换为声明性

笪煌
2023-03-14

我正在尝试将工作场所中的所有脚本管道转换为声明性管道。我是新手。我有一个脚本化的管道,它有两个方法。我能够完成其余的脚本到声明式,但在方法上遇到了困难。由于声明性并不真正支持方法,而且我还必须在其他声明性管道中多次使用此方法,因此我想将此方法描述为共享库中的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个答案

阮飞翔
2023-03-14

如果尚未执行此操作,请查看共享库以了解详细信息。您应该能够通过创建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/'
  }
}
...
 类似资料:
  • 问题内容: 我正在尝试将旧样式的基于项目的工作流转换为基于Jenkins的管道。在浏览文档时,我发现有两种不同的语法分别命名为和。例如最近(2016年底)发布的Jenkins网络语法。尽管有一个新的语法版本,Jenkins仍然也支持脚本语法。 现在,我不确定这两种类型的哪种情况最合适。语法将很快被弃用吗?詹金斯管道的未来会是这样吗? 任何可以分享有关这两种语法类型的想法的人。 问题答案: 最初创建

  • 基本上,我希望我的Jenkins文件看起来像这样: 然后我的共享库(/vars/description ptivePipeline.groovy)会像这样: 我想集中管道配置,这样我就不必担心Jenkinsfile蔓延。声明式管道可以做到这一点吗?

  • 问题内容: 我有一个SQLite3数据库。我做了一个数据转储,看起来像这样: 我试图在PostgreSQL PgAdmin III中执行此操作,这给了我很多错误,从,到日期时间字段的’unsigned’字段设置为1而不是true和0而不是false。 是否有转换此脚本的正确方法? 我曾考虑过将每个表导出为CSV,然后将它们导入PGDB,但是我有太多的表,所以这不是一个选择。 问题答案: 我使用了一

  • 我在 Jenkins 中创建了一个管道作业,我需要创建一个管道脚本来显示开发阶段的失败和不稳定的构建。在 Jenkins 2.0 中创建此脚本的步骤是什么,或者是否有任何示例管道脚本

  • Jenkins共享管道库是否支持文件? 这会引发错误: groovy.lang.缺少属性异常:没有这样的属性:类的结果:groovy.lang.绑定在groovy.lang.Binding.get变量(Binding.java:63)在org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.Sandbox Interceptor.onGetPrope