Trong ba bài viết đầu tiên về tự động cài đặt Kubernetes với Jenkins, “Sử dụng Jenkins với Kubernetes AWS, Phần 1”, chúng tôi đã tạo các tạo tác tiền cần thiết và tạo một nút Jenkins. Trong phần tiếp theo này, chúng ta sẽ cấu hình Jenkinsfile cho một đường ống Jenkins và tạo một đường ống Jenkins. Bài viết này có các phần sau:
- Định cấu hình Jenkinsfile
- Tạo đường ống Jenkins
- Kết luận
Tạo Jenkinsfile
Đường ống Jenkins được định cấu hình trong tệp văn bản có tên Jenkinsfile trong cú pháp Groovy. Jenkinsfile bao gồm các bước . “Bước” là một bước xây dựng, một hướng dẫn để Jenkins thực hiện. Hai loại bước được hỗ trợ: nút và giai đoạn . “Nút” là bước cấp cao nhất chọn / s người thực thi trên / s tác nhân để chạy mã. Một nút là một máy ( cái chính hoặc đại lý ) và một nhãn trong bước nút phải khớp với nhãn trên máy để nút chọn máy. Bước “nút” tạo ra một không gian làm việc , là một thư mục tệp, dành cho một công việc Jenkins cụ thể để xử lý chuyên sâu về tài nguyên. Bước “nút” cũng lên lịch cho các bước được xác định bên trong nó trên một vị trí thực thi bằng cách thêm chúng vào hàng đợi xây dựng Jenkins. Khi vị trí trình thực thi giải phóng các bước đã lập lịch chạy khỏi hàng đợi xây dựng.
Tạo một tệp có tên Jenkinsfile (không có bất kỳ hậu tố nào). Tệp không có hậu tố được tạo trên Windows bằng lệnh sau từ dấu nhắc lệnh. Lưu ý dấu “.” Ở cuối lệnh, lệnh sẽ được bao gồm.
>notepad Jenkinsfile.
Trong hộp thoại “Không thể tìm thấy tệp Jenkins. tập tin. Bạn có muốn tạo một tệp mới không? ” bấm Có. Một Jenkinsfile tệp được tạo. Trong Jenkinsfile , hãy tạo một bước cấp cao nhất được gọi là “nút” trong đó nhãn “jenkins” giống với giá trị Nhãn được định cấu hình trong tác nhân Jenkins.
nútnode('jenkins') { }
Trong bước nút, hãy thêm các bước khác để cài đặt một cụm Kubernetes. Thêm các bước giai đoạn để cài đặt Kubernetes. Quy trình cài đặt Kubernetes được ghi lại đầy đủ và sẽ không được thảo luận lại. Để tham khảo, “Bắt đầu với Kubernetes trên Amazon Web Services (AWS)” thảo luận chi tiết về quy trình cài đặt. Các lệnh shell được chạy với “sh”. Đầu vào của người dùng cho các biến như số lượng công nhân và loại cá thể có thể được nhắc.
kube-aws init lệnh khởi tạo ngăn xếp CloudFormation có tên cụm được mã hóa cứng là “kubernetes-coreos-cluster” (tên tùy ý). --external-dns-name được đặt thành một tên miền, NOSQLSEARCH.COM , sẽ khác nhau đối với những người dùng khác nhau. Cặp khóa EC2 được đặt bằng --key-name tới kubernetes-coreos , được tạo trước đó. Khóa KMS được đặt thành KeyMetadata.Arn chuỗi được tạo trước đó với aws kms trong --kms-key lựa chọn. Jenkinsfile được tạo được liệt kê bên dưới:
node('jenkins') { stage 'set env' sh "sudo yum install gnupg2" sh "gpg2 --keyserver pgp.mit.edu --recv-key FC8A365E" sh "gpg2 --fingerprint FC8A365E" sh "wget https://github.com/coreos/coreos-kubernetes/releases/ download/v0.7.1/kube-aws-linux-amd64.tar.gz" sh "wget https://github.com/coreos/coreos-kubernetes/releases/ download/v0.7.1/kube-aws-linux-amd64.tar.gz.sig" sh "gpg2 --verify kube-aws-linux-amd64.tar.gz.sig kube-aws-linux- amd64.tar.gz" sh "tar zxvf kube-aws-linux-amd64.tar.gz" sh "sudo mv linux-amd64/kube-aws /usr/local/bin" sh "export AWS_ACCESS_KEY_ID=AKIAJGFCP4HUFH4453FA" sh "export AWS_SECRET_ACCESS_KEY=7BaiUETep3zPYrhrzKYpBdwkwVV16 BTT+pt2/EXF" sh "aws ec2 create-volume --availability-zone us-east-1c --size 10 --volume-type gp2" stage 'kube-aws init' deleteDir() sh "mkdir coreos-cluster" sh "cd coreos-cluster" sh "kube-aws init --cluster-name=kubernetes-coreos-cluster --external-dns-name=NOSQLSEARCH.COM --region=us-east-1 --availability-zone=us-east-1c --key-name=kubernetes-coreos --kms-key-arn='arn:aws:kms:us-east-1:672593526685:key/ f380f8b3-e93d-4a37-b87f-9ad1dbe909be '" stage "kube-aws render" WORKER_COUNT = input message: 'Number of Nodes', parameters: [[$class: 'StringParameterDefinition', defaultValue: '3', description: '', name: 'WORKER_COUNT']] INSTANCE_TYPE = input message: 'Instance Type', parameters: [[$class: 'StringParameterDefinition', defaultValue: 't2.micro', description: '', name: 'INSTANCE_TYPE']] sh "kube-aws render" sh "sed -i '''s/#workerCount: 1/workerCount: '''$WORKER_COUNT'''/''' cluster.yaml" sh "sed -i '''s/#workerInstanceType: m3.medium/workerInstanceType: '''$INSTANCE_TYPE'''/''' cluster.yaml" sh "kube-aws validate" stage "Archive CFN" step([$class: 'ArtifactArchiver', artifacts: 'cluster.yaml, stack-template.json,credentials/*,userdata/*', fingerprint: true]) stage "Deploy Cluster" shouldDeploy = input message: 'Should Deploy Cluster?', parameters: [[$class: 'ChoiceParameterDefinition', choices: 'yesno', description: '', name: 'Deploy']] if(shouldDeploy == "yes") { echo "Deploying Kubernetes cluster" sh "kube-aws up" sh "kube-aws status" step([$class: 'ArtifactArchiver', artifacts: 'kubeconfig', fingerprint: true]) } }
Tạo đường ống Jenkins
Trong Trang tổng quan Jenkins, nhấp vào tạo công việc mới để tạo một Đường ống Jenkins, như trong Hình 1.
Hình 1: Chọn “tạo công việc mới” để tạo công việc Jenkins
Trong giao diện người dùng, chỉ định tên đường dẫn ( install-kubernetes ), chẳng hạn và chọn Đường ống , như trong Hình 2. Nhấp vào OK.
Hình 2: Chọn Pipeline
Trình hướng dẫn cấu hình đường ống được bắt đầu, như thể hiện trong Hình 3.
Hình 3: Trình hướng dẫn cấu hình đường ống Jenkins
Chọn Đường ống chuyển hướng. Trong Định nghĩa , chọn Tập lệnh đường ống tùy chọn, như trong Hình 4.
Hình 4: Tab đường ống
Sao chép và dán tệp Jenkins được liệt kê trước đó. Nhấp vào Lưu , như trong Hình 5.
Hình 5: Định cấu hình tập lệnh đường ống
Một đường ống Jenkins mới được tạo (xem Hình 6).
Hình 6: Jenkins Pipeline đã được tạo
Ban đầu, đường dẫn không chạy và Trạng thái không nên liệt kê bất kỳ Bản dựng nào đang được khởi động hoặc đang chạy, như trong Hình 7.
Hình 7: Trạng thái đường ống của Jenkins
Kết luận
Trong bài viết này, chúng tôi đã cấu hình một Jenkinsfile và sử dụng Jenkinsfile để tạo một đường ống Jenkins. Trong phần 3 và phần kết về cách tự động cài đặt Kubernetes với Jenkins, chúng ta sẽ chạy đường ống Jenkins được tạo trong bài viết này để cài đặt Kubernetes. Sau đó, chúng tôi sẽ kiểm tra cụm Kubernetes đã cài đặt.