系统环境说明
- GitLab Community Edition 11.9.8
- Jenkins ver. 2.190.3
- 仓库使用阿里的镜像仓库
- Kubernetes v1.14.2
gitlab和jenkins-master可以选择自建或者部署到k8s中,当前场景是部署在k8s集群之外;
镜像仓库可以选择使用harbor或者阿里镜像仓库,当前场景使用的是阿里的镜像仓库;
编译发布流程
流程很简单,提交代码到不同的分支,触发通知到jenkins,jenkins pipeline会根据Jenkinsfile文件中定义k8s环境,动态生成一个jenkins slave在不同k8s环境中构建镜像,推送镜像到仓库,然后在部署到对应k8s环境,部署结束后jenkins slave会自动终止
集成配置过程
因为都是现有的环境,所以部署过程就省略了,直接开始做集成配置;如果你是全新安装的Jenkins,选择安装推荐插件+kubernetes插件;现在假如插件都已经安装完成了,jenkins登陆默认账户admin,密码查看/var/jenkins_home/secrets/initialAdminPassword文件,下面开始配置
点击左侧系统管理,打开系统配置,我们这里要实现部署发布到2个k8s环境,所以我们配置两个云,先新增一个云
名称:随便填,后面Jenkinfile会用到
Kuberneters地址:填写apiserver地址
Kuberneters服务证书key:需要拿k8s的crt和key做格式转换,下面会介绍
Kubernetes 命名空间:填写jenkins slave要生成的命名空间,这个自己看着填吧
凭据:需要拿k8s的crt和key做格式转换,然后生成jenkins全局凭据
Jenkins地址:填写jenkins master地址,也就是当前jenkins地址
Jenkins通道:填写jenkins master与jenkins slave通信地址,jenkins通信端口默认是50000
配置第一个k8s相关信息,过程中会用到认证k8s apiserver的key和凭证,所以我们先获取下需要的key和凭证(在要配置的k8s master机器操作)
$ cat /root/.kube/config apiVersion: v1clusters:- cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFNU1EWXdOakV3TWpZd09Wb1hEVEk1TURZd016RXdNall3T1Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSlBSCmFnUlVKVytleDlKeTFZOXEzUVpNZk0wWnFJbkxjOE43RFVnZnM4TktlUVh2SUFCNkxxdjBSNFY4VUNnYnZ6dEMKVitxdElGNUM5bmE5VFQzT3hVNkUwQnVmWTcwTmJBZ2dPN0RTN1FvQVc3ZG5HUnBDTmNieWg5dytZYi9vbkNCdgo3M28vRi9scnhFZ01jNFhuYTR6OGhXbm5STmdjcVBSVnNyWGFiVSt6TStsbVZEaEpwWE96dnVmMmZRb3creGF4CndaWnVwUmF5VDBESHVHbmpaQnkrNnFwQVdZampqaE9WOUhGcTlQQUpMUXAzR2xZdklueFgxUkJscTYyVFdZMW8KcjIvTFBRTUhjOUV6VFlVN21Qb0laQ3dqa1dPTzZmc1NFVHpBTk9ad1NlSlBRSW5XV1NlQXlsWjA4V2tNWjdVcQpDNkZHVml1REFVbE1HczBMMlhzQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFc1I5T2VSRW45NXdSaTA2UnI2SVhUcDhJeHkKSytmdFJyM1pZckZ5VWZZYTBWdU9Mc1NZdzByN1o5Zmk0ZUFlMEk4dnR2cWpqWWl6RzFnUFAyS3V4d0h4RmtJRApMQnlNRmRTSG5yVEVZeWo2NVFnbUtCWVpEZ0VkMnZpVnBTeHM4Y3dCZXgvT201VnErZnROanAwK2swaGdhV2xxCjBDZmtkbjM0MkY2bUhSZFNyeGg3eURleGNtNEtGck5OVnNPY0h5MEJhQXhwZ0JOUmErMG5oZ1dDbHh1M0F4OWgKaVRELzAyczRCcWZKTFZjZXk0Q2VnWW8zUDVDYWVjTTZSaTg4TVFKYlZ1OWx6RVZPUzlBRGNKZ0VkWkdHUFUyVwpEcHBhZXdZNjhSVVg1MG9ObXN2S2h1RGNCSWxyeHJ4T2J4Wk1wYm5hYldUMlFaKzM4ampEaDNwVmxhcz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= server: https://192.168.0.54:6443 name: kubernetescontexts:- context: cluster: kubernetes user: kubernetes-admin name: kubernetes-admin@kubernetescurrent-context: kubernetes-admin@kuberneteskind: Configpreferences: {}users:- name: kubernetes-admin user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJSzZ