Thứ ba, 29/09/2020 | 00:00 GMT+7

Cách tự động hóa thiết lập Jenkins với cấu hình Docker và Jenkins dưới dạng mã

Jenkins là một trong những server tự động hóa open-souce phổ biến nhất, thường được sử dụng để sắp xếp quy trình công việc tích hợp liên tục (CI) và / hoặc triển khai liên tục (CD) .

Việc cấu hình Jenkins thường được thực hiện thủ công thông qua trình hướng dẫn cài đặt dựa trên web; đây có thể là một quá trình chậm, dễ xảy ra lỗi và không thể mở rộng. Bạn có thể xem các bước liên quan theo Bước 4 - Cài đặt Jenkins trong hướng dẫn Cách cài đặt Jenkins trên Ubuntu 18.04 . Hơn nữa, không thể theo dõi cấu hình trong hệ thống kiểm soát version (VCS) như Git , cũng như không chịu sự giám sát của bất kỳ quy trình xem xét mã nào.

Trong hướng dẫn này, bạn sẽ tự động hóa cài đặt và cấu hình Jenkins bằng Docker và phương pháp Jenkins Configuration as Code (JCasC).

Jenkins sử dụng một kiến trúc có thể cắm được để cung cấp hầu hết các chức năng của nó. JCasC sử dụng plugin Cấu hình làm Mã , cho phép bạn xác định trạng thái mong muốn của cấu hình Jenkins dưới dạng một hoặc nhiều (các) file YAML , loại bỏ sự cần thiết của trình hướng dẫn cài đặt . Khi chạy , plugin Configuration as Code sẽ cấu hình Jenkins theo (các) file cấu hình, giúp giảm đáng kể thời gian cấu hình và loại bỏ lỗi do con người gây ra.

Docker là tiêu chuẩn thực tế để tạo và chạy vùng chứa , là công nghệ ảo hóa cho phép bạn chạy các ứng dụng độc lập, khép kín một cách nhất quán trên các hệ điều hành (OS) và kiến trúc phần cứng khác nhau. Bạn sẽ chạy version Jenkins của bạn bằng Docker để tận dụng tính nhất quán và khả năng đa nền tảng này.

Hướng dẫn này bắt đầu bằng cách hướng dẫn bạn cài đặt JCasC. Sau đó, bạn sẽ thêm từng bước vào file cấu hình JCasC để cài đặt user , xác thực cấu hình và ủy quyền, và cuối cùng để bảo mật version Jenkins của bạn. Sau khi hoàn thành hướng dẫn này, bạn sẽ tạo một Docker image tùy chỉnh được cài đặt để sử dụng plugin Cấu hình dưới dạng Mã khi khởi động để tự động cấu hình và bảo mật version Jenkins của bạn.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

  • Truy cập vào server có ít nhất 2GB RAM và được cài đặt Docker. Đây có thể là máy phát triển local của bạn, Server hoặc bất kỳ loại server nào. Thực hiện theo Bước 1 - Cài đặt Docker từ một trong các hướng dẫn trong bộ sưu tậpCách cài đặt và sử dụng Docker để cài đặt Docker.

Lưu ý: Hướng dẫn này được thử nghiệm trên Ubuntu 18.04; tuy nhiên, vì Docker image là độc lập, các bước được nêu ở đây sẽ hoạt động đối với bất kỳ hệ điều hành nào có cài đặt Docker.

Bước 1 - Tắt Trình hướng dẫn Cài đặt

Sử dụng JCasC loại bỏ nhu cầu hiển thị trình hướng dẫn cài đặt; do đó, trong bước đầu tiên này, bạn sẽ tạo version sửa đổi của hình ảnh jenkins/jenkins chính thức đã tắt trình hướng dẫn cài đặt . Bạn sẽ thực hiện việc này bằng cách tạo một Dockerfile và xây dựng một hình ảnh Jenkins tùy chỉnh từ nó.

Hình ảnh jenkins/jenkins cho phép bạn bật hoặc tắt trình hướng dẫn cài đặt bằng cách chuyển vào thuộc tính hệ thống có tên jenkins.install.runSetupWizard thông qua biến môi trường JAVA_OPTS . User hình ảnh có thể chuyển vào biến môi trường JAVA_OPTS trong thời gian chạy bằng cách sử dụng cờ --env để docker run .Tuy nhiên, cách tiếp cận này sẽ dẫn đến việc vô hiệu hóa trình hướng dẫn cài đặt trên user hình ảnh. Thay vào đó, bạn nên tắt trình hướng dẫn cài đặt tại thời điểm xây dựng, để trình hướng dẫn cài đặt bị tắt theo mặc định.

