持續集成 gitlab+jenkins(pipeline)實現代碼自動上線
環境准備:
Centos7.6版本
ip:192.168.0.13 主機名:git
ip:192.168.0.23 主機名:jenkins
ip:192.168.0.15 主機名:web01
關閉防火牆
關閉selinux
分發公鑰使兩兩主機間可以免密碼連通
192.168.0.13主機上
1.安裝gitlab
#安裝gitlab要先安裝如下依賴包
[root@git git_data]# yum install -y curl policycoreutils-python openssh-server
#再安裝gitlab軟件包
[root@git git_data]# rpm -ivh gitlab-ce-10.2.0-ce.0.el7.x86_64.rpm
2.修改gitlab的配置文件
[root@git git_data]# vim /etc/gitlab/gitlab.rb
...
external_url 'http://192.168.0.13' #在13行位置,修改url地址為本機的ip地址
3.重新配置gitlab
[root@git ~]# gitlab-ctl reconfigure
4.查看gitlab的狀態
[root@git monitor]# gitlab-ctl status
5.然后就可以登錄gitlab了谷歌瀏覽器輸入http://192.168.0.13,第一次登錄會提示修改密碼,用戶名為root,密碼為修改后的密碼
192.168.0.23主機上
1.安裝jenkins和jdk
[root@jenkins ~]# rpm -ivh jdk-8u181-linux-x64.rpm
[root@jenkins ~]# rpm -ivh jenkins-2.99-1.1.noarch.rpm
2.編輯配置文件改user為root
[root@jenkins ~]# vim /etc/sysconfig/jenkins
...
JENKINS_USER="root"
3.確認jdk已經安裝再啟動jenkins
[root@jenkins ~]# systemctl start jenkins
4.登錄jenkins,在瀏覽器輸入http://192.168.0.23,第一次登錄會提示輸入密碼
復制下面文件下的密碼到web頁面中到密碼框
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
fc0da02333a443799c90dead163240a0
5.輸入密碼后,繼續可能會有提示創建用戶,暫時不創建,因為默認有管理員賬號密碼
管理員賬號為admin登錄后修改密碼為123
6.接着安裝jenkins的必要插件
下載好插件包jenkins-plugins.tar.gz
安裝jenkins插件,把下載的壓縮包解壓到/var/lib/jenkins/plugins
把壓縮包里的plugin目錄下的文件移動到/var/lib/jenkins/plugins下即可
7.刷新頁面在系統管理下就可查看到安裝的插件了
192.168.0.15主機上
1.搭建好nginx環境
安裝nginx,安裝配置方法可看我上一篇博客
上面步驟完成了gitlab,jenkins和nginx的搭建和部署,接下來就可以進行代碼項目的部署了
為了練習,這里在碼雲上面找了個開源項目
接着把碼雲的項目代碼導入到gitlab,方法如下圖1,2,3
完成代碼導入后繼續下面的操作
代碼的拉取和推送要先有代碼倉庫權限,因此要把git和jenkins主機的root用戶的ssh公鑰放到gitlab上,
然后可以在命令行進行測試:git clone
在gitlab添加公鑰的方法如下圖
開始新建pipeline項目,pipeline的聲明式腳本執行后可以查看到詳細的每一步執行,如果有錯誤還會提示錯誤位置和信息。
下面圖片的順序為操作步驟的順序,要按照下面圖片順序來搭建:
下面代碼為pipeline的聲明式腳本
pipeline{ agent any stages{ stage("get code"){ steps{ echo "get code" } } stage("unit test"){ steps{ echo "unit test" } } stage("package"){ steps{ sh 'tar zcf /opt/web-${BUILD_ID}.tar.gz' ./* --exclude=.git --exclude=Jenkinsfile } } stage("deploy"){ steps{ sh 'ssh 192.168.0.15 "cd /usr/share/nginx/ && mkdir web-${BUILD_ID}"' sh 'scp /opt/web-${BUILD_ID}.tar.gz 192.168.0.15:/usr/share/nginx/web-${BUILD_ID}' sh 'ssh 192.168.0.15 "cd /usr/share/nginx/web-${BUILD_ID} && tar xf web-${BUILD_ID}.tar.gz && rm -fr web-${BUILD_ID}.tar.gz"' sh 'ssh 192.168.0.15 "cd /usr/share/nginx/ && rm -fr html && ln -s web-${BUILD_ID} html"' } } } }
以下為測試部分:
谷歌瀏覽器輸入http://192.168.0.15
下圖為修改代碼的操作
[root@git monitor]# grep -n "dark上傳模擬" index.html #修改后查看修改的代碼 43: <a class="logo pull-left" href="index.html" style="width: 233px">dark上傳模擬</a>
[root@git monitor]# git commit -am "modified index.html" #把修改的代碼文件提交到本地倉庫 [master 19bf27d] modified index.html 1 file changed, 1 insertion(+), 1 deletion(-) [root@git monitor]# git push -u origin master #把本地倉庫的文件提交到遠程倉庫gitlab上 Counting objects: 5, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 329 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) To git@192.168.0.13:dark/monitor.git 4eae6ad..19bf27d master -> master Branch master set up to track remote branch master from origin.
過一會刷新頁面后,代碼成功自動更改,就成功了
#####################博客文章為原創,僅供參考學習使用######################