Jinkens+gitlab針對k8s集羣實現CI/CD

環境以下

//前三個爲K8s集羣中的節點html

主機名 IP 運行服務
docker-k8s01 192.168.171.151 docker+registry
docker-k8s02 192.168.171.150 docker
docker-k8s03 192.168.171.152 docker
Jenkins 192.168.171.153 Jenkins+gitlab+docker

Jenkins採用war包的方式部署,須要用到tomcat環境,自行參考博文,進行部署;java

Docker 部署nginx

Tomcat 的安裝與優化git

K8s 安裝部署web

1、部署registry私有倉庫

//任意節點均可部署**docker

一、運行registry容器

[root@docker-k8s01 ~]# docker run -itd --name registry --restart=always -p 5000:5000 -v /data/registry:/var/lib/registry registry

二、配置各個節點指向私有倉庫

//選擇其中一個節點操做
[root@docker-k8s01 ~]# vim /usr/lib/systemd/system/docker.service 
//修該下面的配置項,以便指定其私有倉庫的監聽地址
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.171.151:5000
//將已經配置好的文件發送到各節點
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s02:/usr/lib/systemd/system/
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s03:/usr/lib/systemd/system/ 
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service jenkins:/usr/lib/systemd/system/

三、各節點重啓docker服務,使之生效

//每一個節點都須要執行
[root@docker-k8s01 ~]# systemctl daemon-reload 
[root@docker-k8s01 ~]# systemctl restart docker

2、部署Jenkins服務

//部署Jenkins以前,自行部署Tomcat服務,參考開頭連接便可vim

//進入tomcat的webapps目錄,根據實際狀況而定,這裏我直接刪除了
[root@jenkins ~]# cd /usr/local/tomcat/webapps/
[root@jenkins webapps]# rm -rf *
[root@jenkins webapps]# ls      //剛剛上傳上來發現tomcat自動給我解壓了
jenkins  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"
[root@jenkins webapps]# cd ../bin/
[root@jenkins bin]# ./catalina.sh start   //啓動tomcat
//肯定端口已啓動
[root@jenkins bin]# ss -anput | grep 8080
tcp    LISTEN     0      100    [::]:8080               [::]:*                   users:(("java",pid=12236,fd=49))

3、配置Jenkins服務

要想實現Jenkins的CI/CD,必須有GitLab、GitLab HOOK、Git Lab Authentication這三個插件,國內不太好下載這幾個插件。瀏覽器

一、配置Jenkins web界面

//瀏覽器訪問tomcat服務的IP+端口/Jenkins(訪問前最好先斷掉外網,不然在輸入密碼後,會讓在線安裝插件,比較慢,並且頗有可能安裝失敗)tomcat

Jinkens+gitlab針對k8s集羣實現CI/CD
image-20200917162719969

//查看密碼
[root@jenkins ~]# cat 
/data/jenkins/secrets/initialAdminPassword 
3eb89452e2614173a548a9d4cfe9fcc3

//輸入密碼後稍等一會出現以下圖
Jinkens+gitlab針對k8s集羣實現CI/CD

//建立相應用戶
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD



登陸成功後,以下**
Jinkens+gitlab針對k8s集羣實現CI/CD
bash

二、配置所需插件

//關閉瀏覽器頁面,對Jenkins添加插件

[root@jenkins ~]# rm -rf /data/jenkins/plugins/
[root@jenkins ~]# tar zxf plugins.tar.gz -C /data/jenkins/
//重啓tomcat使之生效
[root@jenkins ~]# /usr/local/tomcat/bin/catalina.sh stop 
[root@jenkins ~]# /usr/local/tomcat/bin/catalina.sh start

//再次訪問Jenkins的web界面

Jinkens+gitlab針對k8s集羣實現CI/CD
//能夠看到已經變成了中文頁面,說明插件配置生效

Jinkens+gitlab針對k8s集羣實現CI/CD

4、部署gitlab

一、安裝gitlab

