当前位置: 首页 > news >正文

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

  • 最后查看项目部署成果

http://www.dtcms.com/a/317441.html

相关文章:

  • Packets Frames 数据包和帧
  • docker-compose快速部署启动file beat+ELK
  • 企业级Linux服务器安全:防火墙规则配置与Web/SSH服务优化指南
  • 机器学习④【算法详解:从决策树到随机森林】
  • 【Graphiti MCP Server 配置与使用教程 (优化版)】
  • 了解SELinux
  • CGAL中函数squared_distance使用细则
  • 数据安全框架规划图
  • 【LeetCode 热题 100】347. 前 K 个高频元素——(解法三)桶排序
  • 使用R将nc文件转换为asc文件或者tif文件
  • C语言控制语句练习题2
  • KVazaar:开源H.265/HEVC编码器技术深度解析
  • vcpkg: 一款免费开源的C++包管理器
  • 【开源分享】can-utils:深入解析 Linux CAN 工具集
  • UE编辑器相机窗口运行时相机fov 大小不一致
  • 毕业设计选题推荐之基于Spark的在线教育投融数据可视化分析系统 |爬虫|大数据|大屏|预测|深度学习|数据分析|数据挖掘
  • css margin属性auto原理
  • 海康威视相机,MVS连接成功,但无图像怎么办?
  • python每日一题 贪心算法
  • 智能文本转语音新选择:EasyVoice与内网穿透打造私域有声平台
  • 深入理解 Qt 中的 QOverload
  • 分布式事务Seata、LCN的原理深度剖析
  • Java 排序教程
  • P1983 [NOIP 2013 普及组] 车站分级
  • 《第五篇》基于RapidOCR的图片和PDF文档加载器实现详解
  • 分布式文件系统07-小文件系统的请求异步化高并发性能优化
  • LeetCode——118. 杨辉三角
  • 数据结构(四)内核链表、栈与队列
  • Go语言数据类型深度解析:位、字节与进制
  • 实时数据可视化工具SciChart.js v4.0即将发布——扩展更多极坐标图表