Jenkins+Gitlab+K8S
代码自动集成和发布
北京元鼎时代科技股份有限公司
2018-10-30
目 录
2.4
2.3
2.1
2.2
规划 ............................................................................................... 1
1.1 总体实验流程 ................................................................................. 1
1.2 实验环境 ........................................................................................ 2
1.3 本地程序代码说明 ......................................................................... 3
基础环境安装 ................................................................................ 4
Docker 及 K8s 集群安装 ................................................................ 4
Docker Registry 安装 ..................................................................... 4
2.2.1 【方式一】安装私有镜像仓库(无密码,免登陆) ................. 4
2.2.2 【方式二】安装私有镜像仓库(有密码,需验证) ................. 5
Jenkins 安装 .................................................................................. 9
2.3.1 执行安装 ................................................................................. 9
2.3.2 Jenkins 初始化 ........................................................................ 9
2.3.3 安装插件 ............................................................................... 13
Gitlab 安装 ................................................................................... 14
2.4.1 执行安装 ............................................................................... 14
2.4.2 gitlab 初始化 .......................................................................... 14
2.4.3 Gitlab 中创建项目 .................................................................. 18
2.4.4 Git 客户端配置 ...................................................................... 21
2.4.5 确认 gitlab 代码仓库中的内容 ................................................ 26
3 Jenkins 配置流水线 ................................................................................. 27
3.1 方案总览 ...................................................................................... 27
3.2 全局配置 ...................................................................................... 27
3.2.1 配置到 gitlab 代码仓库的连接 ................................................ 27
3.2.2 配置到 k8s-master 操作系统的 ssh 连接 ............................... 28
3.2.3 配置 webhook ....................................................................... 29
3.3 配置代码同步流水线 .................................................................... 32
3.3.1 新建任务 ............................................................................... 32
3.3.2 配置 gitlab 代码仓库 .............................................................. 32
3.3.3 构建触发器 ............................................................................ 34
3.3.4 Gitlab 中配置 webhook .......................................................... 34
3.3.5 配置构建环境 ........................................................................ 36
3.3.6 【方式一】同步代码到 k8s 集群中 ........................................ 37
1
2
3.3.7 【方式二】将代码打包到镜像中 ............................................ 43
3.4 触发自动构建任务 ....................................................................... 48
其他说明 ...................................................................................... 49
4
1 规划
1.1 总体实验流程
个人电脑作为程序源代码的开发机,开发一个网站程序,当代码提交到 gitl
ab 代码库之后,可以通过 jenkins 自动识别到代码的变化,将代码同步到 k8s 集
群中,并利用 nginx 镜像,在一个容器中运行起来。
提交代码
开发人员在开发机上开发代码后提交到 gitlab 代码库;
运维人员运行该代码所需的环境配置文件(镜像配置-Dockerfile、K8S 资源配
置-YAML)提交到 gitlab 代码库;
代码构建
Gitlab 通过 webhook 插件触发 jenkins 进行代码的构建,可以将 gitlab 代码仓
库中的代码同步到 jenkins 的工作目录中;
http://www.yuandingit.com 第 1页 /共 49 页 7x24 小时服务热线:400-007-0628
根据 Dockerfile 配置,将程序代码打包到 docker 镜像中(也有可能这些代码不
需要打包到镜像中,只要容器运行时使用到即可),之后将 docker 镜像传到 d
ocker 镜像仓库中;
Jenkins 同时可以将 yaml 文件中使用的镜像等变量替换成本次构建时的实际
值;
代码发布
Jenkins 可以将代码同步到 k8s 集群中的指定目录中;
之后在 k8s 集群中根据 yaml 文件,进行相关的资源的创建,从私有镜像仓库
拉取镜像,启动容器,实现代码的发布运行。
1.2 实验环境
实验环境为 google 云上的一个 k8s 集群
序号
集群节点
IP 地址
用途
1
k8s-master
外部:35.231.203.253
K8s 集群的 Master 节点,同时运
内部:10.142.0.2
行本地镜像仓库、jenkins、gitlab
K8s-node1
K8s-node2
10.142.0.3
10.142.0.5
/nfs 目录为 nfs 服务
挂载来自 k8s-master 的/nfs 目录
挂载来自 k8s-master 的/nfs 目录
2
3
序号
程序
IP 地址
用途
1
2
3
k8s 集群
Jenkins
35.231.203.253:6443
K8s 集群的 Master 节点
35.231.203.253:32080
以 docker 方式运行的 jenkins
Docker registry
10.142.0.2:5000
以 docker 方式运行的镜像仓库
http://www.yuandingit.com 第 2页 /共 49 页 7x24 小时服务热线:400-007-0628
4
Gitlab
35.231.203.253:32480
以 docker 方式运行的代码仓库
10.142.0.2:32480
1.3 本地程序代码说明
本次实验的本地项目 myweb 是一个简单的网站程序,可以使用 nginx 运行,
具体结构如下:
其中 src 目录中是网站的代码程序,dockerfile 是存放建立镜像的 Dockerfil
e,yaml 中是 k8s 资源的文件。具体文件内容后续进行说明。
http://www.yuandingit.com 第 3页 /共 49 页 7x24 小时服务热线:400-007-0628
2 基础环境安装
2.1 Docker 及 K8s 集群安装
Docker 及 K8S 集群安装方式略。
2.2 Docker Registry 安装
私有镜像仓库有两种形式,一种是无密码、免登录的,属于不安全的镜像仓
库,另外一种是有安全验证措施的,属于安全的镜像仓库。下面分别进行介绍。
2.2.1 【方式一】安装私有镜像仓库(无密码,免登陆)
2.2.1.1 安装镜像仓库服务器端
在 k8s-master 上安装私有的 docker 镜像仓库,挂载/nfs/docker_registry 目
录给镜像仓库,该镜像仓库没有设置登录密码,可以直接使用:
# mkdir -p /nfs/docker_registry
# docker run -d -p 5000:5000 -v /nfs/docker_registry:/var/lib/registry --restart=always --privileged
=true --name local_registry registry
2.2.1.2 docker 客户端将仓库加入不安全镜像仓库列表
由于本次实验中没有为镜像仓库设置登录密码及其他安全验证方式,且使用
的是 http 协议,因此在其他服务器使用该私有镜像仓库时,需要调整 docker 的
配置参数,将私有仓库的地址加入到不安全仓库列表中,之后可以直接使用该镜
像仓库中的镜像,具体方法如下:
修改 /etc/docker/daemon.json 文件,加入一行 "insecure-registries": ["10.142.0.2:5000"]
如果该文件中已经有其他的内容,在文件末尾的“}”之前加入这一行,同时上一行的行尾要加上分号“;”。
# cat /etc/docker/daemon.json
{
"insecure-registries": ["192.168.50.120:5000"]
http://www.yuandingit.com 第 4页 /共 49 页 7x24 小时服务热线:400-007-0628
}
重启 docker 进程
# systemctl daemon-reload
# systemctl restart docker
2.2.1.3 访问私有镜像仓库
这种无验证的镜像仓库,可以直接访问,采用此方式时,私有镜像仓库的访
问地址为:10.142.0.2:5000
之后将镜像上传到私有镜像仓库的步骤如下:
为镜像打 tag
# docker tag image_name:version 10.142.0.2:5000/image_name:version
将镜像上传到私有镜像仓库
# docker push 10.142.0.2:5000/image_name:version
2.2.2 【方式二】安装私有镜像仓库(有密码,需验证)
2.2.2.1 安装镜像仓库服务器端
在 k8s-master 上安装私有的 docker 镜像仓库,挂载/nfs/docker_registry 目
录给镜像仓库,该镜像仓库设置有登录密码:
如果创建了签名证书,且启动 docker registry 时需要用证书验证,那么需
要将镜像仓库的域名 local-registry 进行解析,且要将 registry.crt 证书放到/etc/d
ocker/certs.d/local-registry:5000/目录下。且登录时必须使用域名登录。
http://www.yuandingit.com 第 5页 /共 49 页 7x24 小时服务热线:400-007-0628