Могу ли я создать разделяемую библиотеку.groovy скрипт для метода из скриптового конвейера в декларативный

Я пытаюсь преобразовать все скриптовые конвейеры на моем рабочем месте в декларативный конвейер. Я новичок в этом. У меня есть сценарий конвейера, который имеет 2 метода. Я смог закончить оставшуюся часть сценария до декларативного, но застрял на методах. Так как декларативный метод не поддерживает методы и поскольку мне приходится использовать этот метод несколько раз и в других декларативных конвейерах, я хочу описать этот метод (методы) как отличный сценарий в общей библиотеке.

Мой вопрос заключается в том, что, поскольку это метод из скриптового конвейера, могу ли я просто скопировать и вставить мой метод в скрипт 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 ответ

Если вы еще этого не сделали, проверьте 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/'
  }
}
...
Другие вопросы по тегам