Bạn có thể đạt được điều này bằng cách tạo Dockerfile và sử dụng hướng dẫn ENV để đặt biến môi trường JAVA_OPTS .

Trước tiên, hãy tạo một folder mới bên trong server của bạn để lưu trữ các file bạn sẽ tạo trong hướng dẫn này:

  • mkdir -p $HOME/playground/jcasc

Sau đó, chuyển bên trong folder đó:

  • cd $HOME/playground/jcasc

Tiếp theo, sử dụng editor , tạo một file mới có tên Dockerfile :

  • nano $HOME/playground/jcasc/Dockerfile

Sau đó, sao chép nội dung sau vào Dockerfile :

~ / playground / jcasc /
FROM jenkins/jenkins:latest ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false 

Ở đây, bạn đang sử dụng lệnh FROM để chỉ định jenkins/jenkins:latest làm hình ảnh cơ sở và lệnh ENV để đặt biến môi trường JAVA_OPTS .

Lưu file và thoát khỏi editor bằng cách nhấn CTRL+X theo sau là Y

Với những sửa đổi này, hãy tạo một Docker image tùy chỉnh mới và gán cho nó một thẻ duy nhất ( ta sẽ sử dụng jcasc ở đây):

  • docker build -t jenkins:jcasc .

Bạn sẽ thấy kết quả tương tự như sau:

Output
Sending build context to Docker daemon 2.048kB Step 1/2 : FROM jenkins/jenkins:latest ---> 1f4b0aaa986e Step 2/2 : ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false ---> 7566b15547af Successfully built 7566b15547af Successfully tagged jenkins:jcasc

Sau khi được tạo, hãy chạy hình ảnh tùy chỉnh của bạn bằng cách chạy docker run :

  • docker run --name jenkins --rm -p 8080:8080 jenkins:jcasc

Bạn đã sử dụng tùy chọn --name jenkins để đặt cho containers của bạn một cái tên dễ nhớ; nếu không, một ID thập lục phân ngẫu nhiên sẽ được sử dụng thay thế (ví dụ: f1d701324553 ). Bạn cũng đã chỉ định cờ --rm để containers sẽ tự động bị xóa sau khi bạn dừng quá trình containers . Cuối cùng, bạn đã cấu hình cổng 8080 của server lưu trữ server của bạn để proxy tới cổng 8080 của containers bằng cờ -p ; 8080 là cổng mặc định nơi giao diện user web Jenkins được phân phát.

Jenkins sẽ mất một khoảng thời gian ngắn để bắt đầu. Khi Jenkins đã sẵn sàng, bạn sẽ thấy dòng sau trong kết quả :

Output
... hudson.WebAppMain$3#run: Jenkins is fully up and running

Bây giờ, hãy mở trình duyệt của bạn lên server_ip :8080 . Bạn ngay lập tức hiển thị trang tổng quan mà không cần trình hướng dẫn cài đặt .

 Control panel  Jenkins

Bạn vừa xác nhận trình hướng dẫn cài đặt đã bị tắt. Để dọn dẹp, hãy dừng containers bằng cách nhấn CTRL+C Nếu bạn đã chỉ định cờ --rm trước đó, containers bị dừng sẽ tự động bị xóa.

Trong bước này, bạn đã tạo một hình ảnh Jenkins tùy chỉnh đã tắt trình hướng dẫn cài đặt . Tuy nhiên, trên cùng bên phải của giao diện web hiện hiển thị biểu tượng thông báo màu đỏ cho biết có sự cố với cài đặt . Bấm vào biểu tượng để xem chi tiết.

Trang tổng quan Jenkins hiển thị các vấn đề

Cảnh báo đầu tiên cho bạn biết rằng bạn chưa cấu hình URL Jenkins. Điều thứ hai cho bạn biết rằng bạn chưa cấu hình bất kỳ kế hoạch xác thực và ủy quyền nào và user ẩn danh có đầy đủ quyền để thực hiện tất cả các hành động trên version Jenkins của bạn. Trước đây, trình hướng dẫn cài đặt đã hướng dẫn bạn cách giải quyết những vấn đề này. Đến đây bạn đã vô hiệu hóa nó, bạn cần sao chép các chức năng tương tự bằng cách sử dụng JCasC. Phần còn lại của hướng dẫn này sẽ liên quan đến việc sửa đổi cấu hình Dockerfile và Dockerfile của bạn cho đến khi không còn vấn đề nào nữa (nghĩa là cho đến khi biểu tượng thông báo màu đỏ biến mất).

