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 

//然后不输入只回车会生成一对公私钥
默认在/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 工具部署应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值