一、前言
-
DevOps是一种将开发(Development)和运维(Operations)相结合的软件开发方法论。它通过自动化和持续交付的方式,将软件开发、测试和部署等环节紧密集成,以提高效率和产品质量。在本篇博客中,我们将介绍如何使用GitLab、Jenkins和Kubernetes(k8s)来构建一个完整的CI/CD解决方案。
-
DevOps通过打破开发和运维之间的壁垒,促进了更紧密的合作和快速响应变化的能力。它强调团队间的协作、自动化和持续改进。通过引入DevOps实践,组织可以更快地交付软件,并确保高质量的发布。
-
CI/CD代表持续集成(Continuous Integration)和持续交付(Continuous Delivery)。持续集成是指团队成员将其工作频繁地集成到共享存储库中,并进行自动化构建和测试,以减少集成问题。持续交付是指将应用程序更频繁地交付给用户,以便快速获得反馈并提供新功能。本次使用的CI/CD工具为Jenkins。
二、系统环境
|-----------------------|-----------|---------|--------|
| 服务器版本 | docker 版本 | k8s 版本 | cpu 架构 |
| CentOS Linux 7 (Core) | 26.1.4 | v1.26.6 | x86_64 |
CI/CD 架构图:

CI/CD 架构图描述:
-
程序员写好代码之后,向gitlab代码仓库提交代码,gitlab检测到变化之后,触发CI/CD服务器Jenkins,CI/CD服务器
-
Jenkins构建镜像,镜像构建好之后推送到registry镜像仓库,最后使用新的镜像在Kubernetes(k8s)环境部署。
服务器分配:
|--------------------------------------------------|-----------------------|--------|-----------------------------------------------------------------------------------------------------|
| 服务器 | 操作系统版本 | cpu架构 | 进程 |
| 10.0.41.250 | CentOS Linux 7 (Core) | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico |
| 10.0.41.251 | CentOS Linux 7 (Core) | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico |
| 10.0.41.252 | CentOS Linux 7 (Core) | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico |
| 10.0.41.253 | CentOS Linux 7 (Core) | x86_64 | docker,jenkins, registry,gitlab,Git |
| 10.0.41.254 | CentOS Linux 7 (Core) | x86_64 | |
三、使用 registry 搭建镜像仓库
10.0.41.253:
# 拉取镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/registry:latest
# 创建registry容器,registry镜像生成容器作为私有仓库,-p 5000:5000做端口映射,物理机端口5000:容器端口5000,
# -v /myregistry:/var/lib/registry数据卷挂载,物理机目录/myregistry:容器目录/var/lib/registry
docker run -d --name registry -p 5000:5000 --restart=always -v /myregistry:/var/lib/registry swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/registry:latest

-
现在 /myregistry/ 还没有任何东西,因为还没有镜像推送到 registry 仓库
-
下面是流水线搭建好,有镜像推送后,产生的镜像目录和镜像tag目录