Trong bước tiếp theo, bạn sẽ bắt đầu quá trình đó bằng cách cài đặt trước một loạt các plugin Jenkins, bao gồm cả plugin Cấu hình dưới dạng Mã, vào hình ảnh Jenkins tùy chỉnh của bạn.

Bước 2 - Cài đặt các plugin Jenkins

Để sử dụng JCasC, bạn cần cài đặt plugin Cấu hình dưới dạng Mã. Hiện tại, không có plugin nào được cài đặt. Bạn có thể xác nhận điều này bằng cách chuyển đến http:// server_ip :8080/pluginManager/installed .

 Control panel  Jenkins hiển thị không có plugin nào được cài đặt

Trong bước này, bạn sẽ sửa đổi Dockerfile của bạn để cài đặt trước một loạt các plugin, bao gồm cả plugin Configuration as Code.

Để tự động hóa quá trình cài đặt plugin, bạn có thể sử dụng lệnh cài đặt đi kèm với hình ảnh jenkins/jenkins Docker. Bạn có thể tìm thấy nó bên trong containers tại /usr/local/bin/install-plugins.sh . Để sử dụng nó, bạn cần phải:

  • Tạo một file văn bản chứa danh sách các plugin để cài đặt
  • Sao chép nó vào Docker image
  • Chạy tập lệnh install-plugins.sh để cài đặt các plugin

Trước tiên, sử dụng editor , tạo một file mới có tên plugins.txt :

  • nano $HOME/playground/jcasc/plugins.txt

Sau đó, thêm vào danh sách tên plugin và version được phân tách bằng dòng mới sau (sử dụng định dạng <id>:<version> ):

~ / playground / jcasc / plugins.txt
ant:latest antisamy-markup-formatter:latest build-timeout:latest cloudbees-folder:latest configuration-as-code:latest credentials-binding:latest email-ext:latest git:latest github-branch-source:latest gradle:latest ldap:latest mailer:latest matrix-auth:latest pam-auth:latest pipeline-github-lib:latest pipeline-stage-view:latest ssh-slaves:latest timestamper:latest workflow-aggregator:latest ws-cleanup:latest 

Lưu file và thoát khỏi editor .

Danh sách chứa plugin Cấu hình dưới dạng Mã, cũng như tất cả các plugin được đề xuất bởi trình hướng dẫn cài đặt (đúng với Jenkins v2.251). Ví dụ: bạn có plugin Git , cho phép Jenkins làm việc với kho Git; bạn cũng có plugin Pipeline , đây thực sự là một bộ plugin cho phép bạn xác định các công việc Jenkins dưới dạng mã.

Lưu ý: Danh sách các plugin được đề xuất cập nhật nhất có thể được suy ra từ mã nguồn . Bạn cũng có thể tìm thấy danh sách các plugin do cộng đồng đóng góp phổ biến nhất tại plugins.jenkins.io . Hãy đưa bất kỳ plugin nào khác mà bạn muốn vào danh sách.

Tiếp theo, mở file Dockerfile :

  • nano $HOME/playground/jcasc/Dockerfile

Trong đó, thêm hướng dẫn COPY để sao chép file tin plugins.txt vào folder /usr/share/jenkins/ref/ bên trong ảnh; đây là nơi Jenkins thường tìm kiếm các plugin. Sau đó, bao gồm một lệnh RUN bổ sung để chạy tập lệnh install-plugins.sh :

~ / playground / jcasc / Dockerfile
FROM jenkins/jenkins ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false COPY plugins.txt /usr/share/jenkins/ref/plugins.txt RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt 

Lưu file và thoát khỏi editor . Sau đó, tạo một hình ảnh mới bằng Dockerfile đã sửa đổi:

  • docker build -t jenkins:jcasc .

Bước này liên quan đến việc download và cài đặt nhiều plugin vào hình ảnh và có thể mất một chút thời gian để chạy tùy thuộc vào kết nối internet của bạn. Sau khi cài đặt xong các plugin, hãy chạy hình ảnh Jenkins mới:

  • docker run --name jenkins --rm -p 8080:8080 jenkins:jcasc

