Ở bài trước thì chúng ta biết các làm sao để jenkins kết nối với k8s và create 1 jenkins slave rồi chạy 1 cmd đơn giản.
Hôm nay chúng ta sẽ học để genkins slave đó deploy được trên k8s
- Chúng ta có thể chổ động tạo deployment trên k8s nhớ jenkins.
- Deploy pod kaniko để build images trên k8s ko cần có Docker.
1) Config to connect between jenkins and kubernetes.
1.1) Kubenetes Cloud details
Phần trên show chơi thôi. Vì mình đã cài jenkins lên kubernetes bằng helm ==> jenkins kết nối với cluster k8s rồi. Bạn thấy mình ấn test connection ok rồi ý
Còn bạn mà cài riêng jenkins ko dính dáng gì tới k8s thì cần phải config chỗ này, thì bạn chỉ cần thêm url của k8s và kubeconfig là ok.
1.1.1) Config Pod Templates
Nếu bạn thấy nó có pod templates default tạo sẵn. thì bạn đừng edit nó lại để sài. Mình đã thử và khi run build thì jenkins master nó ko thấy pod trên k8s
Một bạn tạo mới không dính dáng với nó nhé.
1.2) Demo
1.2.1 Overview
anh/em để ý là agent label thì điền theo ảnh ở trên
pipeline {
agent { label 'jenkins-k8s-agent' }
stages {
stage('Checkout Source') {
steps {
git url:'https://github.com/mrnim94/jenkins-k8s.git', branch:'main'
}
}
}
}
GIờ bạn ấn build và quan sát
1.2.2) execute command to a particular container(update web 10 Nov 2021)
Ở trong phần này mình sẽ chạy container maven
mình gặp lỗi là no default execute container jnlp(jenkins-agent)
Vấn để nằm ở đây:
pipeline{
agent{
label 'docker-maven'
}
stages{
stage("Build"){
steps{
// specify container to run command
container('maven') {
script{
execMaven "--help"
execMaven()
}
}
}
}
}
}
Chúng ta cần phải chỉ định sẽ run comand trên container nào
2) Reference materials
video người việt:
https://ms-my.facebook.com/tel4vn/videos/241215461380695/
Video người nước ngoài, họ có làm thêm phần deploy workload lên k8s bằng jenkins luôn.
https://www.youtube.com/watch?v=V4kYbHlQYHg&list=PL34sAs7_26wOuDEArkiGHjWtitsLsxGCL
Chỗ này cần chú ý label để tý mình sẽ cần khai bao bên Jenkins file
Chúng ta gọi agent có label là kubepod
Ở đây chúng ta sẽ cần chú ý mykubeconfig này sẽ ko phải là credential mà chúng ta tạo bằng secret file(lúc chúng ta kết nối để tạo slave đâu nhé).
Nếu bạn không tìm thấy tuỳ chọn như hình thì cần cài thêm plugin.
Chúng ta sẽ lấy nội dung của kubeconfig của master cho dễ nhé.
Giờ ấn build và kiểm tra thôi:
Jenkins sẽ deploy slave pod jenkins trên k8s trước:
Sau khi deploy thành công thì jenkín slave pod sẽ bị xoá và chỉ còn nginx thôi.