Я использую декларативный конвейер Jenkins для автоматизации процесса сборки. Мы хотим опубликовать наши артефакты в удаленном хранилище JFrog, только если пройдены определенные условия (Sonar, Checkmarx).
После небольшого исследования я обнаружил, что плагин Artifactory полезен для этого. Но я не могу найти какой-либо документ о том, как интегрировать в декларативный конвейер. Ниже приведен фрагмент кода из Jenkinsfile
stages{
stage('Pre-Build'){
steps{
script{
def server = Artifactory.server 'LocalJfrog'
def rtGradle = Artifactory.newGradleBuild()
rtGradle.resolver server: server, repo: 'gradle-dev-local'
rtGradle.deployer server: server, repo: 'gradle-release-local'
rtGradle.useWrapper = true
}
}
}
}
Условная публикация невозможна с указанным выше кодом, поскольку я не могу повторно использовать переменную сервера, даже если я отключил автоматическую публикацию.
источник
Я думаю, что ваша проблема коренится в серверной переменной, которая не может использоваться повторно за пределами этапа предварительной сборки.
В декларативном Jenkins вы можете определять переменные, подобные этой, используя
script { ... }
блок, но как только вы покидаете стадию, эти переменные становятся недоступными для других стадий.С предыдущими предложениями я бы порекомендовал это:
Разместите код развертывания артефакта в общей библиотеке.
Затем сохранить ваши декларативные конвейеры
D.R.Y
рефов:
https://jenkins.io/doc/book/pipeline/syntax/#when
https://jenkins.io/doc/book/pipeline/shared-libraries/
источник
Если вы хотите встроить логику в файл Jenkinsfile, декларативный синтаксис не может быть лучшим методом, поскольку не всегда легко отразить его в коде.
Если вы переключитесь на конвейер сценариев Jenkinsfile, вы сможете определить и использовать условия более простым способом.
источник