Sau khi Jenkins is fully up and running thông báo Jenkins is fully up and running xuất hiện trên stdout , hãy chuyển đến server_ip :8080/pluginManager/installed để xem danh sách các plugin đã cài đặt. Bạn sẽ thấy một hộp kiểm chắc chắn bên cạnh tất cả các plugin bạn đã chỉ định bên trong plugins.txt , cũng như một hộp kiểm mờ bên cạnh các plugin, là các phụ thuộc của các plugin đó.

Danh sách các plugin đã cài đặt

Khi bạn đã xác nhận plugin Cấu hình dưới dạng mã đã được cài đặt, hãy chấm dứt quá trình containers bằng cách nhấn CTRL+C

Trong bước này, bạn đã cài đặt tất cả các plugin Jenkins đề xuất và plugin Cấu hình dưới dạng Mã. Đến đây bạn đã sẵn sàng sử dụng JCasC để giải quyết các vấn đề được liệt kê trong hộp thông báo. Trong bước tiếp theo, bạn sẽ khắc phục sự cố đầu tiên, điều này cảnh báo bạn rằng URL root của Jenkins trống .

Bước 3 - Chỉ định URL Jenkins

URL Jenkins là một URL cho version Jenkins có thể định tuyến được từ các thiết bị cần truy cập nó. Ví dụ: nếu bạn đang triển khai Jenkins dưới dạng một nút bên trong mạng riêng tư, thì URL Jenkins có thể là địa chỉ IP riêng hoặc tên DNS có thể phân giải được bằng server DNS riêng. Đối với hướng dẫn này, chỉ cần sử dụng địa chỉ IP của server (hoặc 127.0.0.1 cho server local ) để tạo URL Jenkins là đủ.

Bạn có thể đặt URL Jenkins trên giao diện web bằng cách chuyển đến server_ip :8080/configure và nhập giá trị vào trường Jenkins URL dưới tiêu đề Jenkins Location . Dưới đây là cách đạt được điều tương tự bằng cách sử dụng plugin Cấu hình như Mã:

  1. Xác cấu hình mong muốn của cá thể Jenkins của bạn bên trong file cấu hình khai báo ( ta sẽ gọi là casc.yaml ).
  2. Sao chép file cấu hình vào Docker image (giống như bạn đã làm cho file plugins.txt của plugins.txt ).
  3. Đặt biến môi trường CASC_JENKINS_CONFIG thành đường dẫn của file cấu hình để hướng dẫn plugin Cấu hình dưới dạng Mã đọc nó.

Đầu tiên, tạo một file mới có tên casc.yaml :

  • nano $HOME/playground/jcasc/casc.yaml

Sau đó, thêm vào các dòng sau:

~ / playground / jcasc / casc.yaml
unclassified:   location:     url: http://server_ip:8080/ 

unclassified.location.url là đường dẫn để cài đặt URL Jenkins. Nó chỉ là một trong vô số các thuộc tính có thể được cài đặt với JCasC. Thuộc tính hợp lệ được xác định bởi các plugin được cài đặt. Ví dụ: thuộc tính jenkins.authorizationStrategy.globalMatrix.permissions sẽ chỉ hợp lệ nếu plugin Chiến lược ủy quyền ma trận được cài đặt. Để xem những thuộc tính nào có sẵn, hãy chuyển đến server_ip :8080/configuration-as-code/reference , và bạn sẽ tìm thấy một trang tài liệu được tùy chỉnh cho cài đặt Jenkins cụ thể của bạn.

Lưu file casc.yaml , thoát khỏi editor và mở file Dockerfile :

  • nano $HOME/playground/jcasc/Dockerfile

Thêm hướng dẫn COPY vào cuối Dockerfile của bạn để sao chép file casc.yaml vào hình ảnh tại /var/jenkins_home/casc.yaml . Bạn đã chọn /var/jenkins_home/ vì đó là folder mặc định nơi Jenkins lưu trữ tất cả dữ liệu của nó:

~ / playground / jcasc / Dockerfile
FROM jenkins/jenkins:latest ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false COPY plugins.txt /usr/share/jenkins/ref/plugins.txt RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt COPY casc.yaml /var/jenkins_home/casc.yaml 

Sau đó, thêm một lệnh ENV khác đặt biến môi trường CASC_JENKINS_CONFIG :

~ / playground / jcasc / Dockerfile
FROM jenkins/jenkins:latest ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false ENV CASC_JENKINS_CONFIG /var/jenkins_home/casc.yaml COPY plugins.txt /usr/share/jenkins/ref/plugins.txt RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt COPY casc.yaml /var/jenkins_home/casc.yaml 

