Sử dụng plugin Artifactory trong đường dẫn khai báo Jenkins


13

Tôi đang sử dụng Đường ống khai báo Jenkins để tự động hóa quá trình xây dựng của mình. Chúng tôi muốn xuất bản các tạo phẩm của mình lên kho lưu trữ JFrog từ xa chỉ khi điều kiện nhất định (Sonar, Checkmarx) vượt qua.

Sau một chút nghiên cứu, tôi thấy rằng plugin Artifactory rất hữu ích cho việc này. Nhưng tôi không thể tìm thấy bất kỳ tài liệu nào về cách tích hợp trong đường ống khai báo. Dưới đây là đoạn mã từ 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
            }

        }   
    }
}

Việc xuất bản có điều kiện là không thể với mã ở trên vì tôi không thể sử dụng lại biến máy chủ ngay cả khi tôi tắt tự động xuất bản.

Câu trả lời:


3

Bạn có thể có các điều kiện trong đường dẫn khai báo của mình bằng cách sử dụng khi -block bên trong một giai đoạn. Có một plugin gọi là "trình tiêm môi trường" cho phép bạn đặt các biến bên ngoài tập lệnh đường ống rất hay. Ngoài ra nếu bạn đặt bước bên dưới các bước khác, nó sẽ không thực thi nếu chúng thất bại.

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

Cảm ơn đã gợi ý. Nếu tôi hiểu đúng, một biến phải được đặt sau khi các điều kiện được đáp ứng và sau đó kiểm tra biến đó trong bước Pre-Build
Dharanidhar

2

Tôi nghĩ vấn đề của bạn bắt nguồn từ biến máy chủ không thể tái sử dụng ngoài khối giai đoạn tiền xây dựng.

Trong khai báo Jenkins, bạn có thể xác định các biến như thế bằng cách sử dụng script { ... }khối, nhưng một khi bạn rời khỏi giai đoạn thì các biến đó không thể tiếp cận được với các giai đoạn khác.

Với các đề xuất trước đây, tôi khuyên bạn nên điều này:

Đặt mã triển khai nhân tạo vào một thư viện dùng chung.

gradle_artifactory.groovy

    def call (Ánh xạ tham số = [:]) {// ánh xạ tham số tùy chọn

        máy chủ def = Artifactory.server 'LocalJfrog'
        def rtGradle = Artifactory.newGradleBuild ()
        máy chủ rtGradle.resolver: máy chủ, repo: 'gradle-dev-local'
        máy chủ rtGradle.deployer: máy chủ, repo: 'gradle-release-local'
        rtGradle.useWrapper = đúng
        def buildInfo = rtGradle.run rootDir: "projectDir /", buildFile: 
            'build.gradle', nhiệm vụ: 'sạch artifactoryPublish'

    }

Sau đó để giữ đường ống khai báo của bạn D.R.Y

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

giới thiệu:

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

https://jenkins.io/doc/book/pipeline/spl-lologists/


1

Nếu bạn muốn nhúng logic vào Jenkinsfile, cú pháp khai báo có thể không phải là phương thức tốt nhất vì không phải lúc nào cũng dễ dàng phản ánh nó trong mã.

Nếu bạn chuyển sang đường ống dẫn kịch bản Jenkinsfile, bạn sẽ có thể xác định và sử dụng các điều kiện một cách dễ dàng hơn.


1
Cảm ơn vi đa trả lơi. Tôi biết về đường ống dẫn kịch bản nhưng vì đây là điều cần thiết cơ bản cho bất kỳ dự án nào nghĩ rằng nó sẽ được đưa vào đường ống khai báo. Sau đó sẽ chuyển trở lại kịch bản
Groovy theo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.