Декларативный Jenkinsfile с использованием отдельных этапов для сборки Maven / Gradle и публикации в Artifactory - PullRequest
0 голосов
/ 27 июня 2019

РЕДАКТИРОВАТЬ: Извините за форматирование :( Я новичок в этом .. постараюсь очистить его.

Я использую декларативный файл Jenkinsfile для создания и публикации артефактов Maven и Gradle с buildInfo в Artifactory, пытаясь разделить каждое действие (stage1 = build, stage2 = publish) на отдельные этапы, но не могу понять, как это сделать.

Попытка выяснить работающий синтаксический код декларативного конвейера для использования с Artifactory для разделения этапов сборки и публикации. Все примеры, которые я нашел, являются неполными, нерабочими или только для сценариев конвейера.

Я пробовал инструкции, найденные здесь https://www.jfrog.com/confluence/display/RTF/Working+With+Pipeline+Jobs+in+Jenkins

Для Maven установка параметра deployArtifacts: false в директиве rtMavenDeployer приводит к тому, что buildinfo не публикуется, но артефакт по-прежнему разворачивается с использованием целей «чистой установки».

org.jfrog.build.extractor.maven.BuildInfoClientBuilder - Развертывание> артефакт: xxx

В журнале мы видим (с deployArtifacts: false): Artifactory Build Info Recorder: опубликовать информацию о сборке со значением false, информация о сборке не будет опубликована ...

steps {
        rtMavenDeployer ( 
... 
deployArtifacts: false )

на более позднем этапе мы используем rtPublishBuildInfo () для публикации фактического buildInfo в Artifactory.

Я также пытался создать два отдельных rtMavenDeployer's для использования для сборки и один для развертывания.

Например.

rtMavenDeployer (
id: builder
deployArtifacts: false
)

rtMavenDeployer (
id: deployer
deployArtifacts: true
)

Более поздние ссылки на соответствующих этапах сборки и публикации с использованием ЭТАП СТРОИТЕЛЬСТВА:

rtMavenRun(
deployerId: 'builder'
goals: 'clean install'
)

ЭТАП ЗАВЕРШЕНИЯ:

rtMavenRun(
deployerId: 'deployer'
goals: 'install'
)
rtPublishBuildInfo()

Результатом является дублирование buildInfo в Artifactory и x2 завышенных зарегистрированных артефактов ...

Есть ли четкий путь для такого разделения действий в декларативном конвейере?

Ожидается возможность создания артефакта с использованием синтаксиса декларативного конвейера за один этап и развертывания фактического артефакта Maven / Gradle с помощью buildInfo на более позднем этапе.

Вот как это делается на отдельных этапах в скриптовом конвейере из того, что я понимаю:

    stage ('Test') {
        rtMaven.run pom: 'maven-example/pom.xml', goals: 'clean test'
    }

    stage ('Install') {
        rtMaven.run pom: 'maven-example/pom.xml', goals: 'install', buildInfo: buildInfo
    }

    stage ('Deploy') {
        rtMaven.deployer.deployArtifacts buildInfo
    }

    stage ('Publish build info') {
        server.publishBuildInfo buildInfo
    }
}

1 Ответ

0 голосов
/ 28 июня 2019

Я закончил тем, что использовал что-то вроде ниже ... хотя я думаю, что это немного уродливо. Любые лучшие решения приветствуются!

ЭТАП СТРОИТЕЛЬСТВА

      steps {
        rtMavenRun (
          tool: 'MVN-360',
          pom: 'pom.xml',
          goals: 'clean install',
          opts: '-Dartifactory.publish.artifacts=false -Dartifactory.publish.buildInfo=false',
          resolverId: 'maven-resolver',
          deployerId: 'maven-deployer'
        )
      }

DEPLOY STAGE

      steps {
        rtMavenRun (
          tool: 'MVN-360',
          pom: 'pom.xml',
          goals: 'install',
          opts: '-Dartifactory.publish.artifacts=true -Dartifactory.publish.buildInfo=true',
          resolverId: 'maven-resolver',
          deployerId: 'maven-deployer'
        )
        rtPublishBuildInfo (
          serverId: "Artifactory"
        )
      }
...