一、前言
-
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
-
最后查看項目部署成果