Використання Artifactory плагіна в декларативному конвеєрі Дженкінса


13

Я використовую декларативний трубопровід Дженкінса для автоматизації мого процесу збирання. Ми хочемо опублікувати наші артефакти у віддаленому сховищі 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
            }

        }   
    }
}

Умовна публікація неможлива з наведеним вище кодом, оскільки я не можу повторно використовувати змінну сервера, навіть якщо вимкнути автоматичну публікацію.

Відповіді:


3

Ви можете мати умови у своєму декларативному конвеєрі, використовуючи, коли -блок всередині сцени. Існує плагін під назвою "Інжектор навколишнього середовища", який дозволяє встановлювати змінні за межами конвеєра, що приємно. Крім того, якщо поставити крок нижче інших кроків, він не виконається, якщо вони не вдаються.

 when {
    environment name: 'pushArtifact', value: 'true'
  }
  steps{
     //push artifact  
  }

Дякую за підказку. Якщо я зрозумів це правильно, змінна повинна бути встановлена ​​після виконання умов, а потім перевірити цю змінну на етапі попереднього збирання
Dharanidhar

2

Я думаю, що ваша проблема вкорінена у змінній сервера, яка не може бути повторно використана поза блоком етапу попередньої збірки.

У декларативній формі Дженкінса ви можете визначити такі змінні за допомогою script { ... }блоку, але після виходу зі стадії ці змінні недоступні для інших стадій.

З попередніми пропозиціями я рекомендую це:

Розмістіть артефактичний код розгортання у спільній бібліотеці.

gradle_artifactory.groovy

    def call (Параметри карти = [:]) {// необов'язкове відображення параметрів

        def server = Artifactory.server 'LocalJfrog'
        def rtGradle = Artifactory.newGradleBuild ()
        Сервер rtGradle.resolver: сервер, репо: 'gradle-dev-local'
        Сервер rtGradle.deployer: сервер, репо: 'gradle-release-local'
        rtGradle.useWrapper = вірно
        def buildInfo = rtGradle.run rootDir: "projectDir /", buildFile: 
            'build.gradle', завдання: 'clean artefactoryPublish'

    }

Потім, щоб зберегти свої декларативні трубопроводи D.R.Y

@Library('my-shared-lib') 
...
stage('Artifactory Upload') {
    when { <some expression with sonarqube/checkmarx> }
    steps {
        script {
            gradle_artifactory()
        }
    }
}

списки:

https://jenkins.io/doc/book/pipeline/syntax/#when

https://jenkins.io/doc/book/pipeline/shared-libraries/


1

Якщо ви хочете вбудувати логіку в Jenkinsfile, декларативний синтаксис може бути не найкращим методом, оскільки не завжди легко відобразити його в коді.

Якби ви перейшли на сценарій сценарію Jenkinsfile, ви зможете визначити та використовувати умови простішим способом.


1
Дякую за відповідь. Мені відомо про сценарій сценарію, але, оскільки це є основною необхідністю для будь-якого проекту, який вважає, що він буде включений у декларативний конвеєр. Після цього повернемося до сценарію сценарію або зовнішнього сценарію
Дхаранідхар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.