2017-02-21 14 views
5

tôi có rất nhiều các dự án trong các kho khác nhau mà chia sẻ cùng một nền tảng CI-công việc, mà tôi có thể dễ dàng thể hiện như một Declarative Pipeline:Làm thế nào để chia sẻ một Declarative đường ống qua nhiều dự án

pipeline { 
    agent any 

    options { 
    buildDiscarder(logRotator(numToKeepStr: '20')) 
    } 

    stages { 
    stage('CI') { 
     steps { 
     echo 'Do CI' 
     } 
    } 

    stage('QA') { 
     steps { 
     echo 'Do QA' 
     } 
    } 
    } 

    post { 
    always { 
     junit allowEmptyResults: true, testResults: '**/target/surefire-reports/TEST-*.xml' 
     // etc... 
    } 

    failure { 
     echo 'Failure mail' 
     // etc 
    } 
    } 
} 

Tôi muốn để sử dụng cùng một Pipeline Declarative trên tất cả các dự án của tôi và có khả năng thay đổi định nghĩa của Pipeline ở một nơi và có những thay đổi được sử dụng trong tất cả các dự án một cách tự động.

Về cơ bản những gì tôi sẽ làm trong một dự án; s Jenkinsfile là thế này:

loadPipelineFromScm 'repository', 'pipeline.groovy' 

tôi đã có thể làm điều này với các thư viện chia sẻ, nhưng sau đó tôi không thể sử dụng tính năng Pipeline Declarative nữa.

Có cách nào để chia sẻ số Tuyên bố Đường ống trên nhiều kho lưu trữ không?

+0

Bạn có chắc chắn rằng một đường ống dẫn khai báo không thể làm việc trong một thư viện chia sẻ? Tài liệu [Tuyên bố đường ống dẫn: Thông báo và Thư viện được chia sẻ] (https://jenkins.io/blog/2017/02/15/declarative-notifications/) dường như đang thực hiện chính xác điều đó. Bạn không thể làm điều gì đó tương tự? – herm

Trả lời

0

Tôi đã xử lý vấn đề tương tự này cho công việc của riêng tôi. Giải pháp tốt nhất mà tôi có thể đưa ra là bao gồm một generic Jenkinsfile trong mỗi dự án/repo trong tổ chức của tôi:

node 
{ 
    checkout([$class: 'GitSCM', branches: [[name: env.DELIVERY_PIPELINE_BRANCH]], userRemoteConfigs: [[credentialsId: env.DELIVERY_PIPELINE_CREDENTIALS, url: env.DELIVERY_PIPELINE_URL]]]) 
    stash includes: '*.groovy', name: 'assets', useDefaultExcludes: false 
    load './Jenkinsfile.groovy' 
} 

tôi đã sử dụng các biến môi trường trong trường hợp thứ cần phải thay đổi, có lẽ có thể còn nhiều hơn năng động hơn của tôi ví dụ hiện tại (đây là tất cả vẫn còn trong phát triển anyway).

Sau đó, dấu gạch chéo được sử dụng để giữ phần còn lại của các tập lệnh groovy được sử dụng sau này và bỏ khóa chúng trong đường dẫn khai báo.

Cuối cùng, nó tải Đường ống khai báo. Không gây rối với quan điểm, về cơ bản tất cả đều hoạt động bình thường.

Vì vậy, nó không chính xác những gì bạn đang tìm kiếm, và tôi muốn có khả năng chỉ cần kéo từ SCM ở nơi đầu tiên. Nhưng hey, nó đã làm việc đủ tốt cho tôi trong thời gian này.

1

Trong khi các khung nhìn còn nguyên vẹn khi sử dụng đề xuất từ ​​noober01, đường dẫn khai báo sẽ không hoạt động đúng. Ví dụ. khi các mệnh đề sẽ bị bỏ qua, vì phần tử đường ống được mong đợi là cấp cao nhất, có nghĩa là nó được phân tích cú pháp như là đường dẫn kịch bản.

Xem các vấn đề sau đây từ chối bởi các đội phía sau Jenkins: loading external declarative pipelines issue

Các vấn đề liên quan