gitlab+jenkins+docker+k8s,CI/CD持续集成方案
配置私有库地址这个参数只能在docker.service或者daemon.json其中一个配置文件中。vim /usr/lib/systemd/system/docker.servicevim /etc/docker/daemon.json添加"insecure-registries":[“200.200.100.83”]中harbor主机设置的登录域名,这里的insecure参数如果是写在/us
此处不阐述gitlab jenkins k8s harbor 安装过程
jenkins和gitlab相互关联
jenkins:工具集成平台
gitlab: 软件管理平台
部署这两个服务的联动,需要经过ssh验证。
1、首先我们需要在gitlab上绑定jenkins服务器的ssh公钥,这里我们使用的是root用户的公私钥,切记生产环境是不允许随便用root的
(1)jenkins
[root@jenkins ~]# ssh-keygen -t rsa
//然后不输入只回车会生成一对公私钥
默认在/root/.ssh/目录里
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub
//查看公钥并复制
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMA4+je3NsxZrF2v8TPLXJp1ejwy1YokXipEFyGVNo5IbtkiBDwBLOAl5i7yromY8YGgoNNriE2g89IM/44BGC5UDCokQ69Ze9Ta9Kynv3/1PDFXIABJJG0f6LsUqt0nKFaFoGz3ZuYAnl6AzLpXEic8DBDrsFk+UGrxvMfSEqHlYO2b7jRXE1HGRnqI/IcVB190cLT1kmBKi7hSqUNBc1cY6t3a6gGiBpp9tc8PW4r/RcLblhAL1LKx8x37NOZkqox8IMh3eM/wtWwAVFlI8XU+sz9akzJOVmd1ArT5Q4w8WA/uVHCDUGVI/fli/ZRv+mNZyF3EH26runctb5LkCT root@jenkins
(2)gitlab
在这里放刚才拷贝的公钥保存就行了。
我们先在gitlab上创建一个代码仓库 点击 new project
输入一个仓库的名字,权限选择私有的(Private)然后直接点击创建
点击新建一个new.file
写入代码,起一个名字然后保存
创建好了,然后在本地测试一下是否可用
使用git clone git@youIP:guohs/tomcat.git
(3)自动构建
安装插件
先进入到之前查看插件的地方
系统设置----插件管理—可用插件—搜索安装需要的插件gitlab-oauth、gitlab-plugin、 windows-slaves、ruby-runt ime、gitlab-hook
(4)打开jenkins 点击新建
地址粘贴进去以后没有报错则没错
如有类似报错 是因为密钥认证关系
在gitlab的主机上生成ssh密钥对
[root@jenkins ~]# ssh-keygen -t rsa
//然后不输入只回车会生成一对公私钥
[root@jenkins ~]# cat /root/.ssh/id_rsa
//查看密钥并复制
下面的这个插件很重要,就是他实现自动化更新的webhook插件,安装过了就会有这条,然后点击这条下面出来的这些东西保持默认就行。同时注意复制
这个里面写的是jenkins构建时候会执行的shell脚本,这个是最重要的,就是他实现了下端kubernetes自动更新容器的操作。
#!/bin/bash
backupcode="/data/$JOB_NAME/$BUILD_NUMBER"
mkdir -p $backupcode #jenkins创建上述目录
chmod 644 "$JENKINS_HOME"/workspace/"$JOB_NAME"/*
rsync -acP "$JENKINS_HOME"/workspace/"$JOB_NAME"/* $backupcode #$JENKINS_HOME和$JOB_NAME同步最新消息
#ssh root@200.200.100.71 sed -i 's/v1/v2/g' /data/deploy.yaml #更改镜像版本
echo From tomcat/jdk:8 > "$JENKINS_HOME"/workspace/Dockerfile
echo COPY ./"$JOB_NAME"/* /usr/local/apache-tomcat-8.5.38/webapps/ >> "$JENKINS_HOME"/workspace/Dockerfile
docker rmi 200.200.100.83/web/tomcat:v1
docker build -t 200.200.100.83/web/tomcat:v1 /"$JENKINS_HOME"/workspace/.
docker push 200.200.100.83/web/tomcat:v1
为k8s集成项目
$JOB_NAME:项目名称
$BUILD_NUMBER:第几次构建
$JENKINS_HOME:jenkins的家目录
完事以后先别保存,首先复制一下上面的jenkins地址,然后去gitlab上绑定webhook
保存,登陆gitlab,点击下图这个设置
测试显示下图 的蓝条说明jenkins 已经连通了gitlab
好了,jenkins和gitlab 都已经互相的ssh通过了,然后我们最后需要做的一个ssh是关于jenkins
///注意,这里是从git和jenkins向master节点做免密登录。
配置私有库地址
这个参数只能在docker.service或者daemon.json其中一个配置文件中。
vim /usr/lib/systemd/system/docker.service
vim /etc/docker/daemon.json
添加"insecure-registries":[“200.200.100.83”]中harbor主机设置的登录域名,这里的insecure参数如果是写在/usr/lib/systemd/system/docker.service中,如上面harbor主机那样,那么就直接修改/usr/lib/systemd/system/docker.service中该项配置即可,
systemctl daemon-reload
systemctl restart docker
docker-compose start //启动harbor服务
创建secret文件
刚开始完k8s,总会遇到很多坑,因为是开源项目,版本总在更新,所以要时刻关注自己使用的版本有哪些不一样的命令和参数。
本次采坑是想让k8s可以在建立pod时可以到私库中拉取镜像。根据官网或网上资料,可以通过创建secret记录私库鉴权信息。具体做法如下:
首先在其中一个node上登录私有仓库(docker 访问私库的配置,这里不做描述)
docker login 200.200.100.83
登录成功后会在/root/.docker目录下生产config.json文件,然后执行如下命令:
cat /root/.docker/config.json | base64 -w 0
该命令会将你的认证信息通过base64编码,生成一个编码之后的字符串。
在kubernetes中的master节点中创建secret.yaml:
apiVersion: v1
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIyMDAuMjAwLjEwMC44MyI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZaM1Z2TkRJNSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTkuMDMuOCAobGludXgpIgoJfQp9
kind: Secret
metadata:
name: harbor-registry ##自定义名字后面Deployment中引用
type: kubernetes.io/dockerconfigjson
在kubernetes中的master节点创建secret:
kubectl create -f secret.yaml
查看secret是否创建:
kubectl get secret
之后在创建其他元素的时候指定:imagesPullSecrets即可。
例如:
pod:
apiVersion: v1
kind: Pod
metadata:
name: redis-test
containers:
name: redis-test
image: my.registry/redis
imagePullSecrets:
name: myregistrykey
至此是网上和官网提供的可以让k8s启动pod时访问私库的方法。
很多人也是可以使用,但由于k8s一直在更新版本,网上很多资料都是建立在旧版本基础上进行验证,在新版本中一些参数有变更。
本次采坑就是在于编辑secret元素时type和date参数有变动,从k8s 1.8之后,kubernetes.io/dockercfg就变成kubernetes.io/dockerconfigjson,相对应 .dockercfg也变成.dockerconfigjson,所以在使用k8s 1.8以后版本创建secret时,元素要变成如下:
data:
.dockerconfigjson : ewoJImF1dGhzIjogewoJCSJidXMuZ2EiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2WVdSdGFXNHhOVGszTlRNPSIKCQl9Cgl9Cn0=
type: kubernetes.io/dockerconfigjson
不然在创建完secret后,pod启动会报需要验证或者找不到镜像的错误,而无法正常使用镜像。
创建deployment文件
#vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: web
name: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
imagePullSecrets:
- name: harbor-registry ##此处引用上面secret创建的名字
containers:
- image: 200.200.100.83/web/tomcat:v1
imagePullPolicy: Always
name: web
kubectl apply -f deployment.yaml
创建svc文件
#vim deployment-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
name: web
name: web
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 31234
selector:
name: web
kubectl apply -f deployment-svc.yaml
部署Kubernetes 应用
部署应用的流程
1.编写代码
2.测试
3.编写 Dockerfile
4.构建打包 Docker 镜像
5.推送 Docker 镜像到仓库
6.编写 Kubernetes YAML 文件
7.更改 YAML 文件中 Docker 镜像 TAG
8.利用 kubectl 工具部署应用
更多推荐
所有评论(0)