//下載gitlab的rpm包
[root@jenkins ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm
[root@jenkins ~]# rpm -ivh gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm 
[root@jenkins ~]# vim /etc/gitlab/gitlab.rb 
external_url 'http://192.168.171.153:90'      //將本來的域名更改成本機IP
unicorn['listen'] = '192.168.171.153'   //這兩行在下方是有註釋的,這裏我直接添加了
unicorn['port'] = 3000
[root@jenkins ~]# gitlab-ctl reconfigure

接下來的操做可參考文章開頭連接中的Gitlab安裝部署來接着部署,最後保證能夠將遠端的庫克隆到本地便可
**

//能夠看到本地已經訪問到gitlab
[root@jenkins ~]# ls -d test1/
test1/

5、配置Jenkins建立一個任務

Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD


//腳本中的IP,192.168.171.151爲私有倉庫的IP,最後的192.168.171.151爲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.171.151:5000/nginx > "$JENKINS_HOME"/workspace/Dockerfile
echo COPY ./"$JOB_NAME"/* /usr/share/nginx/html/ >> "$JENKINS_HOME"/workspace/Dockerfile
docker rmi 192.168.171.151:5000/nginx        
docker build -t 192.168.171.151:5000/nginx /"$JENKINS_HOME"/workspace/.
docker push 192.168.171.151:5000/nginx
ssh root@192.168.171.151 kubectl delete deployment nginx
ssh root@192.168.171.151 kubectl apply -f /root/nginx.yaml

Jinkens+gitlab針對k8s集羣實現CI/CD
//腳本填寫後,先別保存,根據如下操做複製一下Jenkins的地址

Jinkens+gitlab針對k8s集羣實現CI/CD

6、開啓Jenkins的匿名訪問權限

Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD




7、gitlab上開啓容許向本身發送web hook

//這是由於我是把Jenkins和gitlab裝在了一臺服務器上

Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
Jinkens+gitlab針對k8s集羣實現CI/CD
//保存後,下拉頁面,便可看到新添加的web-hook,點擊以下,進行測試




Jinkens+gitlab針對k8s集羣實現CI/CD
//返回狀態碼200,則表示配置無誤
Jinkens+gitlab針對k8s集羣實現CI/CD

8、配置Jenkins免密登陸k8s羣集的master節點

//Jenkins配置以下

//下方IP爲k8s羣集master的IP
[root@jenkins ~]# ssh-copy-id root@192.168.171.151

9、測試持續CI/CD效果

一、k8s羣集運行nginx資源對象

Jinkens+gitlab針對k8s集羣實現CI/CD

二、客戶端訪問nginx

Jinkens+gitlab針對k8s集羣實現CI/CD

三、在gitlab進行版本的更新迭代測試

[root@jenkins ~]# cd test1/
[root@jenkins test1]# git config --global user.name "test"
[root@jenkins test1]# git config --global user.email "test@test.com"
[root@jenkins test1]# echo "test--version==v1" > index.html
[root@jenkins test1]# git add *
[root@jenkins test1]# git commit -m "Test CI/CD"
[root@jenkins test1]# git push origin master

//在進行上述操做後,便可在Jenkins新建的任務中,看到構建成功的信息
Jinkens+gitlab針對k8s集羣實現CI/CD
//再次訪問nginx首頁,發現已經變成了咱們在gitlab上提交的內容

Jinkens+gitlab針對k8s集羣實現CI/CD
//歷史版本內容存放路徑以下

[root@jenkins data]# pwd
/data
//這個目錄下記錄的是歷史版本的代碼
[root@jenkins data]# tree backcode/
backcode/
└── test-01
    ├── 1
    │   └── README.md
    └── 2
        ├── index.html
        └── README.md

[root@jenkins workspace]# pwd
/data/jenkins/workspace
//此目錄下是將新代碼構建成鏡像的關鍵所在,Dockersfile就在這個目錄下
[root@jenkins workspace]# ls
Dockerfile  test-01
相關文章
相關標籤/搜索