云原生之旅 - 11)基于 Kubernetes 动态伸缩 Jenkins Build Agents( 三 )

Pipeline: Input Step这个例子是利用 Jenkins pipeline的 Input step 来做一个人工介入Approve的步骤 。然后再来一个多cluster 部署,选不同region 部署到不同的cluster的示例 。stage('Wait for SRE Approval') {steps {timeout(time:72, unit:'HOURS') {input message: "Approved Prod deployment?", submitter: 'sre-team'}}}// deployment to multipe k8s clustersstage('Deploy to GKE Prod cluster') {environment{PROJECT_ID = 'sre-cn-dev'CREDENTIALS_ID = 'gcp_sa_json_key'CLUSTER_COMMON_NAME = 'demo-gke-prod'}steps {script {env.REGION = input message: 'Choose which region you want to deploy?',parameters: [choice(name: 'Region',description: 'Select Region to Deloy',choices: ['europe-west1', 'us-central1'])]dir(dir_path) {if ( env.REGION == "europe-west1" ) {def eu_cluster_name = env.CLUSTER_COMMON_NAME + "-eu"container('kubectl-kustomize') {sh "echo deploy to cluster $eu_cluster_name in region: $REGION"}}if ( env.REGION == "us-central1" ) {def us_cluster_name = env.CLUSTER_COMMON_NAME + "-us"container('kubectl-kustomize') {sh "echo deploy to cluster $us_cluster_name in region: $REGION"}}}}}}所有例子均在我的 github repo 。
### 本文首发于博客园 https://www.cnblogs.com/wade-xu/p/16863955.html
测试现在你可以创建一个 Pipeline 或者 Multibranch Pipeline job 来测试 。Repository URL = `https://github.com/wadexu007/learning_by_doing`Script Path, e.g. `Jenkins/k8s_pod_as_build_agent/demo-app-java/Jenkinsfile` 你会看到每启动一个job 都会相应的产生一个pod 来作为Jenkins agent运行,结束后根据idleMinutes自动释放 。  

云原生之旅 - 11)基于 Kubernetes 动态伸缩 Jenkins Build Agents

文章插图
总结如果你已经成功创建并测试 CI/CD pipeline,可以继续加强,比如加上 Post notifications 最佳实践
  • 设置 resource requests and limits on each container in your Pod
  • 如果使用maven 构建 java项目,.m2 cache目录需要 mount 出来,这样加快后面的maven build速度 。
  • 使用 Jenkins Shared Libraries 抽取Pipeline的共用代码
  • 在容器里构建容器化应用(Run docker in docker) 我的例子是通过 mount docker.sock 利用k8s 主机 docker engine来实现的,这种方式需要 privileges mode 不安全,推荐使用Kaniko,下一篇文章会介绍 。
感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以打赏和推荐,您的鼓励是我创作的动力 。 

经验总结扩展阅读