基於gitlab和jenkins的自動化部署html
Gitlab基於Jenkins自動化部署教程:java
http://www.javashuo.com/article/p-zypbbqcq-dq.htmlpython
http://www.javashuo.com/article/p-oygjlpth-kv.htmllinux
GitLab是一個代碼倉庫,用來管理代碼。git
Jenkins是一個自動化服務器,能夠運行各類自動化構建、測試或部署任務。因此這二者結合起來,就能夠實現開發者提交代碼到GitLab,Jenkins以必定頻率自動運行測試、構建和部署的任務,幫助開發團隊更高效的集成和發佈代碼。web
GitLab:是一個基於Git實現的在線代碼倉庫託管軟件,你能夠用gitlab本身搭建一個相似於Github同樣的系統,通常用於在企業、學校等內部網絡搭建git私服。
功能:Gitlab 是一個提供代碼託管、提交審覈和問題跟蹤的代碼管理平臺。對於軟件工程質量管理很是重要。
版本:GitLab 分爲社區版(CE) 和企業版(EE)。
配置:建議CPU2核,內存2G以上。正則表達式
Nginx:靜態web服務器。
gitlab-shell:用於處理Git命令和修改authorized keys列表。(Ruby)
gitlab-workhorse: 輕量級的反向代理服務器。(go)redis
GitLab Workhorse是一個敏捷的反向代理。它會處理一些大的HTTP請求,好比文件上傳、文件下載、Git push/pull和Git包下載。其它請求會反向代理到GitLab Rails應用,即反向代理給後端的unicorn。算法
logrotate:日誌文件管理工具。
postgresql:數據庫。
redis:緩存數據庫。
sidekiq:用於在後臺執行隊列任務(異步執行)。(Ruby)
unicorn:An HTTP server for Rack applications,GitLab Rails應用是託管在這個服務器上面的。(Ruby Web Server,主要使用Ruby編寫)sql
3、gitlab的安裝配置
一、安裝依賴性:
yum install curl policycoreutils openssh-server openssh-clients postfix
二、查看服務狀態確保開啓:
systemctl status postfix.service
三、安裝工具包:
yum install -y net-tools
四、下載安裝gitlab:
gitlab開源軟件鏡像站:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.5.3-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-12.5.3-ce.0.el7.x86_64.rpm
yum install policycoreutils-python
再次進行安裝:rpm -ivh gitlab-ce-12.5.3-ce.0.el7.x86_64.rpm
五、編輯配置文件寫入當前主機IP(注:下面第8部能夠一塊兒編輯):
vim /etc/gitlab/gitlab.rb
六、初始化gitlab:gitlab-ctl reconfigure
七、重載服務:gitlab-ctl restart
八、修改gitlab倉庫路徑:
建立/data/gitlab目錄
mkdir -p /data/gitlab
修改gitlab配置文件
vim /etc/gitlab/gitlab.rb
在git_data_dir的path裏面添加 "/data/gitlab"(注:這裏去掉前面的#符號)
中止當前gitlab,從新加載配置
gitlab-ctl stop
gitlab-ctl reconfigure
從新加載後,會發如今/data/gitlab目錄下多出一個repositories目錄
最後啓動gitlab便可
gitlab-ctl start
九、在瀏覽器輸入IP地址進行驗證,是否安裝成功,另外輸入8位密碼:
(我這裏是admin123456)
十、設置用戶密碼:root,admin123456
登錄成功:
十一、建立一個新工程:
十二、配置gitlab免密鏈接:
(1)前提:得有一個代碼倉庫,而後在倉庫建立分支並建立文件,這裏已存在
(2)其次,得配置一個ssh公鑰到gitlab上,這樣才能模擬開發上傳代碼到gitlab
使用ssh-keygen生成私鑰和公鑰:(rsa加密算法生成)
ssh-keygen -t rsa -C 1483415221@qq.com
這裏須要:三次回車
查看公鑰:cat id_rsa.pub
將公鑰放到密鑰欄裏,這樣就可使用ssh方式來上傳代碼了:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKt4gqFEGve5I9m7S+j5Rtd78h3EsaUkHEJcuVjVEQrMmmQbbHOX7ZVPcm6+oBiWi31tB7OMajNg+qSELg8fYECDePLLeBwrPUuMLt7k7nJZ/YmbZ241d2h8zTPZ+xyQ9NPfatWzr6NpjdCXjrMz9+8w4BiCAdXIC2lVr0Aef50gpgaRwy18CZrV8P/qynv8N2r/zGge6xKgbTr11AVCp2SEkEI5E1NpyxBEyrj32/LWOODZ84NSLF8SYlbMIE12xwo+ueVmhhQSB6XryrsF5AYGcESICHmvzMO76JSGnQPwmxyPZa2d44cOMOj2HNB0m2I2P7dDTJ37eFWzZzSU8h
1三、克隆代碼倉庫,而後測試是否可以上傳代碼到gitlab:
git clone git@192.168.5.11:root/wyl.git
修改文本內容,提交到gitlab上看可否同步上去:
git add README.md 提交到暫存區
git commit -m "add README.md" 直接提交
git config --global user.email 1483415221@qq.com
git config --global user.name root
git commit -m "add README.md"
git push
這裏是用shell編寫的一個文本提交至gitlab:
echo 123456 > rc.txt
git add .
git commit -m "rc.txt"
git push
到這裏gitlab就配置完成。
4、Jenkins介紹
一、Jenkins 是什麼?
Jenkins 是一個可擴展的持續集成引擎。
二、主要用於:
持續、自動地構建/測試軟件項目。
監控一些定時執行的任務。
三、Jenkins 擁有的特性包括:
易於安裝-只要把jenkins.war部署到servlet容器,不須要數據庫支持。
易於配置-全部配置都是經過其提供的web界面實現。
集成RSS/E-mail經過RSS發佈構建結果或當構建完成時經過e-mail通知。
生成JUnit/TestNG測試報告。
分佈式構建支持Jenkins可以讓多臺計算機一塊兒構建/測試。
文件識別:Jenkins可以跟蹤哪次構建生成哪些jar,哪次構建使用哪一個版本的jar等。
插件支持:支持擴展插件,你能夠開發適合本身團隊使用的工具。
四、Jenkins 安裝部署方式(如下4種方式後續都會寫到):
(1)直接下載war包jenkins.war部署到servlet容器中,如tomcat,下載地址https://jenkins.io/download
(2)下載war包使用命令直接運行war包,java -jar jenkins.war
(3)windows下載zip包解壓運行jenkins.exe便可安裝成windows服務
(4)下載rpm包在linux下安裝並配置服務
5、Jenkins安裝配置
教程:https://blog.csdn.net/xishaoguo/article/details/88577459
一、下載Jenkins包:https://jenkins.io/zh/download/
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.3-1.1.noarch.rpm
若是這裏下載速度過慢,也能夠用rz本地直接上傳。
二、安裝Jenkins:
sudo rpm -ih jenkins-2.190.3-1.1.noarch.rpm
自動安裝完成以後:
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置文件
/var/lib/jenkins/ 默認的JENKINS_HOME目錄
/var/log/jenkins/jenkins.log Jenkins日誌文件
三、啓動Jenkins:sudo service jenkins start
解決辦法:修改java路徑便可
find / -name jenkins
cd /etc/rc.d/init.d/
vim jenkins
上圖是默認路徑,修改成本機java路徑,以下圖一步到位便可:
sudo service jenkins start
systemctl daemon-reload 按提示:需重新加載單元
service jenkins start
service jenkins stop 中止Jenkins服務
service jenkins restart 重啓Jenkins服務
這裏若是防火牆未關閉,需先關閉,再啓動jenkins:systemctl stop firewalld.service
查看Jenkins是否正常運行,以下圖表示未運行:systemctl status jenkins
修改Jenkins端口號:vim /etc/sysconfig/jenkins
service jenkins start
systemctl status jenkins
瀏覽器驗證失敗,以下圖:
不少人說gitlab很佔內存,難道個人2G內存也被佔完了嗎?因而使用free命令看了一下:
free -h
發現個人運行內存就剩77M了,因而停掉gitlab:
gitlab-ctl stop
再次查看有可用內存了:free -h
而後這裏須要再次啓動Jenkins:
service jenkins start
systemctl status jenkins
再次在瀏覽器驗證,以下圖表示成功:192.168.5.11:8082
四、網頁配置Jenkins:
根據提示在虛擬機獲取初始化密碼:cat /var/lib/jenkins/secrets/initialAdminPassword
複製粘貼進去,進行下一步:
52b6aedc282f4e2ea322a2d563c95a16
這裏自動安裝插件,安裝失敗點擊重試,但有時候由於網絡緣由能夠跳過這一步:
建立管理員用戶,保存完成:
到這裏Jenkins就安裝完成啦。
五、因爲上面插件加載失敗,這裏須要先從新登陸,再安裝Jenkins所需插件:
個人Jenkins插件上面未安裝成功,這裏從新安裝,點擊系統管理--插件管理--搜索--勾選安裝便可:
須要安裝的插件:Gitlab Hook、Build Authorization Token Root、Publish Over SSH、Gitlab Authentication、Gitlab、Git Parameter、Maven Integration plugin
插件安裝失敗,有兩種緣由:
一、請求超時,網絡正常的時候從新安裝便可;
二、安裝時沒有依賴的安裝包。
若是Jenkins屢次安裝都不行須要換種方式解決:
http://www.javashuo.com/article/p-hfhooove-gy.html
Jenkins插件下載地址:
http://updates.jenkins-ci.org/download/plugins/
以下圖,所需插件均已安裝完成:
六、添加完插件重啓jenkins,開始添加要部署代碼的主機,注意必定是要可以經過ssh登錄的用戶。
添加主機:系統管理 - 系統設置 找到Publish over SSH設置免密便可,以下圖:
設置好以後,測試報錯:
這是因爲服務器上的sshd服務沒有開啓致使的,登陸到服務器上執行命令:
sudo service sshd start //開啓sshd服務
將公鑰拷貝到authorized_keys文件,發現以前的用戶1483415221@qq.com被添加進去,以下圖:
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
七、系統管理--->全局工具配置
修改maven默認settings.xml文件,配置git、jdk、maven工具後保存(不要勾選自動安裝)
Git配置按下圖所示環境走:
八、Jenkins中建立一個job:
輸入項目名,構建一個自由風格的項目:
如下是Git配置:
構建觸發器:
http://192.168.5.11:8082/project/testwyl
這個URL待會配置gitlab會用到,以下圖所示用正則表達式生成gitlab webbook的安全令牌ef04574b270a8be397af2c7789493f8d(每次都生成新的)
當前代碼部署到的目錄,而後重啓服務,以下圖:
配置gitlab:
取消ssl勾選,由於咱們沒有在Jenkins上配置https,最後點擊增長web鉤子
這裏報錯是由於使用的最新版本的gitlab,這是由於新版的gitlab爲了安全默認禁止了本地局域網地址調用web hook,咱們在設置裏容許就行,具體步驟以下:
再次添加web鉤子,而後進行test,以下圖表示配置成功了:
以下圖,測試的記錄共3次:
九、測試提交代碼是否會部署到遠程主機:
git clone git@192.168.5.11:root/wyl.git
cd wyl/
echo '測試Jenkins' > index.html
git add .
git commit -m 'add index.html'
git push
#提交以後去jenkins頁面看看
以下圖是構建成功的項目: