[代碼上線]-jenkins


第0章 Jenkins介紹

官方地址:

https://www.jenkins.io/zh/doc/

介紹

1.jenkins是一個開源的持續集成工具,由java語言開發
2.jenkins是一個調度平台,擁有眾多的插件,絕大部分功能都是由插件來完成的

第1章 Jenkins安裝

1.官方網站

https://www.jenkins.io/zh/
https://www.jenkins.io/zh/doc/

2.安裝部署

清華源直接下載rpm包安裝即可,下載地址如下:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

安裝命令如下:

rpm -ivh jdk-8u181-linux-x64.rpm 
rpm -ivh jenkins-2.176.1-1.1.noarch.rpm 

3.目錄文件說明

[root@jenkins ~]# rpm -ql jenkins 
/etc/init.d/jenkins							#啟動文件
/etc/logrotate.d/jenkins				#日志切割腳本
/etc/sysconfig/jenkins					#配置文件
/usr/lib/jenkins								#安裝目錄
/usr/lib/jenkins/jenkins.war		#安裝包
/usr/sbin/rcjenkins							
/var/cache/jenkins							
/var/lib/jenkins								#數據目錄
/var/log/jenkins								#日志目錄

4.配置使用root賬戶運行

vim /etc/sysconfig/jenkins
JENKINS_USER="root"

5.啟動jenkins

systemctl start jenkins

6.解鎖Jenkins

7.修改admin密碼

8.使用清華源作為插件地址

清華源地址:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

配置步驟:

9.使用離線安裝插件

我們可以將插件提前下好,然后只需要解壓到jenkins對應的目錄即可

tar zxf jenkins_plugins.tar.gz -C /var/lib/jenkins/
ll /var/lib/jenkins/plugins/

重啟jenkins:

systemctl restart jenkins

第2章 構建自由風格的項目

1.創建新任務

2.添加構建步驟

3.點擊立即構建

4.查看控制台輸出

第3章 發布gitlab中的靜態項目

1.gitlab導入工程

這是一個h5小游戲的項目,項目地址:

https://gitee.com/skips/game.git

使用gitlab直接導入項目:

2.在jenkins中關聯gitlab的h5game項目

2.1 創建新項目

2.2 填寫倉庫地址

選擇源碼管理,然后填寫gitlab倉庫信息,但是我們發現報錯了,因為jenkins沒有拉取gitlab項目的權限。

3.配置jenkins訪問gitlab的權限

3.1 部署公鑰解釋和步驟

解釋

1.如果我們想讓jenkins從gitlab上拉取代碼,那么需要將jenkins的公鑰信息放在gitlab上。
2.gitlab針對這種情況有一個專門的功能,叫做部署部署公鑰。
3.部署公鑰的作用是不需要創建虛擬用戶和組,直接在需要拉取的項目里關聯部署公鑰即可。

步驟

1.獲取jenkins公鑰信息
2.將jenkins公鑰信息填寫到gitlab的部署公鑰里
3.由項目管理員操作,在需要jenkins拉取的項目里關聯部署公鑰
4.jenkins配置私鑰憑證,部署項目時關聯憑證

3.2 獲取jenkins服務器的SSH公鑰信息

