jenkins-cicd on kubernetes

Posted by     "李森" on Friday, September 21, 2018

TOC

kubernetes ci/cd 开源实现有很多,传统的有霸主jenkins、后起之秀drone、Spinnaker、gitlab-ci以及jenkins-kubernetes衍生版jenkins X等;不可否认后起之秀们有性能优势、云原生跟kubernetes结合很好,他们都能很好的完成ci/cd的工作,但论产品的功能性、成熟度、稳定性包括生态跟jenkins比不是一个级别,ci/cd 是企业devops的关键一环,它还应该包括代码质量管理(sonar)、codereview以及相关的自动化测试环节,综合下来后起之秀们目前还是小玩具而已,jenkins在Pipeline加持下依然是不二之选。

  1. 先说下我这里的技术栈dubbo+springboot,nexus gradle编译打包,大家可以根据自己的实际情况进行适当修改即可。
  2. 在代码库中增加一个Jenkinsfile 结合BlueOcean插件实现,dev、test环境会定时扫描然后直接部署,master会有一个确认步骤,同意后才能进行发布。
  3. 此次部署有持久化存储需求,请自行解决,或参考我之前的ceph文档。

部署jenkins slave

git clone https://github.com/li-sen/jenkins-cicd-on-kubernetes.git
cd jenkins-cicd-on-kubernetes

1. 创建namespace
kubectl create -f ns.yaml

2. 创建ceph-key
kubectl create secret generic ceph-storageclass-secret --type="kubernetes.io/rbd" --from-literal=key='AQWCBc1xBzNNWJVcfyCrhWDA==' --namespace=kube-ops

3. 创建sa
kubectl create -f jenkins-rbac.yaml

4. 创建statefulset
kubectl create -f jenkins-statefulset.yaml

5. 创建svc
kubectl create -f jenkins-svc.yaml

6. 安装jenkins
# 获取初始密码
kubectl exec -it jenkins-0 /bin/bash -n kube-ops
jenkins@jenkins-0:/$ cat /var/jenkins_home/secrets/initialAdminPassword
# 后续步骤跟传统安装一样,按推荐下一步就行(插件安装也按默认推荐),这里省略了。
  1. Jenkins URL需要设置为: http://jenkins.kube-ops.svc.cluster.local:8080/ 不然slave pod 无法连接master
  2. 插件的需另外安装Blue Ocean、kubernetes 两个插件 这里我就不截图了。

生成证书