Sử dụng Jenkins để deploy code có sự approval của manager
Jenkins
3
deployment
13
White

Ha Nguyen viết ngày 04/04/2016

A. Vấn đề

Ở các công ty mình làm việc (không biết các chỗ khác thế nào), Developer hoạt động độc lập, không được nhiều quyền ( không được quyền root) trên Server Production. Việc Deploy Code được System Engineer (SE) thực hiện. Ngoài ra, bất cứ action nào làm thay đổi hệ thống ( gọi là Change ) đều cần có sự approve của Manager trước khi thực hiện. Tuy nhiên, ngay cả SE như mình cũng chẳng thích việc này, tốn công, tốn sức, mà nói thẳng ra là nếu có lỗi thì lại báo Developers fix thôi, chứ SE chỉ ngồi ngó.

Việc này đã trở thành quy trình rồi, nên mình không bàn là nên hay không nhé.

Qui trình thường là :

* Developer : Sếp ơi em muốn deploy code 
* Manager: OK bấy bì  
* Developer : Anh SE ơi, deploy code giúp em, theo hướng dẫn : ABC,XYZ , .. 
* SE: Done nhé cưng. 

Qui trình là vậy, việc request/ approve thực hiện bằng email, cũng có thể bằng Tool, nhưng lại nảy sinh một số vấn đề sau :

  • Muốn tracking lại lịch sử Change của hệ thống không được
  • SE làm, thay đổi ra sao Developer không biết
  • SE ngồi làm đi làm lại một việc chả liên quan gì đến mình :(

Jenkins sẽ giúp ta giải quyết việc này, như mình đang áp dụng cho công ty của mình

B. Hướng dẫn cấu hình

Về việc Authentication bằng Google Mail, mọi người có thể xem qua Post này : Cài đặt Jenkins và xác thực bằng tài khoản Google Mail

Về Permission trong Jenkins, thì mọi người có thể review trong đây : Jenkins Matrix Based Security

1. Cấu hình Security cho Jenkins

Mình chọn kiểu cấu hình theo Project-based Matrix Authorization Strategy như sau

alt text

2. Cài đặt các Plugin liên quan

Mình cần cài các Plugin sau :

  • GIT Plugin : làm Git Client checkout Source Code về Workspace . Khi install Plugin này, Jenkins sẽ install thêm một số dependencies.
  • Promoted builds plugin : dùng cho việc request / approval

3. Tạo Item ( Project)

  • Tạo Project tên : ProjectA
  • This build is parameterized : Mình có thể Set Biến khi deploy. Biến này sẽ được input vào tại thời điểm click deploy code và được Jenkins sử dụng trong suốt quá trình chạy cái Project này . Nếu có set biến, thì khi build sẽ là : alt text

Tại đây, mình tạo biến : GIT_BUILD_SPEC : dùng cho Developer input vào GIT information dùng để build, với giá trị default à */production. Tức là latest commit của branch production. User có thể input vào một commit ID
alt text

  • Source Code : Mình có thể hướng dẫn Jenkins download về Sourcecode như sau :

alt text
Lưu ý là mình sử dụng biến GIT_BUILD_SPEC để làm biến input vào đây => Jenkins sẽ checkout source code theo hướng dẫn của Developer.
Kể từ lúc này, mình có thể sử dụng biến $WORKSPACE/ để lấy location của source code được jenkins checkout về.
Note: Mình đang dùng SSH Keys ( config deploy keys) nên phải config thêm ở phần Credentials

  • Enable project-based Security : Mình set quyền như sau :

alt text

  • Project Permission : Liệt kê các User liên quan đến Project như sau: không có quyền edit Project, chỉ có quyền liên quan đến việc BUILD :

alt text

  • User Request Deloy : Thực ra, quá trình này chỉ là gửi email đến cho Manager và các bên liên quan thôi . Config việc gửi email này nằm trong Post-build Action, mình chọn Editable Email Notification, với trigger như sau :
    alt text
    Ý nghĩa là : send email đến Manager và CC đến những người liên quan : Developer trong team, SE, ...

  • Promoted Build : Việc này liên quan đến việc Manager Approve và Developer thực sự deploy code . Mình chọn tick vào alt text , khi đó Jenkins sẽ cho mình chọn các Promotion processes. Mình sẽ tạo 2 ( hoặc nhiều hơn Process) : Approval và Deployment . Nếu trong quá trình deploy code, mình cần 2 action thì tạo 3 processes là : Approval , Deployment 1, Deployment 2.

    • Approval : Tác vụ approval ở đây cũng đơn giản là gửi 1 cái email notify đến mọi người để báo là Manager approval . Nên mình config như sau :

alt text

Lưu ý: với configure này, user phap.le là Manager, và là người duy nhất được thực thi process này. Ngoài ra còn có SuperAdmin , người được cấu hình quyền Administration nữa nhé.
* Deployment : Thực sự, đây mới là quá trình deploy code, gồm 2 tác vụ : chạy script deploy và gửi email notification về việc deploy ( kèm theo Log deploy)

alt text

Các bạn thấy, người thực hiện tác vụ Deployment có 3 User và khi deploy, mình chạy 1 đoạn script đã viết trước, có sử dụng biến $WORKSPACE . Script này thì mọi người làm theo nhu cầu của mình. Kèm theo action Gửi email Notification .

Lưu ý đoạn :

alt text

Đoạn này có nghĩa : chỉ khi nào tác vụ Approve được thực thi thì tác vụ Deployment mới được quyền thực thi.

4. Test

  • Developer request build bằng cách bấm vào Project mình cần build và nút Build with Parameters , Jenkins sẽ yêu cầu mình điền vào các biến đã được định nghĩa khi tick vào Option This build is parameterlized

alt text

Jenkins lúc này sẽ thực hiện tác vụ checkout sourcecode về và hiển thị Build ở mục Build History :

alt text

Khi click vào Build này, ta sẽ thấy nhiều thông tin như sau : Git Build Revision, Nút Promotion Status .

alt text

Khi click vào Promotion Status, ta sẽ thấy được 2 cái Action : Approval và Deployment
alt text

  • Manager approve request : Manager lúc này sẽ nhận được email, họ có thể dùng Link trong email để vào approve . Hoặc đi theo flow ở phía trên để vào được màn hình Promotion Status . Manager sẽ click vào nút : Build để thực hiện tác vụ Approve của mình

alt text

  • Developer thực hiện chính thức việc deploy cũng y hệt như Manager approve thôi .

alt text

Mọi người để ý khúc cuối : Action này phải được thực hiện sau khi action Approval được thực hiện thành công.

Đây là toàn bộ quá trình mình làm với việc deploy code. Hope help you.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ha Nguyen

3 bài viết.
11 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
7 5
Mở đầu Jenkins hỗ trợ nhiều cách xác thực User khác nhau : LDAP, Jenkins Database , Unix User , ... Đối với team/company sử dụng tài khoản Gmail ,...
Ha Nguyen viết hơn 3 năm trước
7 5
White
7 1
Ngày xửa ngày xưa ... Ngày mới chập chững bước vào nghề System Engineer , được sếp hướng dẫn và giao cho task : compile HTTPD, PHP lên Server. Lúc...
Ha Nguyen viết hơn 3 năm trước
7 1
Bài viết liên quan
White
3 0
Nhận thấy một số bạn khi pull code về server gặp phải trường hợp như sau. Tiêu Phong deploy lên server nên khi clone code về đã dùng lệnh git clon...
Ôm Boom viết hơn 2 năm trước
3 0
White
6 1
Mở đầu Trong quy trình phát triển một phần mềm, Test nói chung và UT nói riêng luôn là những process rất quan trọng. Tuy nhiên khi Application càn...
Vu Nhat Minh viết hơn 4 năm trước
6 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
11 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!