[root@jenkins-201 ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCg8+DQFOjR+gl1Xw83CIyGJ50vI4DBeTaMRFdu5+5pT/IMnYq1iS7/lRS6JxXLYvVeNMDUfDxA1sOL70okyA3npjASXgJPGE1FsbpqzWjsN0TAGoZkR1VWuP9Yn0CrH7dA4lhZQfUUVjvqzFBZK8N9iZMzIu6KOiSY/aD4Ol59vbDS4kO0rTG1DYQNnjZzMPNlIiJ+0EVkfuYRwABRFA8fmL+6btqZqhjGY29EHuIfzIMTDTysrtCTGxQn2ql1zwjReGiNXzmFncwvyy92DAuMbnOQiE1YNn72wThy2oWSHsCwKdIvcNHqY2xBvFnkZ9Ltga7PgR33kbJ7Gl8tjiZF root@jenkins-201

3.3 gitlab添加部署公鑰

3.4 gitlab項目關聯部署公鑰

3.5 jenkins配置私鑰憑證

3.6 測試獲取代碼

查看拉取的代碼:

[root@jenkins-201 ~]# ll /var/lib/jenkins/workspace/h5game
總用量 16
drwxr-xr-x 4 jenkins jenkins   47 8月   6 09:37 game
-rw-r--r-- 1 jenkins jenkins 9349 8月   6 09:37 LICENSE
-rw-r--r-- 1 jenkins jenkins  937 8月   6 09:37 README.md

4.編寫部署腳本

#創建目錄
mkdir -p /scripts/jenkins/

#編寫腳本
cat > /scripts/jenkins/deploy.sh << 'EOF'
#!/bin/bash

PATH_CODE=/var/lib/jenkins/workspace/h5game/
PATH_WEB=/usr/share/nginx
TIME=$(date +%Y%m%d-%H%M)
IP=10.0.0.7

#打包代碼
cd ${PATH_CODE} 
tar zcf /opt/${TIME}-web.tar.gz ./*

#拷貝打包好的代碼發送到web服務器代碼目錄
ssh ${IP} "mkdir ${PATH_WEB}/${TIME}-web -p"
scp /opt/${TIME}-web.tar.gz ${IP}:${PATH_WEB}/${TIME}-web

#web服務器解壓代碼
ssh ${IP} "cd ${PATH_WEB}/${TIME}-web && tar xf ${TIME}-web.tar.gz && rm -rf ${TIME}-web.tar.gz"
ssh ${IP} "cd ${PATH_WEB} && rm -rf html && ln -s ${TIME}-web html"
EOF

#添加可執行權限
chmod +x /scripts/jenkins/deploy.sh

也可以使用jenkins內置的變量來代替自定義變量,查看jenkins內置變量的地址如下:

http://10.0.0.201:8080/env-vars.html

4.jenkins調用構建腳本

在構建的位置填寫執行shell腳本的命令

然后立即構建,發現報錯了,提示權限不足:

報錯原因是因為jenkins是以jenkins用戶運行的,所以提示權限不足,我們可以修改jenkins為root用戶運行。

[root@jenkins-201 ~]# vim /etc/sysconfig/jenkins 
[root@jenkins-201 ~]# grep "USER" /etc/sysconfig/jenkins 
JENKINS_USER="root"
[root@jenkins-201 ~]# systemctl restart jenkins

重啟好之后我們重新構建一下:

查看一下web服務器的代碼目錄

[root@web-7 ~]# ll /usr/share/nginx/
總用量 0
drwxr-xr-x 3 root root 50 8月   6 10:13 20200806-1013-web
lrwxrwxrwx 1 root root 17 8月   6 10:13 html -> 20200806-1013-web

第4章 監聽gitlab自動觸發構建

1.jenkins項目里添加構建觸發器

2.gitlab添加webhook

將剛才jenkins里配置的token和URL地址復制進去

較新版本的gitlab此時點擊添加會提示報錯:

解決方法:進入admin area區域,然后點擊setting-->network進行設置

正常添加成功之后,會在下方出現測試的選項

選擇push事件來測試是否可以正常出發,如果可以,會在頁面上方顯示200狀態碼

此時我們去查看jenkins項目頁面,就會發現以及出發了來自gitlab的構建任務

第5章 返回構建狀態給gitlab

1.gitlab生成access token

點擊創建之后會生成一串token,注意及時保存,因為刷新就沒有了

2.jenkins配置gitlab的token

點擊jenkins的系統管理-->系統設置,然后找到gitlab選項

填寫gitlab的信息:

點擊添加后返回上一層頁面,然后選中剛才添加的gitlab憑證

3.設置項目構建后將結果通知給gitlab

4.合並分支然后檢查gitlab能否收到消息

5.防止重復構建

jenkins具有很多內置變量,點擊項目-->構建--> 查看 可用的環境變量列表

http://10.0.0.201:8080/env-vars.html/

這里我們使用兩個變量,一個是此次提交的commit的hash,另一個是上一次提交成功的commit的hash

我們可以在部署腳本里添加一行判斷,如果這兩個變量一樣,那么就不用再次提交了

這些變量不需要在腳本里定義,直接引用即可

第6章 tag方式發布版本

1.給代碼打標簽

首先我們先給代碼打上標簽,然后提交2個版本

v1.0版本:修改代碼,然后發布v1.0版本

git commit -am 'v1.0'
git tag -a v1.0 -m "v1.0 穩定版"
git push -u origin v1.0
git tag

v2.0版本:修改代碼,然后發布v2.0版本

git commit -am 'v2.0'
git tag -a v2.0 -m "v2.0 穩定版"
git push -u origin v2.0
git tag

2.gitlab查看標簽

此時gitlab上可以看到2個標簽

點進去之后可以看到具體標簽名稱

3.jenkins配置參數化構建

jenkins上我們新建一個參數化構建項目

然后配置git的標簽參數:

最后還需要配置一下git倉庫地址,注意需要修改拉取的版本的變量為 $git_version

此時點擊項目的build with parameters就會看到對應的版本號:

然后去jenkins工作目錄下查看是否拉取了對應版本:

/var/lib/jenkins/workspace/my-deploy-rollback

4.優化部署腳本

cat >/scripts/jenkins/deploy_rollback.sh<<'EOF'
#!/bin/bash

PATH_CODE=/var/lib/jenkins/workspace/my-deploy-rollback/
PATH_WEB=/usr/share/nginx
IP=10.0.0.7

#打包代碼
cd ${PATH_CODE} 
tar zcf /opt/web-${git_version}.tar.gz ./*

#拷貝打包好的代碼發送到web服務器代碼目錄
ssh ${IP} "mkdir ${PATH_WEB}/web-${git_version} -p"
scp /opt/web-${git_version}.tar.gz ${IP}:${PATH_WEB}/web-${git_version}

#web服務器解壓代碼
ssh ${IP} "cd ${PATH_WEB}/web-${git_version} && tar xf web-${git_version}.tar.gz && rm -rf web-${git_version}.tar.gz"
ssh ${IP} "cd ${PATH_WEB} && rm -rf html && ln -s web-${git_version} html"
EOF

5.jenkins添加執行腳本動作並測試

6.測試發布

然后去web服務器上查看發現已經發布了

[root@web-7 ~]# ll /usr/share/nginx/
總用量 0
lrwxrwxrwx 1 root root  8 8月   6 15:59 html -> web-v2.0
drwxr-xr-x 3 root root 68 8月   6 15:59 web-v2.0

第7章 tag方式回滾版本

1.jenkins配置回滾選項參數

在工程配置里添加選項參數:

在參數化構建里添加2個選項:發布和回滾

此時查看構建頁面就會發現多了選項卡:

2.修改發布腳本增加條件判斷

cat >/scripts/jenkins/deploy_rollback.sh <<'EOF'
#!/bin/bash

PATH_CODE=/var/lib/jenkins/workspace/my-deploy-rollback/
PATH_WEB=/usr/share/nginx
IP=10.0.0.7

#打包代碼
code_tar(){
        cd ${PATH_CODE} 
        tar zcf /opt/web-${git_version}.tar.gz ./*
}

#拷貝打包好的代碼發送到web服務器代碼目錄
code_scp(){
        ssh ${IP} "mkdir ${PATH_WEB}/web-${git_version} -p"
        scp /opt/web-${git_version}.tar.gz ${IP}:${PATH_WEB}/web-${git_version}
}

#web服務器解壓代碼
code_xf(){
        ssh ${IP} "cd ${PATH_WEB}/web-${git_version} && tar xf web-${git_version}.tar.gz && rm -rf web-${git_version}.tar.gz"
}

#創建代碼軟鏈接
code_ln(){
        ssh ${IP} "cd ${PATH_WEB} && rm -rf html && ln -s web-${git_version} html"
}

main(){
        code_tar
        code_scp
        code_xf
        code_ln
}

#選擇發布還是回滾
if [ "${deploy_env}" == "deploy" ]
then
        ssh ${IP} "ls ${PATH_WEB}/web-${git_version}" >/dev/null 2>&1
        if [ $? == 0 -a ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ] 
        then
                echo "web-${git_version} 已部署,不允許重復構建"
                exit
        else 
                main
        fi
elif [ "${deploy_env}" == "rollback" ]
then
        code_ln
fi
EOF

3.測試回滾功能

部署v1.0版本

部署v2.0版本:

檢查web服務器當前的版本

[root@web-7 ~]# ll /usr/share/nginx/
總用量 0
lrwxrwxrwx 1 root root  8 8月   6 16:52 html -> web-v2.0
drwxr-xr-x 3 root root 68 8月   6 16:51 web-v1.0
drwxr-xr-x 3 root root 68 8月   6 16:52 web-v2.0

然后我們選擇v1.0版本並且選擇回滾操作:

查看控制台顯示回滾成功:

在web服務器上查看發現已經回滾成功:

[root@web-7 ~]# ll /usr/share/nginx/
總用量 0
lrwxrwxrwx 1 root root  8 8月   6 16:56 html -> web-v1.0
drwxr-xr-x 3 root root 68 8月   6 16:51 web-v1.0
drwxr-xr-x 3 root root 68 8月   6 16:52 web-v2.0

4.發布新代碼並打標簽測試

修改代碼並發布v3.0:

cd h5game/
echo v3.0 >> index.html
git commit -am 'v3.0'
git tag -a v3.0 -m 'v3.0 穩定版'       
git push -u origin v3.0
git tag

jenkins查看並發布3.0版本:

![image-20200806165818314](/Users/zhangya/Library/Application Support/typora-user-images/image-20200806165818314.png)

web服務器查看發布情況:

[root@web-7 ~]# ll /usr/share/nginx/
總用量 0
lrwxrwxrwx 1 root root  8 8月   6 16:58 html -> web-v3.0
drwxr-xr-x 3 root root 68 8月   6 16:51 web-v1.0
drwxr-xr-x 3 root root 68 8月   6 16:52 web-v2.0
drwxr-xr-x 3 root root 68 8月   6 16:58 web-v3.0

然后工程選擇回滾到v2.0版本:

再次在web服務器上查看:

[root@web-7 ~]# ll /usr/share/nginx/
總用量 0
lrwxrwxrwx 1 root root  8 8月   6 16:59 html -> web-v2.0
drwxr-xr-x 3 root root 68 8月   6 16:51 web-v1.0
drwxr-xr-x 3 root root 68 8月   6 16:52 web-v2.0
drwxr-xr-x 3 root root 68 8月   6 16:58 web-v3.0

第8章 打標簽工程

1.jenkins新建打標簽工程

2.配置參數化構建

3.配置工程的源碼管理

4.配置構建動作

配置命令:

git tag -a $git_newversion -m "$git_newversion 穩定版"
git push -u origin $git_newversion

5.發布新版本並提交到master

echo "v4.0" >> index.html 
git add .
git commit -m "v4.0 穩定版"
git push -u origin v4.0

6.jenkins使用打標簽工程來打標簽

查看控制台輸出發現提示沒有權限:

我們需要在gitlab上把deploy key設置允許寫入

然后重新構建


返回到deploy-rollback工程查看可以發現已經生成了新標簽,然后我們開始構建:

在web服務器上查看可以發現新版本已經發布成功了:

[root@web ~]# ll /usr/share/nginx/
總用量 20
lrwxrwxrwx 1 root root    8 5月  13 16:09 html -> web-v4.0
drwxr-xr-x 8 root root 4096 5月  13 16:05 web-
drwxr-xr-x 8 root root 4096 5月  13 15:00 web-v1.0
drwxr-xr-x 8 root root 4096 5月  13 15:00 web-v2.0
drwxr-xr-x 8 root root 4096 5月  13 15:37 web-v3.0
drwxr-xr-x 8 root root 4096 5月  13 16:09 web-v4.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM