Kích hoạt xây dựng đường ống cụ thể cho monorepose ở Jenkins


11

Tôi đang trong quá trình chuyển đổi nhiều kho lưu trữ thành một kho lưu trữ, công cụ lựa chọn CI của chúng tôi là Jenkins do việc chuyển đổi nhiều cấu trúc kho lưu trữ thành một trong 2 vấn đề chính đã phát sinh.

  1. Thời gian xây dựng / kiểm tra đã tăng đáng kể vì tất cả các bản dựng / kiểm tra phải được chạy cho mỗi lần xác nhận. Điều này được giảm bớt một phần bằng cách sử dụng một công cụ xây dựng, trong trường hợp của chúng tôi, chúng tôi đã sử dụng Buck.

  2. Sau khi tất cả các thử nghiệm liên quan đến mã đã cam kết được chạy, tôi có một Jenkinsfile triển khai cho từng dự án. Làm thế nào tôi có thể chỉ kích hoạt Jenkinsfiles cho các dự án cần triển khai lại? Và nếu tôi có thể làm như vậy, đây có phải là một thực hành chính xác ?


Làm thế nào là móc xây dựng của bạn đang được thực hiện? Bạn có thăm dò các kho lưu trữ với Jenkins? Bạn có móc git tại chỗ trên mỗi cam kết không?
PrestonM

Chúng tôi có githook tại chỗ trên mỗi cam kết
YellowPvel

Câu trả lời:


2
  1. Lấy danh sách các tệp đã thay đổi và sử dụng tệp đó để xác định thử nghiệm nào sẽ chạy.

  2. Tải các tập lệnh Groovy bên ngoài vào thời gian chạy để chạy các triển khai của bạn.


Vui lòng sao chép các bit có liên quan từ liên kết và đăng chúng bên trong khối trích dẫn để ngăn thông tin đó bị mất nếu liên kết sẽ không được chấp nhận. Có lẽ bạn cũng có thể thêm quan điểm cá nhân của mình: bạn sẽ chọn tùy chọn nào và tại sao?
030

8

Bạn có thể sử dụng khối " khi " kết hợp với điều kiện "bộ thay đổi" tích hợp để chỉ chạy một cách có điều kiện một số giai đoạn nhất định trong đường ống dẫn đơn của bạn. Từ tài liệu khi.changeset:

thay đổi - Thực hiện giai đoạn nếu bộ thay đổi SCM của bản dựng chứa một hoặc nhiều tệp khớp với chuỗi hoặc toàn cầu đã cho. Ví dụ: khi {thay đổi "** / *. Js"}

Dưới đây là một ví dụ Jenkinsfile sử dụng chiến lược này:

pipeline {
    agent any
    stages {
        stage('build matchengine') {
            when {
                changeset "**/matchengine/*.*"
            }
            steps {
                echo 'building match engine'
            }
        }
        stage('build posttrade') {
            when {
                changeset "**/posttrade/*.*"
            }
            steps {
                echo 'building post trade'
            }
        }
    }
}

, áp dụng cho cấu trúc dự án monorepo được hiển thị dưới đây:

 .(my-project)
   |-- Jenkinsfile
   |-- matchengine
   |-- posttrade
   |-- serverless
   |-- ui

Chiến lược này sẽ không vượt quá các cơ sở mã nhỏ bởi vì thật khó để theo dõi các mô-đun nào phụ thuộc lẫn nhau. Bạn sẽ tốt hơn khi sử dụng một hệ thống xây dựng như Bazel. Công việc CI của bạn chỉ đơn giản là phát hành bản dựng bazel // ... (xây dựng mọi thứ) và Bazel sẽ tính toán những gì thực sự cần được xây dựng và những gì cần được kiểm tra. Hơn nữa, thậm chí còn tồn tại các quy tắc bazel như rule_docker và rule_k8s có thể tính toán những container nào của bạn cần được xây dựng lại và đẩy vào một sổ đăng ký container và ứng dụng nào của bạn cần được triển khai lại cho Kubernetes.


Thay đổi không may không chứa tất cả các thay đổi từ các yêu cầu thay đổi, chỉ có delta giữa hai lần xác nhận cuối cùng. Tuy nhiên kiểm tra tùy chỉnh có thể dễ dàng thực hiện.
Kirtul
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.