说明
持续集成系统包括CI和CD。在这篇文章里,我们只讨论CI的实现。关于K8S,Jenkins,私有仓库的安装这里不进行说明,只讲解如何将这些工具组合在一起。
1.拥有一个K8S集群
我的环境是6台虚拟机,3台Master,3台Slaver。如下图所示
运行结果如下图:
2.Jenkins中安装好了kubernetes插件
安装好之后,在系统设置中,能够添加kubernetes信息
3.根据Jenkins的配置要求,去自己的K8S平台上找到对应的信息。填入Jenkins中
我们根据图中的要求,可以在K8S里进行一个个的查找我们想要的信息
字段 |
查找方法 |
Kubernetes 地址 |
IP地址是在keepalived里配置的虚拟IP 在搭建k8S平台时,用到了haproxy,当时指向了**443端口 |
kubernetes名称 | 随意填写 |
kubernetes命名空间 | 需要在K8S里创建一个命名空间,然后在这个地方使用 |
凭据 |
1.进入K8S机器上,输入命令kubectl config view --minify --flatten查看凭据 2.把凭据信息复制成一个文件 3.在Jenkins里上传这个文件 4.这个凭据信息即可在Jenkins配置里使用 |
JENKINS地址 | 配置本次使用的Jenkins的url即可 |
Pod Retention | 选择Never,Jenkins任务完成后就删除pod |
4.添加私有密钥用于拉取我们的docker私有镜像
在K8S里输入如下命令
kubectl create secret docker-registry repo-k8s \ -n k8s-jx \ --docker-server='repo.local:5000' \ --docker-username='zhenwei.li' \ --docker-password='*******' \ --docker-email='357244849@qq.com'
5.在Jenkins里编写一个最简单的流水线任务。来测试Jenkins是否可以拉起K8S的节点,产生pod
5.1.从github上抄一段代码示例下来https://github.com/jenkinsci/kubernetes-plugin/blob/master/src/test/resources/org/csanchez/jenkins/plugins/kubernetes/pipeline/jnlpWorkingDir.groovy
podTemplate(label:'jnlp-slave',cloud: 'kubernetes',containers: [ containerTemplate(name: 'busybox', image: 'nginx:latest', ttyEnabled: true) ],imagePullSecrets:['secret/repok8s']) { node ('jnlp-slave') { stage('Run') { sh 'env | sort' container('busybox') { sh 'echo "hello"' sh 'pwd' sh 'ls' } } } }
5.2创建一个流水线任务
5.3运行这个流水线任务,查看结果
5.4在K8S上输入查找pod的命令,应该会发现有一个pod被运行起来了,名字中含有jnlp-slave的字样,2/2运行两个容器,一个是jnlp容器,一个是busybox容器
kubectl get pods --all-namespaces -o wide
6.在代码仓库中添加CI所需要的Jenkinsfile和BuildPod.yaml等流水线文件
文件名 |
用处 |
sonar-project.properties | 定义代码需要执行什么语言的扫描,哪些目录需要剔除 |
JenkinsfileTag | 定义打tag操作对应的流水线行为 |
Jenkinsfile | 定义代码提交与合并的流水线行为 |
BuildPod.yaml | K8S产生的pod中,包含哪些容器,容器的环境变量等参数设置 |
7.BuildPod.yaml中需要包含哪些内容(以nodejs代码举例)
8.Jenkinsfile中需要包含哪些内容
最后在Jenkins里查看运行效果