Lưu ý: Bạn đã đặt hướng dẫn ENV ở gần đầu vì đó là thứ mà bạn khó có thể thay đổi. Bằng cách đặt nó trước khi COPYRUN hướng dẫn, bạn có thể tránh được vô hiệu các lớp cache nếu bạn đã cập nhật casc.yaml hoặc plugins.txt .

Lưu file và thoát khỏi editor . Tiếp theo, xây dựng hình ảnh:

  • docker build -t jenkins:jcasc .

Và chạy hình ảnh Jenkins được cập nhật:

  • docker run --name jenkins --rm -p 8080:8080 jenkins:jcasc

Ngay sau khi Jenkins is fully up and running dòng log Jenkins is fully up and running xuất hiện, hãy chuyển đến server_ip :8080 để xem trang tổng quan. Lần này, bạn có thể nhận thấy rằng số lượng thông báo giảm đi một và cảnh báo về URL Jenkins đã biến mất.

Trang tổng quan Jenkins hiển thị bộ đếm thông báo có số lượng là 1

Bây giờ, chuyển đến server_ip :8080/configure và cuộn xuống trường Jenkins URL . Xác nhận URL Jenkins đã được đặt thành cùng một giá trị được chỉ định trong file casc.yaml .

Cuối cùng, dừng quá trình containers bằng cách nhấn CTRL+C

Trong bước này, bạn đã sử dụng plugin Cấu hình làm Mã để đặt URL Jenkins. Trong bước tiếp theo, bạn sẽ giải quyết vấn đề thứ hai từ danh sách thông báo (thông báo Jenkins hiện không an toàn ).

Bước 4 - Tạo user

Lúc này, cài đặt của bạn chưa triển khai bất kỳ cơ chế xác thực và ủy quyền nào. Trong bước này, bạn sẽ cài đặt một schemas xác thực dựa trên password , cơ bản và tạo một user mới có tên là admin .

Bắt đầu bằng cách mở file casc.yaml của bạn:

  • nano $HOME/playground/jcasc/casc.yaml

Sau đó, thêm vào đoạn mã được đánh dấu:

~ / playground / jcasc / casc.yaml
jenkins:   securityRealm:     local:       allowsSignup: false       users:        - id: ${JENKINS_ADMIN_ID}          password: ${JENKINS_ADMIN_PASSWORD} unclassified:   ... 

Trong bối cảnh của Jenkins, lĩnh vực bảo mật chỉ đơn giản là một cơ chế xác thực; lĩnh vực bảo mật local nghĩa là sử dụng xác thực cơ bản trong đó user phải chỉ định ID / tên user và password của họ. Các lĩnh vực bảo mật khác tồn tại và được cung cấp bởi các plugin. Ví dụ: plugin LDAP cho phép bạn sử dụng dịch vụ folder LDAP hiện có làm cơ chế xác thực. Plugin Xác thực GitHub cho phép bạn sử dụng thông tin đăng nhập GitHub của bạn để xác thực qua OAuth.

Lưu ý bạn cũng đã chỉ định allowsSignup: false , ngăn user ẩn danh tạo account thông qua giao diện web.

Cuối cùng, thay vì mã hóa cứng ID user và password , bạn đang sử dụng các biến có giá trị có thể được điền vào trong thời gian chạy. Điều này rất quan trọng vì một trong những lợi ích của việc sử dụng JCasC là file casc.yaml có thể được commit vào kiểm soát nguồn; nếu bạn lưu trữ password user ở dạng văn bản rõ ràng bên trong file cấu hình, bạn đã xâm phạm hiệu quả thông tin đăng nhập. Thay vào đó, các biến được xác định bằng cú pháp ${VARIABLE_NAME} và giá trị của nó có thể được điền bằng cách sử dụng biến môi trường có cùng tên hoặc file cùng tên được đặt bên trong folder /run/secrets/ trong containers images .

Tiếp theo, xây dựng một hình ảnh mới để kết hợp các thay đổi được thực hiện đối với file casc.yaml :

  • docker build -t jenkins:jcasc .

Sau đó, chạy hình ảnh Jenkins được cập nhật trong khi đi qua trong JENKINS_ADMIN_IDJENKINS_ADMIN_PASSWORD biến môi trường thông qua --env tùy chọn (thay thế <password> với một password bạn đã chọn):

  • docker run --name jenkins --rm -p 8080:8080 --env JENKINS_ADMIN_ID=admin --env JENKINS_ADMIN_PASSWORD=password jenkins:jcasc