四、配置 docker 参数
集群内所有节点操作
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://oi87dmig.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://registry.docker-cn.com"],
"insecure-registries":["10.0.41.253:5000"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
vim /usr/lib/systemd/system/docker.service
...
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
...
systemctl daemon-reload
systemctl restart docker

五、安装 gitlab 代码仓库
# 拉取镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.4.1-ce.0
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.4.1-ce.0 docker.io/gitlab/gitlab-ce:17.4.1-ce.0
# 创建 gitlab 配置文件目录,日志目录,代码目录,授予777权限
mkdir -p /data/gitlab/etc /data/gitlab/log /data/gitlab/data
chmod 777 /data/gitlab/etc /data/gitlab/log /data/gitlab/data
# 启动容器
docker run -dit --name=gitlab --restart=always -p 8443:443 -p 80:80 -p 222:22 -v /data/gitlab/etc:/etc/gitlab -v /data/gitlab/log:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab --privileged=true gitlab/gitlab-ce:17.4.1-ce.0
# 创建gitlab容器,使用--privileged=true参数,使container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。--privileged=true启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
# -v指定数据卷,gitlab容器的配置文件,日志文件,数据文件也都存储到了物理机上,我们修改对应数据卷的内容,gitlab容器的相关内容也随之改变。-p指定端口映射。
# 查看 gitlab 容器
[root@milvus-04 ~]# docker ps | grep gitlab
fb0f281e76ab gitlab/gitlab-ce:17.4.1-ce.0 "/assets/wrapper" 22 hours ago Up 7 hours (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:222->22/tcp, 0.0.0.0:8443->443/tcp gitlab
六、修改 gitlab 容器的配置文件
-
注意先让gitlab容器运行一段时间,让其数据进行初始化,然后再停止gitlab容器,修改配置文件
docker stop gitlab
-
下面开始修改 gitlab 的配置文件
-
修改/data/gitlab/etc/gitlab.rb,external_url指的是gitlab所在的机器IP,gitlab_ssh_host指定gitlab所在的机器IP,gitlab_shell_ssh_port指定ssh端口,因为我们把gitlab容器的22端口映射为了222,所以gitlab_shell_ssh_port为222
vim /data/gitlab/etc/gitlab.rb
gitlab_rails['gitlab_shell_ssh_port'] = 222
external_url 'http://10.0.41.253'
gitlab_rails['gitlab_ssh_host'] = '10.0.41.253' -
修改/data/gitlab/data/gitlab-rails/etc/gitlab.yml,host指定gitlab所在的机器IP,端口为80,不使用https
vim /data/gitlab/data/gitlab-rails/etc/gitlab.yml
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: 10.0.41.253
port: 80
https: false -
启动 gitlab 容器
systemctl start gitlab
-
访问 gitlab web 界面
-
浏览器访问gitlab所在机器的IP地址和80端口,即可访问gitlab web界面
-
访问gitlab界面http://10.0.41.253,gitlab登录界面如下

-
新版的 gitlab , 在安装完启动 GitLab 后,应该就可以在网页上访问到 GitLab 的登录界面了,不过 GitLab 已事先创建了一个账号了,这个账号就是管理员账号。即便是注册新 GitLab 账号,也需要登录管理员账号进行审批
-
这个管理员账号的账号名为 root,而密码在一个自动生成的文件 /etc/gitlab/initial_root_password 中(密码不会含空格),且会在 24 小时后自动被删除
[root@milvus-04 ~]# find / -name initial_root_password
/home/gitlab/etc/initial_root_password
/data/gitlab/etc/initial_root_password
[root@milvus-04 ~]# cat /data/gitlab/etc/initial_root_passwordWARNING: This value is valid only in the following conditions
1. If provided manually (either via
GITLAB_ROOT_PASSWORD
environment variable or viagitlab_rails['initial_root_password']
setting ingitlab.rb
, it was provided before database was seeded for the first time (usually, the first reconfigure run).2. Password hasn't been changed manually, either via UI or via command line.
If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
Password: 4A3dXlNq5pZebrMBqkdBk1xdP3i+1UsjrleAHm9Tw7Q=
NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
所以,账号密码为:root/4A3dXlNq5pZebrMBqkdBk1xdP3i+1UsjrleAHm9Tw7Q=
七、使用 gitlab
- 登录gitlab之后,首页如下

- 点击创建一个项目, 设置项目名称为:my-project,项目描述(可选),可见等级设置为公开

- 选择SSH的方式拉取和推送代码,点击新建SSH公钥,否则无法通过SSH拉取和推送代码

-
现在回到 gitlab 服务器,复制公钥信息到 gitlab 的密钥里
如果有公钥则直接复制,没有要创建
生成密钥,-N ""表示提供一个新密语,密语为空
ssh-keygen -N ""
查看生成的密钥,id_rsa是私钥 ,id_rsa.pub是公钥
ls ~/.ssh/
查看公钥,并复制公钥信息到Gitlab的密钥里
[root@milvus-04 ~]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1Vdzn50NtP5dBHzCUSSU/YpC3+GOt3k5i3Gw5jmI36HQYLy3tCjWLzzI0+A82iSP6gnmCh6lpmy59Px7+u1VOmNb8qC32OND9J0Deni8tmkURcaiR85HtAoKpFBXZ8vzUEi9Nmj+6Ju550s94n7pBuGTa6a12VYkdHdMFWCXdWQdpU92r1SlT9DTkM4HFIpiJFll7rLvKUoQsM7b85q/rJyJkdKjmYwL+9FdLTxlNseZrXWpSCMmKwZoAHFRMSWc4x+2Ee8IobgmwuNKV586KL1958NNRRKmv1ybcd2wIkUyYGO2/dFajbr/JrqqWTLvYCrAkMyxhxNs9ALhZ3yIl root@bogon

-
创建 git 版本库,在服务器上安装 git
yum -y install git
-
--global表示Git 全局设置,设置用户名和邮箱
git config --global user.name "Administrator"
git config --global user.email "docker_01@163.com" -
把我们gitlab上的项目克隆下来

git clone ssh://git@10.0.41.253:222/root/my-project.git
-
创建 index.html 文件
cd my-project/
vim index.html
hello everyone
i am Liu Jichao, a strong man.
Hahahahaha~git config --global push.default matching
git config --global push.default simplegit add 命令可将该文件添加到暂存区
git add index.html
git commit -m "add index.html"git push命令用于将本地分支的更新,推送到远程主机
git push
-
去gitlab界面上看文件是否推送过去,可以看到index.html被推送到gitlab代码仓库了

- 自此gitlab代码仓库配置完成,但是还缺触发jenkins,等安装好jenkins再配置
八、安装部署 CI/CD 服务器 jenkins
-
创建 jenkins 容器
拉取镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:latest-jdk17
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:latest-jdk17 docker.io/jenkins/jenkins:latest-jdk17创建 jenkins 数据卷需要的目录,并把所有者和所属组改为 1000
/jenkins的属主UID要改成1000的原因为:容器里是以jenkins用户的身份去读写数据,而在容器里 jenkins 的 uid 是 1000,可以看下此镜像的 Dockerfile 内容
mkdir /jenkins
chown 1000:1000 /jenkins启动容器
docker run -dit -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true --restart=always -v /jenkins:/var/jenkins_home jenkins/jenkins:latest-jdk17

- 让jenkins容器运行一段时间之后,再访问jenkins web界面,浏览器访问:10.0.41.253:8080,即可访问jenkins的web界面

-
下面需要修改jenkins容器的配置文件,因为jenkins容器使用了数据卷:-v /jenkins:/var/jenkins_home,我们修改物理机/jenkins下面的文件,对应容器里的文件也就相应改变
docker stop jenkins
<?xml version='1.1' encoding='UTF-8'?> <sites> <site> <id>default</id> <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins</url> </site> </sites> # 这个地址是用来更新jenkins和安装jenkins插件的网址,把该地址换为清华大学的地址,提高安装jenkins插件的下载速度
vim /jenkins/hudson.model.UpdateCenter.xmlvim /jenkins/updates/default.json
{"connectionCheckUrl":"http://www.baidu.com/"/jenkins/updates/default.json文件的connectionCheckUrl修改为:"connectionCheckUrl":"http://www.baidu.com/"
重新启动Jenkins
docker start jenkins
查看 jenkins 管理员密码并登录,jenkins管理员密码在/jenkins/secrets/initialAdminPassword文件,查看密码
cat /jenkins/secrets/initialAdminPassword
180f181649bf4b0d89360c0e3bd786eb -
点击安装推荐的插件

- Jenkins插件安装完成之后,会出现创建管理员用户界面

jenkinsadmin
devopsjenkins123
- 安装 docker 插件


-
安装完,重启jenkins
-
在jenkins主页依次点击系统管理-->插件管理-->已安装,搜索docker,发现 docker 插件和 docker-build-step插件已经安装好了

九、配置 jenkins 连接 docker


-
Docker Host URI输入连接docker的地址,此处为:tcp://10.0.41.253:2375 ,再点击test connection,如果出现docker的版本号,则jenkins连接docker成功,最后保存即可
-
在首页点击系统管理-->系统配置,找到 Docker Builder,在docker URL里输入连接的docker地址:tcp://10.0.41.253:2375,点击 test connection,如果出现Connected to tcp://10.0.41.253:2375,这样说明jenkins和docker就关联起来了,最后点击保存

- 此时jenkins就能连接docker了
十、安全设置
- gitlab要触发jenkins操作,需要做相关安全设置,首页依次点击系统管理-->全局安全配置-->授权策略,勾选"匿名用户具有可读权限"


-
注意下面的跨站请求伪造保护(CSFR)必须要关闭,但是在Jenkins版本自2.2xx版本之后,在 web 界面里已经没法关闭了,所以在当前 web 界面里暂且不要管它,点击下面的保存。
-
gitlab 要触发 jenkins 的话,就必须要关闭跨站请求伪造保护,既然web 界面里已经没法关闭了,那么我们在命令行里操作
-
进入 jenkins 容器,找到/usr/local/bin/jenkins.sh
-
在该文件中的:exec java -Duser.home="JENKINS_HOME" {FUTURE_OPTS} "{java_opts_array\[@\]}" -jar {JENKINS_WAR} "{jenkins_opts_array\[@\]}" "@" 一行中,增加:
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
vi /usr/local/bin/jenkins.sh
#修改后内容如下:
......
exec java -Duser.home="$JENKINS_HOME" -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true ${FUTURE_OPTS} "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"
-
配置完成后重启Jenkins容器
-
重启好jenkins之后,登录jenkins web界面。
-
首页依次点击系统管理-->全局安全配置,此时跨站请求伪造保护已经被关闭了。

十一、配置 jenkins 连接 k8s 集群
-
jenkins需要把镜像部署到Kubernetes(k8s)集群,所以jenkins需要kubectl客户端工具和kubeconfig文件连接k8s环境,现在回到Kubernetes(k8s)集群
-
master 节点:


scp /ur/local/bin/kubectl root@10.0.41.253:/root
scp /root/.kube/config root@10.0.41.253:/root
-
把 kubect l和 config 文件拷贝到 jenkins 容器
-
jenkins 节点:
docker cp kubectl jenkins:/
docker cp config jenkins:/以root身份进入jenkins容器
[root@milvus-04 ~]# docker exec -it -u root jenkins /bin/sh
ls
bin boot config dev etc home kubectl lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
chmod +x kubectl
chmod 644 config./kubectl --kubeconfig=config get node
NAME STATUS ROLES AGE VERSION
controller-0 Ready control-plane 69d v1.26.6
controller-1 Ready control-plane 69d v1.26.6
controller-2 Ready control-plane 69d v1.26.6
worker-0 Ready <none> 75d v1.26.6
worker-1 Ready <none> 75d v1.26.6./kubectl --kubeconfig=config get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default nfs-client-nfs-client-provisioner-799d7f54fd-tdskb 0/1 ContainerCreating 0 47h
default nginx-d969465bc-bsb26 1/1 Running 0 21h
devops nginx-9bbffc845-mmshq 1/1 Running 0 16h
kube-flannel kube-flannel-ds-4x42v 1/1 Running 6 (23h ago) 69d
kube-flannel kube-flannel-ds-76btm 1/1 Running 1 (41h ago) 69d
kube-flannel kube-flannel-ds-cvcjn 1/1 Running 2 (41h ago) 69d
kube-flannel kube-flannel-ds-v4ww9 1/1 Running 1 (41h ago) 69d
kube-flannel kube-flannel-ds-zt7s5 1/1 Running 2 (41h ago) 69d
kube-system coredns-7db6d4f6d7-crsfv 1/1 Running 2 (41h ago) 72d
kube-system metrics-server-574b6ff575-zfl7z 1/1 Running 4 (41h ago) 69d
logging es-0 0/1 Pending 0 2d18h
my-milvus my-milvus-datacoord-74b4d5ffd9-9rcz6 1/1 Running 1 (41h ago) 47h
my-milvus my-milvus-datacoord-74b4d5ffd9-cpqgz 1/1 Running 20 (41h ago) 9d
my-milvus my-milvus-datanode-58f96b6cbd-jflls 1/1 Running 20 (41h ago) 9d
my-milvus my-milvus-indexcoord-7bb79f98d8-8996w 1/1 Running 1 (41h ago) 13d
my-milvus my-milvus-indexcoord-7bb79f98d8-xhv2t 1/1 Running 1 (41h ago) 47h
my-milvus my-milvus-indexnode-67cc4f94dc-d8fv4 1/1 Running 5 (41h ago) 47h
my-milvus my-milvus-proxy-77cb496596-mbdcl 1/1 Running 669 (41h ago) 13d
my-milvus my-milvus-querycoord-5775855487-9c8h2 1/1 Running 698 (41h ago) 13d
my-milvus my-milvus-querycoord-5775855487-hct8w 1/1 Running 1 (41h ago) 47h
my-milvus my-milvus-querynode-5b464fddb9-zmqk5 1/1 Running 5 (41h ago) 47h
my-milvus my-milvus-rootcoord-777cbd9949-hhh42 1/1 Running 1 (41h ago) 13d
my-milvus my-milvus-rootcoord-777cbd9949-nm8g5 1/1 Running 4 (41h ago) 47h -
可以发现在 jenkins 容器内可以管理 k8s 集群。自此,jenkins就可以远程连接k8s环境了
十二、创建 jenkins 项目
- 首页点击新建任务,任务名称可以自定义,选择构建一个自由风格的软件项目,点击确定。

-
配置构建触发器,这样gitlab就可以触发jenkins了,在构建触发器那里选中触发远程构建(例如,使用脚本),身份验证令牌自定义。
-
注意:链接 JENKINS_URL/job/devopsProject/build?token= TOKEN_NAME,这个链接用于 gitlab 在触发 jenkins 时用到的链接,我们这里,TOKEN_NAME 的值是connect123,JENKINS_URL 是 192.168.110.133:8080,所以整个链接为:
http://10.0.41.253:8080/job/devopsProject/build?token=connect123。

-
当gitlab代码仓库内容变动之后,会去触发jenkins,所以需要增加构建步骤。
-
点击构建-->增加构建步骤,选择执行shell。

-
程序员提交了代码到gitlab之后,jenkins需要重新拉取新代码,这时要先删除家目录下的旧代码,再拉取新代码,不然会报错。
-
对于jenkins容器来说,家目录就是/var/jenkins_home,进入Jenkins容器。
-
在构建-->增加构建步骤-->执行shell里输入如下语句,意思为进入jenkins容器家目录,删除旧代码,拉取新代码。
cd
rm -rf my-project
git clone http://10.0.41.253/root/my-project.git

-
Jenkins把新代码拉取下来之后,需要进行编译,接下来继续增加构建步骤,这次类型选择Build/Publish Docker Image。
-
Build/Publish Docker Image-->Directory for Dockerfile里填/var/jenkins_home/my-project/,jenkins拉取代码是放在家目录下,Dockerfile也在家目录/var/jenkins_home/my-project/下
-
Cloud选择docker,使用docker编译Dockerfile
-
把新代码拉取下来,Dockerfile被编译好并推送到镜像仓库之后,需要把新镜像部署到k8s环境,接下来继续增加构建步骤,这次类型选择执行shell。
export KUBECONFIG=/config
/kubectl set image deployment/nginx nginx="10.0.41.253:5000/devopsproject/nginx:${BUILD_NUMBER}" -n devops


export KUBECONFIG=/kctest定义KUBECONFIG,不然每次执行kubectl命令都要加上kubectl --kubeconfig=config
export KUBECONFIG=/config
在devops命名空间里,替换deployment/nginx的镜像为[192.168.110.133:5000/devopsproject/nginx:](https://192.168.110.133:5000/devopsproject/nginx: "192.168.110.133:5000/devopsproject/nginx:$"){BUILD_NUMBER}
/kubectl set image deployment/nginx nginx="[192.168.110.133:5000/devopsproject/nginx:](https://192.168.110.133:5000/devopsproject/nginx: "192.168.110.133:5000/devopsproject/nginx:$"){BUILD_NUMBER}" -n devops
最后点击保存。
十三、创建 deployment
-
现在回到Kubernetes(k8s)集群,因为jenkins把新镜像部署到devops命名空间下,所以创建一个命名空间devops。
kubectl create namespace devops
-
使用Nginx镜像创建一个deploy,创建 deployment、service, Pod副本数为1
vim nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: devops # 指定命名空间为 devops
labels:
app: nginx
spec:
replicas: 1 # 指定需要运行的Pod副本数量为1个。
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 0 # 当需要关闭容器时,立即杀死容器而不等待默认的30秒优雅停机时长。
containers:
- name: nginx
image: nginx:latest # 指定要使用的镜像为"nginx"。
imagePullPolicy: IfNotPresent # IfNotPresent:表示如果本地已经存在该镜像,则不重新下载;否则从远程 Docker Hub 下载该镜像。
resources: {}apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: devops # 确保服务也在devops命名空间下
spec:
selector:
app: nginx # 选择标签为"nginx"的Pod
ports:
- protocol: TCP
port: 80 # 服务暴露的端口
targetPort: 80 # 指定Pod内部的端口
type: NodePort # 服务类型为NodePort
kubectl apply -f nginx.yaml
[root@milvus-01 ~]# kubectl get all -n devops
NAME READY STATUS RESTARTS AGE
pod/nginx-9bbffc845-mmshq 1/1 Running 0 17h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx-service NodePort 172.16.159.236 <none> 80:32237/TCP 19h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 1/1 1 1 20h -
在浏览器访问 10.0.41.253:32237 即可访问 nginx 界面
十四、配置 gitlab 触发 jenkins
-
接下来回到gitlab,配置gitlab触发jenkins。
-
gitlab首页依次点击管理区域-->设置-->Outbound requests,展开Outbound requests,勾选允许钩子和服务访问本地网络,保存修改,这样jenkins才能访问gitlab代码仓库。

- 配置 钩子


http://10.0.41.253:8080/job/devopsProject/build?token=connect123


- 如果看到如上,则test成功,gitlab 能触发 jenkins了。 自此整个DevOps环境就搭建成功了
十五、测试 DevOps 流水线
-
写代码
[root@milvus-04 my-project]# ls
Dockerfile index.html README.md
[root@milvus-04 my-project]# vim Dockerfile
FROM nginx:latest
MAINTAINER liujichao
ADD index.html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g","daemon off;"]
[root@milvus-04 my-project]# vim index.html
hello everyone
i am Liu Jichao, a strong man
Hahahahaha~ -
上传代码到 gitlab
-
git add命令把Dockerfile和index.html添加到暂存区
[root@milvus-04 my-project]# git add .
[root@milvus-04 my-project]# git commit -m "a new code"
[main e45fbb9] a new code
1 file changed, 2 insertions(+), 4 deletions(-)
[root@milvus-04 my-project]# git push
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 304 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To ssh://git@10.0.41.253:222/root/my-project.git
666e8ba..e45fbb9 main -> main -
去gitlab界面看文件是否推送成功,可以看到git push成功


- 去 jenkins 界面查看是否有部署任务



- 再去 k8s 环境看部署的项目 pod

- 最后查看项目部署成果
