本节介绍持续集成、持续部署的步骤及过程,主要讲解Jenkins对应的插件安装、任务(Job)的配置方式和一些基本配置的使用。

一、基本概念

在Kubernetes中使用CI/CD,一般的步骤为:

(1)在GitLab创建对应的项目。

(2)开发者将代码提交到GitLab。

(3)Jenkins创建对应的任务(Job),集成该项目的Git地址和Kubernetes集群。

(4)如有配置钩子,推送(Push)代码会自动触发Jenkins构建,如没有配置钩子,需要手动构建。

(5)Jenkins控制Kubernetes(使用的是Kubernetes插件)创建Jenkins Slave。

(6)Jenkins Slave根据流水线(Pipeline)定义的步骤执行构建。

(7)通过Dockerfile生成镜像。

(8)将镜像提送(Push)到私有Harbor。

(9)Jenkins再次控制Kubernetes进行最新的镜像部署。

上面所述为一般步骤,中间还可能会涉及自动化测试等步骤,可自行根据业务场景添加。上面流水线步骤一般写在Jenkinsfile中,Jenkins会自动读取该文件,同时Jenkinsfile和Dockerfile可一并和代码放置于GitLab中,或者单独配置。

二、基本配置

首先进行持久化安装Jenkins,请见3.6节的内容,然后执行以下步骤。

1. Kubernetes插件安装

因为使用流水线(Pipeline)进行编译构建,所以只需要安装Kubernetes Plugin插件即可。

安装步骤:

首页→系统管理→管理插件→可选插件→Kubernetes plugin 安装。

2. Jenkins Kubernetes配置

首先需要在Jenkins配置Kubernetes,单击“系统管理”选项,如图4-1所示。




gitlab打包hbuilder gitlab 部署代码_docker


图4-1 配置Kubernetes

单击页面中的“系统设置”选项,在“系统设置”页面的最下面,用鼠标单击“新增一个云”按钮,然后填写Kubernetes的相关信息,如图4-2所示。


gitlab打包hbuilder gitlab 部署代码_gitlab打包hbuilder_02


图4-2 Kubernetes基本配置

由于使用的是Pipeline进行构建,构建过程中会使用Jenkinsfile中指定的容器进行构建,所以上述配置无须填写过多内容,只需要将/root/.kube/config 挂载到Jenkins Master的相应目录下即可。可以通过Secret挂载,挂载步骤参考2.2.10节。

挂载config文件后,单击Test Connection即可连接,如图4-3所示。


gitlab打包hbuilder gitlab 部署代码_docker_03


图4-3 Kubernetes链接测试

三、新建任务(Job)

打开Jenkins的首页,单击“新建任务”选项,如图4-4所示。


gitlab打包hbuilder gitlab 部署代码_docker_04


图4-4 新建任务

填写任务的基本信息,如图4-5所示。


gitlab打包hbuilder gitlab 部署代码_基本配置_05


在任务页面上配置GitLab的项目地址,如图4-6所示。

选择Pipeline脚本,在这里使用的是名称为Jenkinsfile的Jenkinsfile,可以自定义名字和路径,当前为项目的根路径,如图4-7所示。


gitlab打包hbuilder gitlab 部署代码_gitlab提交代码步骤_06


图4-7 选择Pipeline脚本

所有的项目均按照此步骤配置即可,创建完成后单击构建按钮,就会按照Jenkinsfile的步骤进行构建。下面一节(4.6节)将演示具体的构建方法。

四、Jenkins凭据的使用

在生产环境中,代码仓库或者镜像仓库都必须设置账户密码或密钥进行认证才能访问,此时可以使用Jenkins配置凭据,之后就可以在Jenkinsfile中引用镜像仓库的凭据了。同样,在任务(Job)配置中也可以选择代码仓库的Key。

配置凭据,如图4-8所示。

填写凭据变量,如图4-9所示。

保存后,单击“添加凭据”选项,如图4-10所示。


gitlab打包hbuilder gitlab 部署代码_gitlab提交代码步骤_07


此时,创建了访问Harbor的账户密码,GitLab的密钥配置类似。

然后,可以在Jenkinsfile中引用该凭据,比如:

stage('Create Docker images') { container('docker') { withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'HARBOR_USER', usernameVariable: 'HARBOR_USER', passwordVariable: 'HARBOR_PASSWORD']]) { sh """ echo '$HARBOR_USER $HARBOR_PASSWORD' docker login -u ${HARBOR_USER} -p ${HARBOR_PASSWORD} harbor.xxx.net docker build -t harbor.xxx.net/K8S/test:${gitCommit} . docker push harbor.xxx.net/K8S/test:${gitCommit} """ } } }

credentialsId: 'HARBOR_USER'为上述创建的ID。


gitlab打包hbuilder gitlab 部署代码_基本配置_08