Jenkins 선언 파이프 라인에서 Artifactory 플러그인 사용


13

Jenkins Declarative Pipeline을 사용하여 빌드 프로세스를 자동화하고 있습니다. 특정 조건 (Sonar, Checkmarx)이 통과 된 경우에만 아티팩트를 원격 JFrog 저장소에 공개하려고합니다.

약간의 연구 끝에 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 -block 을 사용하여 선언 파이프 라인에 조건을 지정할 수 있습니다 . "environment injector"라는 플러그인이 있는데 파이프 라인 스크립트 외부에서 변수를 설정할 수 있습니다. 또한 다른 단계 아래에 단계를 넣으면 실패하면 실행되지 않습니다.

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

힌트 주셔서 감사합니다. 조건을 만족 한 후에 변수를 설정해야한다는 것을
— 알았다면

2

귀하의 문제는 사전 빌드 단계 블록 외부에서 재사용 할 수없는 서버 변수에 기인한다고 생각합니다 .

Jenkins 선언에서는 script { ... }블록 을 사용하는 것과 같은 변수를 정의 할 수 있지만 일단 스테이지를 떠나면 해당 변수를 다른 스테이지에 액세스 할 수 없습니다.

이전 제안으로 다음을 권장합니다.

아티팩트 배치 코드를 공유 라이브러리에 보관하십시오.

gradle_artifactory.groovy

    def call (Map parameters = [:]) {// 선택적인 매개 변수 매핑

        데프 서버 = Artifactory.server 'LocalJfrog'
        데프 rtGradle = Artifactory.newGradleBuild ()
        rtGradle.resolver 서버 : 서버, 저장소 : 'gradle-dev-local'
        rtGradle.deployer 서버 : 서버, 저장소 : 'gradle-release-local'
        rtGradle.useWrapper = true
        def buildInfo = rtGradle.run rootDir : "projectDir /", buildFile : 
            'build.gradle', 작업 : 'clean artifactoryPublish'

    }

그런 다음 선언적인 파이프 라인을 유지 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
답장을 보내 주셔서 감사합니다. 나는 스크립트 파이프 라인을 알고 있지만 그 이후로 선언 파이프 라인에 포함될 것이라고 생각하는 프로젝트의 기본 필요성입니다. 스크립트 또는 외부 그루비 스크립트로 다시 전환됩니다
— Dharanidhar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.