Могу ли я создать разделяемую библиотеку.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/'
}
}
...