您好,登錄后才能下訂單哦!
- k8s集群環境(我這里是三臺的K8s集群);
- 單獨一臺docker服務器,主要用于向私有倉庫上傳鏡像,Jenkins和gitlab也部署在這臺服務器;
- 上述環境共計服務器4臺,均指向同一個私有倉庫,以便共享docker鏡像;
- 服務器IP依次為192.168.20.2、20.3、20.4、20.5(前三個IP為K8s集群中的節點)
Jenkins采用war包的方式部署,需要用到tomcat環境,自行參考博文,進行部署;
其他環境部署可以參考以下博文:
Tomcat安裝及優化配置;
Docker的安裝詳細配置;
K8s(Kubernetes)簡介及安裝部署。
注:以下用到的所有包文件,都可以從我的網盤鏈接中下載。
任意可以運行docker容器的節點部署即可。這里我選擇在192.168.20.5這臺主機。
[root@jenkins ~]# docker run -tid --name registry --restart=always -p 5000:5000 -v /data/registry:/var/lib/registry registry
#選擇任意一個節點進行以下操作
[root@jenkins ~]# vim /usr/lib/systemd/system/docker.service
#修該下面的配置項,以便指定其私有倉庫的監聽地址
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.20.5:5000
#將修改后的配置文件發送到其他節點
[root@jenkins ~]# scp /usr/lib/systemd/system/docker.service 192.168.20.2:/usr/lib/systemd/system/
[root@jenkins ~]# scp /usr/lib/systemd/system/docker.service 192.168.20.3:/usr/lib/systemd/system/
[root@jenkins ~]# scp /usr/lib/systemd/system/docker.service 192.168.20.4:/usr/lib/systemd/system/
以下操作,需要在每個節點依次進行配置。
[root@jenkins ~]# systemctl daemon-reload
[root@jenkins ~]# systemctl restart docker
在部署Jenkins之前,自行部署tomcat服務,參考博文:Tomcat安裝及優化配置。
部署Jenkins所需要的源碼包及插件,可以從我的網盤鏈接中下載。
[root@jenkins src]# cd /usr/local/tomcat/webapps/
#刪除原來的網頁目錄下所有內容(根據實際情況來定,最好做個備份)
[root@jenkins webapps]# rm -rf *
[root@jenkins webapps]# rz #上傳Jenkins的war包
[root@jenkins webapps]# ls
jenkins.war
#指定Jenkins的家目錄
[root@jenkins webapps]# vim ../bin/catalina.sh #編輯此文件
#!/bin/sh #在文件開頭該行下面添加即可
export CATALINA_OPTS="-DJENKINS_HOME=/data/jenkins"
export JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.ClassicPluginStrategy.noBytecodeTransformer=true"
#啟動tomcat
[root@jenkins webapps]# cd ../bin/
[root@jenkins bin]# ./catalina.sh start
#確定端口在監聽
[root@jenkins bin]# netstat -anpt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 58560/java
要想實現Jenkins的CI/CD,必須有GitLab、GitLab HOOK、Git Lab Authentication這三個插件,國內不太好下載這幾個插件,在我上面的網盤鏈接中有打包好的插件,直接解壓到對應目錄即可。
瀏覽器訪問以下tomcat服務的IP+端口/Jenkins,如:192.168.20.5:8080/jenkins,即可看到如下界面(訪問前最好先斷掉外網,否則在輸入密碼后,會讓在線安裝插件,比較慢,而且很有可能安裝失敗):
自行根據提示查看密碼并粘貼到相應位置,如下,查看密碼:
[root@jenkins webapps]# cat /data/jenkins/secrets/initialAdminPassword
ed0a933859e0470f9095680a2059c19a
輸入密碼后,等待片刻,然后點擊如下:
創建相應用戶:
登錄成功后,如下:
現在關閉瀏覽器頁面,對Jenkins添加插件:
[root@jenkins src]# rm -rf /data/jenkins/plugins/ #刪除原來的空目錄
[root@jenkins src]# tar zxf plugins.tar.gz -C /data/jenkins/
#重啟tomcat以便生效
[root@jenkins src]# /usr/local/tomcat/bin/catalina.sh stop
[root@jenkins src]# /usr/local/tomcat/bin/catalina.sh start
再次訪問Jenkins的web界面:
可以看到已經變成了中文頁面,說明插件配置生效,如下:
想了想,還是懶得再截圖寫了,參考我之前的博文來部署gitlab吧,我也是看那個博文部署的(在安裝gitlab后,先別接著操作,需要看下面的注意事項,進行更改監聽端口),最后保證可以將遠端的庫克隆到本地即可,我這里將gitlab和Jenkins部署在同一臺服務器。參考博文:持續集成之Gitlab安裝與應用
注意事項!!!
在安裝gitlab后,需要更改其監聽端口(防止端口沖突),如下:
[root@jenkins src]# vim /etc/gitlab/gitlab.rb #更改如下
external_url 'http://192.168.20.5:90'
unicorn['listen'] = '192.168.20.5' #本機IP
unicorn['port'] = 3000
更改完成監聽端口后,再按照那個博文進行接下來的操作即可(但是端口和那篇博文已經不一樣了,比如查詢端口有沒有再監聽,應該看的是90端口而不是80端口了,訪問瀏覽器頁面也是,需要加90端口)。
最后保證本地有克隆的庫即可,如下:
[root@jenkins ~]# ls -d teset01/
teset01/
將以下shell腳本內容粘貼到web界面,腳本如下:
#腳本中的IP,192.168.20.5為私有倉庫的IP,192.168.20.2為k8s集群中master的IP地址
#!/bin/bash
backupcode="/data/backcode/$JOB_NAME/$BUILD_NUMBER" #這里引用了Jenkins的默認變量
mkdir -p $backupcode
chmod 644 "$JENKINS_HOME"/workspace/"$JOB_NAME"/*
rsync -acP "$JENKINS_HOME"/workspace/"$JOB_NAME"/* $backupcode
echo From 192.168.20.5:5000/nginx > "$JENKINS_HOME"/workspace/Dockerfile
echo COPY ./"$JOB_NAME"/* /usr/share/nginx/html/ >> "$JENKINS_HOME"/workspace/Dockerfile
docker rmi 192.168.20.5:5000/nginx
docker build -t 192.168.20.5:5000/nginx /"$JENKINS_HOME"/workspace/.
docker push 192.168.20.5:5000/nginx
ssh root@192.168.20.2 kubectl delete deployment nginx
ssh root@192.168.20.2 kubectl apply -f /root/nginx.yaml
腳本填寫后,如下:
腳本填寫后,先別保存,根據以下操作復制一下Jenkins的地址,如下:
以下操作,在新建的庫中進行,我忘了截切換到新建庫的那一步的圖了:
保存后,下拉頁面,即可看到新添加的web-hook,點擊如下,進行測試:
返回狀態碼200,則表示配置無誤,如下:
jenkins服務器配置如下:
[root@jenkins ~]# ssh-copy-id root@192.168.20.2
#上面的IP為K8s群集中master節點IP
#向私有倉庫上傳所需鏡像
[root@jenkins ~]# docker tag nginx:latest 192.168.20.5:5000/nginx:latest
[root@jenkins ~]# docker push 192.168.20.5:5000/nginx:latest
#在master節點上面運行nginx資源對象
[root@master ~]# vim nginx.yaml #編寫yaml文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: 192.168.20.5:5000/nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
labels:
name: nginx
name: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 31234
selector:
name: nginx
[root@master ~]# kubectl apply -f nginx.yaml #執行yaml文件
[root@master ~]# kubectl get pod | grep nginx #確定容器運行正常
nginx-76645bc84f-rbgtl 1/1 Running 0 68s
nginx-76645bc84f-s6xp6 1/1 Running 0 68s
#在克隆到本地的庫中上傳文件到gitlab
[root@jenkins ~]# cd teset01/
[root@jenkins teset01]# git config --global user.name "test"
[root@jenkins teset01]# git config --global user.email "test@test.com"
[root@jenkins teset01]# echo "test ....." > index.html
[root@jenkins teset01]# git add *
[root@jenkins teset01]# git commit -m "Test CI/CD"
[root@jenkins teset01]# git push origin master
在進行上述操作后,即可在Jenkins新建的任務中,看到構建成功的信息,如下:
再次訪問nginx首頁,發現已經變成了我們在gitlab上提交的內容,如下:
測試完成。
附加:歷史版本內容存放路徑如下:
[root@jenkins data]# pwd #確定當前路徑
/data
[root@jenkins data]# tree backcode/ #這個目錄下記錄的是歷史版本的代碼
backcode/
└── test-01
├── 1
│?? └── README.md
├── 2
│?? ├── a.html
│?? └── README.md
├── 3
│?? └── README.md
├── 4
│?? ├── a.html
│?? └── README.md
├── 5
│?? └── README.md
└── 6
├── index.html
└── README.md
[root@jenkins workspace]# pwd #再次確定當前路徑
/data/jenkins/workspace
[root@jenkins workspace]# ls
#此目錄下是將新代碼構建成鏡像的關鍵所在,Dockersfile就在這個目錄下
Dockerfile test-01
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。