Đến đây bạn có thể truy cập server_ip :8080/login và đăng nhập bằng thông tin xác thực được chỉ định.

Màn hình đăng nhập Jenkins với các trường ID  user  và password  được điền

Khi bạn đã đăng nhập thành công, bạn sẽ được chuyển đến trang tổng quan.

Trang tổng quan Jenkins cho  user  đã xác thực, hiển thị ID  user  và liên kết 'đăng xuất' gần góc trên cùng bên phải của trang

Kết thúc bước này bằng cách nhấn CTRL+C để dừng containers .

Trong bước này, bạn đã sử dụng JCasC để tạo một user mới có tên là admin . Bạn cũng đã học cách giữ cho dữ liệu nhạy cảm, chẳng hạn như password , không bị các file VCS theo dõi. Tuy nhiên, cho đến nay bạn chỉ cấu hình xác thực user ; bạn chưa triển khai bất kỳ cơ chế ủy quyền nào. Trong bước tiếp theo, bạn sẽ sử dụng JCasC để cấp cho user admin của bạn các quyền quản trị.

Bước 5 - Cài đặt ủy quyền

Sau khi cài đặt vùng bảo mật, bây giờ bạn phải cấu hình chiến lược ủy quyền . Trong bước này, bạn sẽ sử dụng plugin Chiến lược ủy quyền ma trận để cấu hình quyền cho user admin của bạn .

Theo mặc định, cài đặt cốt lõi Jenkins cung cấp cho ta ba chiến lược ủy quyền:

  • unsecured : mọi user , bao gồm cả user ẩn danh, có đầy đủ quyền để làm mọi thứ
  • legacy : mô phỏng Jenkins kế thừa (trước v1.164), trong đó mọi user có role admin đều được cấp toàn quyền, trong khi những user khác, bao gồm cả user ẩn danh, được cấp quyền đọc.

Lưu ý: Một role trong Jenkins có thể là user (ví dụ: daniel ) hoặc một group (ví dụ: developers )

  • loggedInUsersCanDoAnything : user ẩn danh không được cấp quyền truy cập hoặc quyền chỉ đọc. User được xác thực có đầy đủ quyền để làm mọi thứ. Bằng cách chỉ cho phép các hành động đối với user đã xác thực, bạn có thể có một dấu vết kiểm tra xem user đã thực hiện hành động nào.

Lưu ý: Bạn có thể khám phá các chiến lược ủy quyền khác và các plugin liên quan của chúng trong tài liệu ; chúng bao gồm các plugin xử lý cả xác thực và ủy quyền.

Tất cả các chiến lược cấp quyền này đều rất thô sơ và không có khả năng kiểm soát chi tiết về cách đặt quyền cho những user khác nhau. Thay vào đó, bạn có thể sử dụng plugin Chiến lược ủy quyền ma trận đã được đưa vào danh sách plugins.txt của bạn. Plugin này cung cấp cho bạn một chiến lược ủy quyền chi tiết hơn và cho phép bạn cài đặt quyền của user trên phạm vi global , cũng như theo từng dự án / công việc.

Plugin Chiến lược ủy quyền ma trận cho phép bạn sử dụng thuộc tính jenkins.authorizationStrategy.globalMatrix.permissions JCasC để đặt quyền global . Để sử dụng nó, hãy mở file casc.yaml của bạn:

  • nano $HOME/playground/jcasc/casc.yaml

Và thêm vào đoạn mã được đánh dấu:

~ / playground / jcasc / casc.yaml
...        - id: ${JENKINS_ADMIN_ID}          password: ${JENKINS_ADMIN_PASSWORD}   authorizationStrategy:     globalMatrix:       permissions:         - "Overall/Administer:admin"         - "Overall/Read:authenticated" unclassified: ... 

globalMatrix tính globalMatrix đặt quyền global (trái ngược với quyền theo từng dự án). Thuộc tính permissions là một danh sách các chuỗi có định dạng <permission-group>/<permission-name>:<role> . Tại đây, bạn đang cấp quyền Overall/Administer admin user admin . Bạn cũng cấp quyền Overall/Read cho người được authenticated , đây là một role đặc biệt đại diện cho tất cả user được xác thực. Có một role đặc biệt khác được gọi là anonymous , group tất cả user không được xác thực lại với nhau. Nhưng vì quyền bị từ chối theo mặc định, nên nếu bạn không muốn cấp cho user ẩn danh bất kỳ quyền nào, bạn không cần phải bao gồm một mục nhập rõ ràng cho quyền đó.

