jenkins主機內存和gitlab主機內存最好配置4G及以上,防止各自的web端打不開
1.配置JDK環境
1)jdk解壓到此目錄
[root@localhost src]# pwd /usr/local/src
[root@localhost src]# tar xvf jdk-8u211-linux-x64.tar.gz
2)創建jdk相關的軟連接
[root@localhost src]# ln -sv jdk1.8.0_211/ jdk
[root@localhost src]# ln -sv /usr/local/src/jdk/bin/* /usr/bin/
3)配置jdk的環境變量
[root@localhost src]# vim /etc/profile
……
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
4)環境變量生效
[root@localhost src]# source /etc/profile
5)測試java命令並查看java的版本號
[root@localhost src]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
2.安裝並配置jenkins
1)下載rpm包並進行安裝,可以看到jenkins的rpm包在安裝時無依賴
[root@localhost rpm]# ls
jenkins-2.164.3-1.1.noarch.rpm
[root@localhost rpm]# rpm -ivh jenkins-2.164.3-1.1.noarch.rpm
warning: jenkins-2.164.3-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:jenkins-2.164.3-1.1 ################################# [100%]
2)修改jenkins的配置文件
[root@localhost jenkins]# grep '^[a-Z]' /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins" #jenkins的家目錄,保存着其構建的項目、安裝的插件、
JENKINS_JAVA_CMD=""
JENKINS_USER="root" #默認是jenkins用戶,這裏將這裏改爲root用戶,避免將來部署代碼到後端服務因爲權限問題導致部署失敗
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dcom.sun.management.jmxremote #options選項中開啓監控功能,爲zabbix等監控軟件提供一個監控接口
-Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname="192.168.1.15""
JENKINS_PORT="8080"
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
3)啓動jenkins服務
[root@localhost rpm]# systemctl start jenkins
4)查看jenkins服務監聽的端口
[root@localhost rpm]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
……
LISTEN 0 50 :::8080 :::*
users:(("java",pid=2739,fd=166))
……
3.瀏覽器訪問jenkins的web端並登錄
1)瀏覽器訪問8080端口
2)服務器主機上查看此初始化管理員祕鑰文件,並將祕鑰輸入登錄jenkins的web端
[root@localhost rpm]# cat /var/lib/jenkins/secrets/initialAdminPassword
fb58302d30c34478b086244bd725bc68
3)安裝默認推薦插件
4)創建一個管理員賬號
5)進入jenkins主界面
4.安裝gitlab和blue ocean相關必要插件
1)在插件管理中過濾出需要安裝插件
2)正在安裝gitlab相關的插件
3)安裝一個blue ocean插件,是一個界面顯示插件
4)安裝角色權限插件
5.創建新用戶和角色以及權限管理等
1)創建一個新用戶
2)打開全局安全設置,將認證類型改爲角色認證,默認的認證類型是登錄用戶可以做任何事
3)創建一個角色
4)只給此角色分配一個讀權限
5)將新創建的用戶服務common角色
6)利用新創建的用戶登錄jenkins客戶端
7)可以看到此時的普通用戶登錄後沒看到系統管理這個選項,普通用戶無權限,設置了只有讀權限
8)此時創建一個job
9)可以看到沒有權限創建job
6.配置管理員郵箱
1)進入系統管理選擇系統設置,填寫管理員的郵箱配置
2)郵箱測試
7.通過ssh_key自動拉取gitlab中的代碼
在gitlab的web端
1)點擊用戶裏面的setting並找到ssh keys選項
2)再將jenkeys的服務器的公鑰添加到gitlab服務器
在jenkins服務端
1)此時可在命令行直接拉取gitlab的代碼
[root@jenkins ~]# git clone [email protected]:jie/web-page.git
Cloning into 'web-page'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), 244 bytes | 0 bytes/s, done.
2)查看拉取的代碼目錄
[root@jenkins ~]# ls
anaconda-ks.cfg dump.rdb sentinel_26379.log web-page
3)進入目錄查看代碼內容,實現了在命令行直接拉取gitlab代碼
[root@jenkins ~]# cat web-page/index.html
<h1>welcom to my gitlab page!</h1>
4)給jenkins的web端添加上自己的私鑰,實現在jenkins的web端直接拉取代碼
5)在構建一個項目工程
6)在點擊源碼管理選項進行連接gitlab的倉庫地址配置、認證方式選擇爲私鑰
7)點擊立即構建
8)查看最近一次構建
9)查看控制檯輸出(console output)
10)jenkins的服務端驗證所拉取的gitlab數據
[root@jenkins ~]# ls -a /var/lib/jenkins/workspace/website-html
. .. .git index.html
8.jenkins的web服務端通過shell腳本自動部署代碼到後端服務
1)在jenkins服務端將免密認證文件發送到後端服務nginx的www用戶的家目錄下
[root@jenkins ~]# ssh-copy-id [email protected]
2)指定gitlab倉庫連接url、認證類型
3)在構建環境中選擇構建項目之前刪除工作區間,編寫構建中的shell腳本,再保存
4)在立即構建項目,並查看控制檯輸出的狀態如下
5)在jenkins的服務端檢查代碼是否部署到本地
[root@jenkins ~]# ll /var/lib/jenkins/workspace/website-html/
total 16
-rw-r--r-- 1 root root 34 Jul 23 00:20 index.html
-rw-r--r-- 1 root root 10240 Jul 23 00:20 index.tar.gz
6)在後端服務nginx檢查代碼是否部署成功
[root@localhost html]# ll
total 16
-rw-r--r-- 1 www www 34 Jul 23 00:20 index.html
-rw-r--r-- 1 www www 10240 Jul 23 00:20 index.tar.gz
7)瀏覽器訪問後端服務nginx
9.構建觸發器,實現當一提交代碼到gitlab倉庫就觸發jenkins自動部署代碼到後端服務
gitlab服務
1)在一個項目裏,點擊Branch
2)創建一個開發新分支
jenkins服務端
1)點擊系統管理,再找到全局安全設置
2)選擇登錄用戶可以做任何事、取消"防止跨站點請求僞造”
3)安裝這兩插件
4)新建一個job
5)配置項目的源碼管理,指定其gitlab倉庫的url、認證類型、開發分支等
6)生成一個認證祕鑰隨機數
[root@jenkins ~]# openssl rand -hex 16
2fc11d619fe0c21facf6ddf71504a08e
7)將以上生成的隨機數作爲構建觸發器認證的token
8)構建簡單的測試命令
9)檢查本地的項目配置文件保存的構建觸發器的遠程認證祕鑰、執行的shell命令
10)訪問url測試自否自動觸發立即構建項目
或者直接curl
[root@jenkins ~]# curl http://192.168.1.15:8080/job/develop/build?token=2fc11d619fe0c21facf6ddf71504a08e
11)發現當訪問文url時會自動觸發構建項目
12)再修改爲正式的構建shell遠程執行命令,當一提交代碼到gitlab倉庫會自動觸發將代碼部署到nginx服務器
gitlab服務端
1)找到system hooks系統鉤子,點擊系統鉤子進行配置
2)輸入jenkins中的認證url,其他選項保持默認,點擊add system hook添加系統鉤子
3)點擊測試系統鉤子的可用性
4)出現201代碼,建立連接成功,檢測成功
在nginx服務端,克隆gitlab倉庫代碼,預先安裝好git工具
1)指定從develop分支克隆代碼,並填寫登錄用戶名及密碼
[root@nginx ~]# git clone -b develop http://192.168.1.30/jie/web-page.git
Cloning into 'web-page'...
Username for 'http://192.168.1.30': jie
Password for 'http://[email protected]':
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 18 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (18/18), done.
2)查看克隆下來的代碼環境
[root@nginx ~]# cd web-page/
[root@nginx web-page]# ls -a
. .. .git index.html
3)查看代碼內容,並將代碼修改
[root@nginx web-page]# cat index.html
<h1>welcom to my develop page</h1>
[root@nginx web-page]# vim index.html
<h1>welcom to my develop page</h1>
<h2>welcom to my develop page</h2>
<h3>welcom to my develop page</h3>
<h4>welcom to my develop page</h4>
4)將修改好的代碼添加到本地暫存區
[root@nginx web-page]# git add index.html
5)再將代碼提交到工作區
[root@nginx web-page]# git commit -m 'audi_q7'
[develop b560fe3] audi_q7
1 file changed, 3 insertions(+), 1 deletion(-)
6)最後再提交到gitlab代碼庫
[root@nginx web-page]# git push
Username for 'http://192.168.1.30': jie
Password for 'http://[email protected]':
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 280 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for develop, visit:
remote: http://192.168.1.30/jie/web-page/merge_requests/new?merge_request%5Bsource_branch%5D=develop
remote:
To http://192.168.1.30/jie/web-page.git
de793ac..b560fe3 develop -> develop
7)在jenkins服務器上查看,可以看到自動觸發構建
8)查看jenkins的控制檯輸出信息,代碼部署到nginx服務成功
9)查看代碼是否部署到nginx服務器
root@nginx ~]# ll /usr/share/nginx/html/
total 16
-rw-r--r-- 1 www www 140 Jul 24 19:51 index.html
-rw-r--r-- 1 www www 10240 Jul 24 19:51 index.tar.gz
10)查看nginx服務是否正常啓動
[root@nginx ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2019-07-24 19:51:12 CST; 4min 38s ago
Process: 7582 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 7580 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 7578 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 7584 (nginx)
CGroup: /system.slice/nginx.service
├─7584 nginx: master process /usr/sbin/nginx
├─7585 nginx: worker process
└─7586 nginx: worker process