Jenkins Pipeline và stash Pull Request Builder không hoạt động trên PR tạo / cập nhật


7

Dưới đây là yêu cầu cần thiết để đạt được bằng cách sử dụng Đường ống Jenkins và tôi là con ong mới vào Đường ống Jenkins.

  • Sau khi hoàn thành công việc phát triển và đẩy các thay đổi của mình lên Bitbucket, người dùng sẽ tạo một yêu cầu kéo.
  • Để phê duyệt yêu cầu kéo, chúng tôi cần ít nhất một bản dựng Jenkins thành công. Do đó, chúng tôi chỉ muốn nhận kết quả xây dựng của mã được kiểm tra cho yêu cầu kéo.
  • Khi yêu cầu kéo được tạo / cập nhật, Jenkins sẽ được kích hoạt tự động để tích hợp liên tục thực sự.
  • Kết quả xây dựng sẽ được báo cáo lại cho Bitbucket.

Trình tạo yêu cầu Stash Pull được sử dụng và Trình thông báo stash cho quy trình trên đang hoạt động cho Dự án tự do thông thường.

Chúng ta cần di chuyển các chức năng tương tự bằng cách sử dụng đường ống Jenkins, vì vậy đã tạo ra công việc jenkins như dưới đây.

nhập mô tả hình ảnh ở đây

Kịch bản đường ống để kiểm tra nhánh PR và kích hoạt xây dựng như dưới đây

node {
    stage('Checkout') {         
        checkout(
        [
            $class: 'GitSCM',
            extensions: [               
                [$class: 'CleanCheckout'],              
            ],
            branches: [
                [name: '']
            ], 
            userRemoteConfigs: 
            [[
                credentialsId: 'id', 
                url: 'repourl.git'
                refspec: ('+refs/pull-requests/*/from:refs/remotes/origin/pr/*/from'), 
                branch: ('origin/pr/${pullRequestId}/from')
            ]]
        ])
    }

    stage('Build') {    
        sh 'make'
    }
    stage('notify') {
    step([$class: 'StashNotifier'])
        try {
            // Do stuff
            currentBuild.result = 'SUCCESS'     
        } catch(err) {
            currentBuild.result = 'FAILED'
        }
    step([$class: 'StashNotifier'])
   }

}

Mặc dù tôi đã thực hiện cấu hình trên khi tôi tạo / cập nhật PR, bản dựng không được kích hoạt tự động trong jenkins. Tôi đoán thông báo từ stash đến jenkins đã không xảy ra vì chúng tôi chỉ định "origin/${pullRequestId}/from"trong dự án kiểu miễn phí. Nhưng tôi không có tùy chọn đó để chỉ định trong công việc đường ống.

Đã thử một vài lựa chọn thay thế như dưới đây.

Thay vì stash Pull Request Builder, tôi đã thử chỉ với dự án "Poll SCM" và công việc định kỳ được chỉ định để kích hoạt như "H/2 * * * *". Khi cam kết công việc được kích hoạt tại jenkins. Nó có nghĩa là cho mỗi cam kết, công việc của jenkins được kích hoạt. Nhưng Jenkins nên kích hoạt công việc khi PR được tạo / cập nhật.

Tôi đang thiếu một cái gì đó ở đây chắc chắn có thể là cơ bản và mới cho đường ống jenkins.

Bất kỳ gợi ý về việc đạt được các hành vi mong muốn?


chỉnh sửa câu hỏi dựa trên những phát hiện
user1876040

Những thứ cơ bản đầu tiên, Bạn có danh sách trắng IP Bitbucket không? Ngoài ra, bạn có thể kiểm tra webhooks bitbucket và cho chúng tôi biết nếu chúng hoạt động như mong đợi.
Munai Das Udasin

Xin chào, @Munai Das Udasin, Cảm ơn bạn đã phản hồi. Đây là những quan sát của tôi, Khi chúng tôi làm việc trong mạng lưới đường phố, bitbucket ips là một trong những IP được liệt kê trong danh sách trắng. Vì vậy, đó không phải là một vấn đề. Ngoài ra, phân tích của chúng tôi trên Webhooks có ít nhược điểm hơn a) Khi PR được cập nhật, thì công việc không được kích hoạt tại jenkins b) Công việc được kích hoạt khi PR bị từ chối, vì chúng tôi không muốn theo trường hợp sử dụng.
dùng1876040

Câu trả lời:


2

Trong kịch bản Groovy, bạn cần tham chiếu các biến môi trường theo cách khác với trong bash.

Vì vậy, có lẽ dòng này đang gây rắc rối:

branch: ('origin/pr/${pullRequestId}/from')

Hãy thử sử dụng:

branch: ('origin/pr/' + env.pullRequestId + '/from')

2

Để mở rộng câu trả lời ở trên - hãy thử sử dụng:

branch: "origin/pr/${pullRequestId}/from"

Bởi vì trong Groovy, phép nội suy chuỗi không được thực hiện đối với các chuỗi đơn giản - tức là các chuỗi trong các dấu ngoặc đơn. Xem http://groovy-lang.org/syntax.html#_opes_interpolation để biết chi tiết về điều đó.


FYI không có câu trả lời ở trên, các trang web StackExchange không phải là diễn đàn và thứ tự của câu trả lời không phải lúc nào cũng vậy, khi tham khảo một câu trả lời khác, liên kết với nó hoặc có thể khó biết câu trả lời nào bạn sẽ đề cập sau.
Tensibai

0

Có cùng một vấn đề, để đạt được kết quả mong muốn, tôi đã tạo ra hai công việc: PR Trigger (Dự án tự do) và PR Builder (Đường ống).

Để PR Trigger tôi đã thêm plugin Git, Stash Pull Request Builder (cùng cấu hình không hoạt động cho đường ống) và Plugin Kích hoạt tham số (để chuyển id yêu cầu kéo vào đường ống PR Builder; Project to Build - PR Builder).

nhập mô tả hình ảnh ở đây

Để PR Builder tôi đã thêm Plugin Parameterized Builds.

nhập mô tả hình ảnh ở đây

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.