Một ngày nọ mình muốn sửa Jenkinsfile lại nhưng sau khi sửa xong và định update đến repo thì mình chợt nhớ đến một vấn đề đó là repo quá nhiều, lúc đó mình không biết phải update sao với cái Jenkinsfile này nữa, đành copy tay vào cho từng repo rồi push code đó lên, nghe thì có vẽ thủ công quá đúng không, cho đến khi hôm sau Jenkinsfile lại có vấn đề, lúc này mình mới bắt đầu bực tức, mình bực không phải vì mình phải sửa nó mà mình bực là chả lẽ bây giờ mình có 100 repo và mình phải cứ vào từng repo sửa cái Jenkinsfile rồi update lên lại, thế là sau nhiều lần tìm kiếm cách thì mình đã tìm ra được cách giải quyết vấn đề đó.
Mình đã sử dụng phương thức Extending with Shared Libraries của Jenkins để tiện cho việc mở rộng cũng như update file, thế thằng này có gì thú vị và nó hoạt động như thế nào ? mình sẻ nói ngay đây, việc của chúng ta là sẻ tạo ra các file có đuôi là .groovy và xem file đó như là 1 lib để khi sử dụng Jenkinsfile chúng ta sẻ add lib này vào Jenkinsfile, ok nói vậy chắc các bạn khó hiểu đúng không ? vậy thì chúng ta cùng nhau thực hành để dễ hiểu hơn nha.
Bước 1: Chúng ta thực hiện tạo một Git Repo mới và riêng biệt hoàn toàn dùng để chứa lib với name là tùy các bạn lựa chọn mình thì lấy là Jenkinsfile Lib
Ok sau khi đã tạo xong Git Repo dùng để chứa đựng thư viện rồi thì chúng ta sẻ cấu hình thư viện này đến Jenkins để khi build nó có thể lấy file groovy từ thư viện này về
Bước 2: Cấu hình thư viện đến Jenkins
Tại Dashboard chính của Jenkins chúng ta cần phải truy cập theo đường dẫn sau và tìm đến config:
"Manage Jenkins => Configure System => Global Pipeline Libraries"
Như các bạn thấy tại phần name mình sẻ đặt tên của thư viện đó, version thì mình chọn là branch master (Ở đây version là các Branch nhé) thực hiện connect tới Git Repo đó bằng Credentails mà mình đã tạo trước đây để có thể lấy Git Repo về, nhớ là chú ý vụ này, không pull được là nó không pull lib về luôn đâu, còn lại cứ cấu hình y như mình là được
Bước 3: Pull Git Repo lib về local và thực hiện code một lib đầu tiên nhé
Trước tiên trong Repo mình cần phải tạo một folder có tên là vars trước và nhét tất cả các lib muốn call vào đó, ví dụ ở đây mình sẻ thử nghiệm với lib "welcomeJob.groovy" các bạn cần chú ý quá trình đặt tên cho lib nhé đừng có khoảng cách hay là các symbol gì cả vì khi có những ký tự đó vào dễ gây lỗi script khi call lắm, ok với code của lib trên như sau
// Author: Dang Thanh Phat // Email: [email protected] // Blog: itblognote.com // Description: Demo lib jenkins deploy // ============================START============================ def call(String name = 'thanhphatit') { echo "Welcome, ${name}." }Gì cũng phải mở đầu với Hello Word hoặc Welcome trước đúng không nào, ok tiếp đến chúng ta thực hiện demo bằng cách tạo 1 repo service mẫu, ở đây mình tạo repo chứa nginx làm mẫu cho quá trình build của mình
// Author: Dang Thanh Phat // Email: [email protected] // Blog: itblognote.com // Description: Code pipeline get shared libraries to build for all service // ============================START======================================= properties([pipelineTriggers([githubPush()])]) @Library('jenkinsfile-lib') _ welcomeJob 'devops-thanhphatit'
Note:
- "properties([pipelineTriggers([githubPush()])])": Dùng để trigger với Github
- "@Library('jenkinsfile-lib') _": Khai báo thư viện của chúng ta, ở đây với jenkinsfile-lib là tên mà mình đã config lúc nảy, các bạn cũng chú ý luôn cả dấu "_" nó rất là quang trọng đấy vì không có nó là nhiều khi các bạn sẻ xảy ra lỗi, script mình đang sử dụng là "Script Pipeline" chứ không phải là "Delivery Pipeline" nhé vì mình không thích sử dụng Delivery cho lắm.
- "welcomeJob 'devops-thanhphatit'": Và cuối cùng là mình sẻ gọi hàm welcomeJob đến từ lib của mình
Chắc các bạn sẻ nghĩ ơ thế cái này nó liên quan gì đến việc mày update Jenkinsfile nhỉ, một bài viết vớ vẫn, haha khoan đã nào, nếu như mình không gọi thằng welcomJob mà mình add đến là một lib khác thì sau, ví dụ là một Pipeline code về các bước deploy của mình chẳng hạn, chính xác là thế, bây giờ các bạn chỉ cần việc thay thế cái lib webcomeJob của mình bằng cái lib để deploy job của các bạn thì mõi khi update các bạn chỉ cần update thằng lib thôi không cần phải truy cập đến repo của service để update cho từng cái mất thời gian, vì khi các bạn update tại lib thì đồng nghĩa các repo của service cũng tự động update vì nó kéo thư viện đó về mà chạy mà, như vậy mình đã hướng dẫn xong cách để có thể update Jenkinsfile mà không cần đến từng repo rồi đấy, chúc các bạn thành công nhé.
0 Comments
Vài lời muốn nói:
* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.
* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.
* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.