Gitlab+Jenkins+K8S+Registry 建立 CI/CD 流水线
一、前言
-
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.ymlgitlab:## Web server settings (note: host is the FQDN, do not include http://)host: 10.0.41.253port: 80https: 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_password
# WARNING: This value is valid only in the following conditions
# 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.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 simple# git 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
vim /jenkins/hudson.model.UpdateCenter.xml
<?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/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_01@163.com
-
安装 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:${BUILD_NUMBER}
/kubectl set image deployment/nginx 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: nginxnamespace: devops # 指定命名空间为 devopslabels:app: nginx
spec:replicas: 1 # 指定需要运行的Pod副本数量为1个。selector:matchLabels:app: nginxstrategy: {}template:metadata:labels:app: nginxspec:terminationGracePeriodSeconds: 0 # 当需要关闭容器时,立即杀死容器而不等待默认的30秒优雅停机时长。containers:- name: nginximage: nginx:latest # 指定要使用的镜像为"nginx"。imagePullPolicy: IfNotPresent # IfNotPresent:表示如果本地已经存在该镜像,则不重新下载;否则从远程 Docker Hub 下载该镜像。resources: {}
---
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: devops # 确保服务也在devops命名空间下
spec:selector:app: nginx # 选择标签为"nginx"的Podports:- protocol: TCPport: 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.git666e8ba..e45fbb9 main -> main
-
去gitlab界面看文件是否推送成功,可以看到git push成功
-
去 jenkins 界面查看是否有部署任务
-
再去 k8s 环境看部署的项目 pod
-
最后查看项目部署成果