Lưu file casc.yaml , thoát khỏi editor và tạo một hình ảnh mới:

  • docker build -t jenkins:jcasc .

Sau đó, chạy hình ảnh Jenkins được cập nhật:

  • docker run --name jenkins --rm -p 8080:8080 --env JENKINS_ADMIN_ID=admin --env JENKINS_ADMIN_PASSWORD=password jenkins:jcasc

Chờ cho dòng log Jenkins is fully up and running , sau đó chuyển đến server_ip :8080 . Bạn sẽ được chuyển hướng đến trang đăng nhập. Điền thông tin đăng nhập của bạn và bạn sẽ được chuyển hướng đến trang tổng quan chính.

Trong bước này, bạn đã cài đặt quyền global cho user admin của bạn . Tuy nhiên, việc giải quyết vấn đề ủy quyền đã phát hiện ra các vấn đề bổ sung hiện được hiển thị trong menu thông báo.

Trang tổng quan Jenkins hiển thị menu thông báo có hai vấn đề

Do đó, trong bước tiếp theo, bạn sẽ tiếp tục sửa đổi Docker image của bạn , để giải quyết từng vấn đề một cho đến khi không còn vấn đề nào.

Trước khi bạn tiếp tục, hãy dừng containers bằng cách nhấn CTRL+C

Bước 6 - Cài đặt ủy quyền xây dựng

Vấn đề đầu tiên trong danh sách thông báo liên quan đến xác thực xây dựng. Theo mặc định, tất cả các công việc được chạy với quyền là user hệ thống, có rất nhiều quyền hệ thống. Do đó, user Jenkins có thể thực hiện leo thang quyền đơn giản bằng cách xác định và chạy một công việc hoặc đường dẫn độc hại; điều này là không an toàn.

Thay vào đó, các công việc nên được chạy bằng chính user Jenkins đã cấu hình hoặc kích hoạt nó. Để làm điều này, bạn cần cài đặt một plugin bổ sung được gọi là plugin Authorize Project .

Mở plugins.txt :

  • nano $HOME/playground/jcasc/plugins.txt

Và thêm dòng được đánh dấu:

~ / playground / jcasc / plugins.txt
ant:latest antisamy-markup-formatter:latest authorize-project:latest build-timeout:latest ... 

Plugin cung cấp chiến lược ủy quyền bản dựng mới mà bạn cần chỉ định trong cấu hình JCasC của bạn . Thoát ra khỏi plugins.txt file và mở casc.yaml file:

  • nano $HOME/playground/jcasc/casc.yaml

Thêm khối được đánh dấu vào file casc.yaml của bạn:

~ / playground / jcasc / casc.yaml
...         - "Overall/Administer:admin"         - "Overall/Read:authenticated" security:   queueItemAuthenticator:     authenticators:     - global:         strategy: triggeringUsersAuthorizationStrategy unclassified: ... 

Lưu file và thoát khỏi editor . Sau đó, xây dựng một hình ảnh mới bằng cách sử dụng biến đổi plugins.txtcasc.yaml file:

  • docker build -t jenkins:jcasc .

Sau đó, chạy hình ảnh Jenkins được cập nhật:

  • docker run --name jenkins --rm -p 8080:8080 --env JENKINS_ADMIN_ID=admin --env JENKINS_ADMIN_PASSWORD=password jenkins:jcasc

Chờ cho dòng log Jenkins is fully up and running , sau đó chuyển đến server_ip :8080/login , điền thông tin đăng nhập của bạn và đến trang tổng quan chính. Mở menu thông báo và bạn sẽ thấy vấn đề liên quan đến xác thực bản dựng không còn xuất hiện nữa.

Menu thông báo của console  Jenkins hiển thị một vấn đề duy nhất liên quan đến hệ thống phụ bảo mật chính đang bị tắt

Dừng containers bằng cách chạy CTRL+C trước khi tiếp tục.

Trong bước này, bạn đã cấu hình Jenkins để chạy các bản dựng bằng user đã kích hoạt bản dựng, thay vì user hệ thống. Điều này giúp loại bỏ một trong những vấn đề trong danh sách thông báo. Trong bước tiếp theo, bạn sẽ giải quyết vấn đề tiếp theo liên quan đến Hệ thống con bảo mật Tác nhân tới Bộ điều khiển.

Bước 7 - Kích hoạt Tác nhân để Kiểm soát Truy cập Bộ điều khiển

