在做 CD Pipeline 之前我們先測看看 deploy 的 command 是否可以使用。
cd deploy/kubernetes/ithome_crawler
helm upgrade ithome-crawler . --install --namespace {{ NAMESPACE }}\
--set schedule="50 20 * * *" \
--set env.mongo.host={{ MONGO_HOST }} \
--set env.mongo.db=ithome_ironman
這邊我們會在 kubernetes 起出一個 cronjob ,並在 "50 20 * * *"
時,會幫我們自動起出一個 Pod 執行爬蟲任務。
確認資料是否寫入 MongoDB
Jenkinsfile.CD
Deploy to k8s
時,會以 helm upgrade --install
更新在 k8s 上的 Cronjob 設定。pipeline{
agent {
label 'gcp-agent-1'
}
parameters {
string(name: 'IMAGE_TAG', defaultValue: 'latest')
string(name: 'K8S_CRONJOB')
}
environment {
K8S_NAMESPACE = "prod"
}
stages{
stage("Deploy to k8s"){
steps{
withCredentials([string(credentialsId: 'mongo-connection', variable: 'MONGO_HOST')]){
script{
sh """
helm upgrade ithome-crawler deploy/kubernetes/ithome_crawler --install --namespace ${K8S_NAMESPACE}\
--set schedule="${K8S_CRONJOB}" \
--set env.mongo.host="${MONGO_HOST}" \
--set env.mongo.db=ithome_ironman \
--set image.tag=${IMAGE_TAG}
"""
}
}
}
}
}
post{
always{
cleanWs()
}
}
}
在 CD pipeline 中,我們設定將 latest 的 image 指定為我們 Pod 啟動時的 image 檔案。
Jenkins pipeline 執行結果