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.