gitlab+jenkins+docker+k8s,CI/CD持续集成方案

此处不阐述gitlab jenkins k8s harbor 安装过程

jenkins和gitlab相互关联
jenkins:工具集成平台
gitlab: 软件管理平台

部署这两个服务的联动,需要经过ssh验证。

1、首先我们需要在gitlab上绑定jenkins服务器的ssh公钥,这里我们使用的是root用户的公私钥,切记生产环境是不允许随便用root的

(1)jenkins
[root@jenkins ~]# ssh-keygen -t rsa 
1
//然后不输入只回车会生成一对公私钥
默认在/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
1
2
3
(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   
//查看密钥并复制
1
2
3
4

下面的这个插件很重要,就是他实现自动化更新的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

1
2
3
4
5
6
7
8
9
10
11
12

为k8s集成项目

$JOB_NAME:项目名称

$BUILD_NUMBER:第几次构建

$JENKINS_HOME:jenkins的家目录
1
2
3
4
5
完事以后先别保存,首先复制一下上面的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
1


 vim /etc/docker/daemon.json
1


添加"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服务
1
2
3
创建secret文件
刚开始完k8s,总会遇到很多坑,因为是开源项目,版本总在更新,所以要时刻关注自己使用的版本有哪些不一样的命令和参数。
本次采坑是想让k8s可以在建立pod时可以到私库中拉取镜像。根据官网或网上资料,可以通过创建secret记录私库鉴权信息。具体做法如下:
首先在其中一个node上登录私有仓库(docker 访问私库的配置,这里不做描述)

docker login 200.200.100.83
1
登录成功后会在/root/.docker目录下生产config.json文件,然后执行如下命令:

cat /root/.docker/config.json | base64 -w 0
1
该命令会将你的认证信息通过base64编码,生成一个编码之后的字符串。

在kubernetes中的master节点中创建secret.yaml:

apiVersion: v1
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIyMDAuMjAwLjEwMC44MyI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZaM1Z2TkRJNSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTkuMDMuOCAobGludXgpIgoJfQp9
kind: Secret
metadata:
  name: harbor-registry  ##自定义名字后面Deployment中引用
type: kubernetes.io/dockerconfigjson
1
2
3
4
5
6
7
8
9
在kubernetes中的master节点创建secret:

kubectl create -f secret.yaml
1
查看secret是否创建:

kubectl get secret
1
之后在创建其他元素的时候指定:imagesPullSecrets即可。
例如:

pod:
apiVersion: v1
kind: Pod
metadata:
name: redis-test
containers:

name: redis-test
image: my.registry/redis
imagePullSecrets:
name: myregistrykey
1
2
3
4
5
6
7
8
9
10
11
至此是网上和官网提供的可以让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
1
2
3
不然在创建完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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
kubectl apply -f deployment.yaml
1

创建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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
kubectl apply -f deployment-svc.yaml
1


部署Kubernetes 应用
部署应用的流程

1.编写代码
2.测试
3.编写 Dockerfile
4.构建打包 Docker 镜像
5.推送 Docker 镜像到仓库
6.编写 Kubernetes YAML 文件
7.更改 YAML 文件中 Docker 镜像 TAG
8.利用 kubectl 工具部署应用
————————————————
版权声明:本文为CSDN博主「我们的暧昧终究不是爱情」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42378237/article/details/106277574

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值