持續集成 gitlab+jenkins(pipeline)實現代碼自動上線 環境準備:Centos7.6版本ip:192.168.0.13 主機名:gitip:192.168.0.23 主機名:jenkinsip:192.168.0.15 主機名:web01關閉防火牆關閉selinux分發公鑰使兩兩 ...
持續集成 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 [email protected]:dark/monitor.git
4eae6ad..19bf27d master -> master
Branch master set up to track remote branch master from origin.
過一會刷新頁面後,代碼成功自動更改,就成功了
#####################博客文章為原創,僅供參考學習使用######################