Trong hướng dẫn này, bạn chỉ triển khai một version Jenkins duy nhất, chạy tất cả các bản dựng. Tuy nhiên, Jenkins hỗ trợ các bản dựng phân tán bằng cách sử dụng cấu hình tác nhân / bộ điều khiển. Bộ điều khiển chịu trách nhiệm cung cấp giao diện user web, hiển thị một API để khách hàng gửi yêu cầu đến và điều phối các bản dựng. Các tác nhân là các thể hiện thực thi các công việc.

Lợi ích của cấu hình này là nó có khả năng mở rộng và khả năng chịu lỗi cao hơn. Nếu một trong các server đang chạy Jenkins gặp sự cố, các version khác có thể phải tải thêm.

Tuy nhiên, có thể có những trường hợp mà bộ điều khiển không thể tin cậy các tác nhân. Ví dụ: group OPS có thể quản lý bộ điều khiển Jenkins, trong khi nhà thầu bên ngoài quản lý tác nhân Jenkins được cấu hình tùy chỉnh của riêng họ. Nếu không có Hệ thống con bảo mật Tác nhân tới Bộ điều khiển, tác nhân có thể hướng dẫn bộ điều khiển thực hiện bất kỳ hành động nào mà nó yêu cầu, có thể không mong muốn. Bằng cách bật Kiểm soát truy cập Tác nhân đến Bộ điều khiển, bạn có thể kiểm soát các lệnh và file mà tác nhân có quyền truy cập.

Để bật Kiểm soát Truy cập Tác nhân đến Bộ điều khiển, hãy mở file casc.yaml :

  • nano $HOME/playground/jcasc/casc.yaml

Sau đó, thêm các dòng được đánh dấu sau:

~ / playground / jcasc / casc.yaml
...         - "Overall/Administer:admin"         - "Overall/Read:authenticated"   remotingSecurity:     enabled: true security:   queueItemAuthenticator: ... 

Lưu file và tạo một hình ảnh mới:

  • docker build -t jenkins:jcasc .

Chạy hình ảnh Jenkins được cập nhật:

  • docker run --name jenkins --rm -p 8080:8080 --env JENKINS_ADMIN_ID=admin --env JENKINS_ADMIN_PASSWORD=password jenkins:jcasc

Điều hướng đến server_ip :8080/login và xác thực như trước. Khi bạn truy cập trang tổng quan chính, menu thông báo sẽ không hiển thị bất kỳ vấn đề nào nữa.

 Control panel  Jenkins không hiển thị vấn đề gì

Kết luận

Đến đây bạn đã cấu hình thành công một server Jenkins đơn giản bằng JCasC. Giống như plugin Pipeline cho phép các nhà phát triển xác định công việc của họ bên trong Jenkinsfile , plugin Configuration as Code cho phép administrator xác cấu hình Jenkins bên trong file YAML. Cả hai plugin này giúp Jenkins liên kết chặt chẽ hơn với mô hình Mọi thứ dưới dạng Mã (EaC).

Tuy nhiên, việc lấy đúng cú pháp JCasC có thể khó và tài liệu có thể khó giải mã. Nếu bạn gặp khó khăn và cần trợ giúp, bạn có thể tìm thấy nó trong trò chuyện Gitter dành cho plugin.

Mặc dù bạn đã cấu hình cài đặt cơ bản của Jenkins bằng JCasC, version mới không chứa bất kỳ dự án hoặc công việc nào. Để tiến xa hơn nữa, hãy khám phá plugin Job DSL , cho phép ta xác định các dự án và công việc dưới dạng mã. Hơn nữa, bạn có thể bao gồm mã Job DSL bên trong file cấu hình JCasC của bạn và tạo các dự án và công việc như một phần của quá trình cấu hình.


Tags:

Các tin liên quan

Cách phát triển trang web Drupal 9 trên máy cục bộ của bạn bằng Docker và DDEV
2020-08-12
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Ubuntu 18.04
2020-08-07
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Debian 9
2020-08-07
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Debian 10
2020-08-07
Cách loại bỏ image Docker, container và khối lượng
2020-08-06
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Ubuntu 20.04
2020-08-04
Cách mở rộng và bảo mật một ứng dụng Django với Docker, Nginx và Let's Encrypt
2020-07-10
Cách tạo ứng dụng Node.js với Docker trên Ubuntu 20.04
2020-06-30
Cách cài đặt Docker Compose trên Ubuntu 20.04 [Quickstart]
2020-06-11
Cách cài đặt và thiết lập Laravel với Docker Compose trên Ubuntu 20.04
2020-06-09