'一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程'

"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


測試gitlab和jenkins


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


測試gitlab和jenkins


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


測試gitlab和jenkins


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


正式編寫

  • pipeline
#!groovy
pipeline {
agent any
//環境變量,
environment {
REPOSITORY="ssh://[email protected]:10022/root/idig8.git"
MODULE="idig8"
SCRIPT_PATH="/root/"
remoteHost_tomcat= '192.168.66.103'

}
//流水線是如何提前,都是通過很多個stages下面的stage
stages {
stage('獲取代碼'){
steps{
echo " start fetch code from git ssh://[email protected]:10022/root/idig8.git"
deleteDir()
git "${REPOSITORY}"
}
}
stage('代碼靜態檢查') {
steps{
echo " start code check"
}
}
stage('編譯+單元測試') {
steps{
echo " start compile"
sh"""
cd $workspace/idig8/common-parent/
mvn -U clean install -Dmvn.test.skip=true -Ptest
"""
}
}

stage('jar包上傳到nexus上') {
steps{
echo " start maven update jar"
sh"""
cd $workspace/idig8/common-parent/common-utils
mvn clean deploy
cd $workspace/idig8/common-parent/common-dao
mvn clean deploy
cd $workspace/idig8/common-parent/common-service
mvn clean deploy
"""
}
}

stage('移動目錄到用戶目錄下') {
steps{
echo "mv idig8.war"
sh"""
mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war
"""
}
}
stage('拷貝文件到tomcat指定目錄下') {

steps{
echo "scp 目標文件"
sh"""
sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*';
sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war;
"""
echo "打包完畢美滋滋 刷新tomcat查看吧"
}
}

}
}


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


測試gitlab和jenkins


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


正式編寫

  • pipeline
#!groovy
pipeline {
agent any
//環境變量,
environment {
REPOSITORY="ssh://[email protected]:10022/root/idig8.git"
MODULE="idig8"
SCRIPT_PATH="/root/"
remoteHost_tomcat= '192.168.66.103'

}
//流水線是如何提前,都是通過很多個stages下面的stage
stages {
stage('獲取代碼'){
steps{
echo " start fetch code from git ssh://[email protected]:10022/root/idig8.git"
deleteDir()
git "${REPOSITORY}"
}
}
stage('代碼靜態檢查') {
steps{
echo " start code check"
}
}
stage('編譯+單元測試') {
steps{
echo " start compile"
sh"""
cd $workspace/idig8/common-parent/
mvn -U clean install -Dmvn.test.skip=true -Ptest
"""
}
}

stage('jar包上傳到nexus上') {
steps{
echo " start maven update jar"
sh"""
cd $workspace/idig8/common-parent/common-utils
mvn clean deploy
cd $workspace/idig8/common-parent/common-dao
mvn clean deploy
cd $workspace/idig8/common-parent/common-service
mvn clean deploy
"""
}
}

stage('移動目錄到用戶目錄下') {
steps{
echo "mv idig8.war"
sh"""
mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war
"""
}
}
stage('拷貝文件到tomcat指定目錄下') {

steps{
echo "scp 目標文件"
sh"""
sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*';
sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war;
"""
echo "打包完畢美滋滋 刷新tomcat查看吧"
}
}

}
}


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


只要push代碼流水線自動開啟工作,真是美滋滋啊

結果20輪的pipeline的編寫終於成功了

刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


測試gitlab和jenkins


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


正式編寫

  • pipeline
#!groovy
pipeline {
agent any
//環境變量,
environment {
REPOSITORY="ssh://[email protected]:10022/root/idig8.git"
MODULE="idig8"
SCRIPT_PATH="/root/"
remoteHost_tomcat= '192.168.66.103'

}
//流水線是如何提前,都是通過很多個stages下面的stage
stages {
stage('獲取代碼'){
steps{
echo " start fetch code from git ssh://[email protected]:10022/root/idig8.git"
deleteDir()
git "${REPOSITORY}"
}
}
stage('代碼靜態檢查') {
steps{
echo " start code check"
}
}
stage('編譯+單元測試') {
steps{
echo " start compile"
sh"""
cd $workspace/idig8/common-parent/
mvn -U clean install -Dmvn.test.skip=true -Ptest
"""
}
}

stage('jar包上傳到nexus上') {
steps{
echo " start maven update jar"
sh"""
cd $workspace/idig8/common-parent/common-utils
mvn clean deploy
cd $workspace/idig8/common-parent/common-dao
mvn clean deploy
cd $workspace/idig8/common-parent/common-service
mvn clean deploy
"""
}
}

stage('移動目錄到用戶目錄下') {
steps{
echo "mv idig8.war"
sh"""
mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war
"""
}
}
stage('拷貝文件到tomcat指定目錄下') {

steps{
echo "scp 目標文件"
sh"""
sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*';
sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war;
"""
echo "打包完畢美滋滋 刷新tomcat查看吧"
}
}

}
}


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


只要push代碼流水線自動開啟工作,真是美滋滋啊

結果20輪的pipeline的編寫終於成功了

刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


測試gitlab和jenkins


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


正式編寫

  • pipeline
#!groovy
pipeline {
agent any
//環境變量,
environment {
REPOSITORY="ssh://[email protected]:10022/root/idig8.git"
MODULE="idig8"
SCRIPT_PATH="/root/"
remoteHost_tomcat= '192.168.66.103'

}
//流水線是如何提前,都是通過很多個stages下面的stage
stages {
stage('獲取代碼'){
steps{
echo " start fetch code from git ssh://[email protected]:10022/root/idig8.git"
deleteDir()
git "${REPOSITORY}"
}
}
stage('代碼靜態檢查') {
steps{
echo " start code check"
}
}
stage('編譯+單元測試') {
steps{
echo " start compile"
sh"""
cd $workspace/idig8/common-parent/
mvn -U clean install -Dmvn.test.skip=true -Ptest
"""
}
}

stage('jar包上傳到nexus上') {
steps{
echo " start maven update jar"
sh"""
cd $workspace/idig8/common-parent/common-utils
mvn clean deploy
cd $workspace/idig8/common-parent/common-dao
mvn clean deploy
cd $workspace/idig8/common-parent/common-service
mvn clean deploy
"""
}
}

stage('移動目錄到用戶目錄下') {
steps{
echo "mv idig8.war"
sh"""
mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war
"""
}
}
stage('拷貝文件到tomcat指定目錄下') {

steps{
echo "scp 目標文件"
sh"""
sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*';
sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war;
"""
echo "打包完畢美滋滋 刷新tomcat查看吧"
}
}

}
}


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


只要push代碼流水線自動開啟工作,真是美滋滋啊

結果20輪的pipeline的編寫終於成功了

刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


測試gitlab和jenkins


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


正式編寫

  • pipeline
#!groovy
pipeline {
agent any
//環境變量,
environment {
REPOSITORY="ssh://[email protected]:10022/root/idig8.git"
MODULE="idig8"
SCRIPT_PATH="/root/"
remoteHost_tomcat= '192.168.66.103'

}
//流水線是如何提前,都是通過很多個stages下面的stage
stages {
stage('獲取代碼'){
steps{
echo " start fetch code from git ssh://[email protected]:10022/root/idig8.git"
deleteDir()
git "${REPOSITORY}"
}
}
stage('代碼靜態檢查') {
steps{
echo " start code check"
}
}
stage('編譯+單元測試') {
steps{
echo " start compile"
sh"""
cd $workspace/idig8/common-parent/
mvn -U clean install -Dmvn.test.skip=true -Ptest
"""
}
}

stage('jar包上傳到nexus上') {
steps{
echo " start maven update jar"
sh"""
cd $workspace/idig8/common-parent/common-utils
mvn clean deploy
cd $workspace/idig8/common-parent/common-dao
mvn clean deploy
cd $workspace/idig8/common-parent/common-service
mvn clean deploy
"""
}
}

stage('移動目錄到用戶目錄下') {
steps{
echo "mv idig8.war"
sh"""
mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war
"""
}
}
stage('拷貝文件到tomcat指定目錄下') {

steps{
echo "scp 目標文件"
sh"""
sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*';
sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war;
"""
echo "打包完畢美滋滋 刷新tomcat查看吧"
}
}

}
}


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


只要push代碼流水線自動開啟工作,真是美滋滋啊

結果20輪的pipeline的編寫終於成功了

刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


測試gitlab和jenkins


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


正式編寫

  • pipeline
#!groovy
pipeline {
agent any
//環境變量,
environment {
REPOSITORY="ssh://[email protected]:10022/root/idig8.git"
MODULE="idig8"
SCRIPT_PATH="/root/"
remoteHost_tomcat= '192.168.66.103'

}
//流水線是如何提前,都是通過很多個stages下面的stage
stages {
stage('獲取代碼'){
steps{
echo " start fetch code from git ssh://[email protected]:10022/root/idig8.git"
deleteDir()
git "${REPOSITORY}"
}
}
stage('代碼靜態檢查') {
steps{
echo " start code check"
}
}
stage('編譯+單元測試') {
steps{
echo " start compile"
sh"""
cd $workspace/idig8/common-parent/
mvn -U clean install -Dmvn.test.skip=true -Ptest
"""
}
}

stage('jar包上傳到nexus上') {
steps{
echo " start maven update jar"
sh"""
cd $workspace/idig8/common-parent/common-utils
mvn clean deploy
cd $workspace/idig8/common-parent/common-dao
mvn clean deploy
cd $workspace/idig8/common-parent/common-service
mvn clean deploy
"""
}
}

stage('移動目錄到用戶目錄下') {
steps{
echo "mv idig8.war"
sh"""
mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war
"""
}
}
stage('拷貝文件到tomcat指定目錄下') {

steps{
echo "scp 目標文件"
sh"""
sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*';
sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war;
"""
echo "打包完畢美滋滋 刷新tomcat查看吧"
}
}

}
}


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


只要push代碼流水線自動開啟工作,真是美滋滋啊

結果20輪的pipeline的編寫終於成功了

刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


"

幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開發

2005年2月開源併發布了第一個版本。

Hudson發佈的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke's Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。

2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社區的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,

2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:

mv -f hudson jenkins

Hudson和Jenkins都擁有代碼;

Hudson有Oracle和Sonatype's corporate的支持和Hudson的註冊商標

Jenkins擁有的是大多數的核心開發者,社區,和後續更多的commit。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


jenkins git 、maven gitlab 、tomcat 構建持續集成環境 流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。

4> 我們在build中要進行編譯,這裡使用了分佈式編譯器distcc來加快編譯速度。

jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然後根據設置的腳本進行build。我們可以看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執行的任務。

這次將結合一個比較簡單maven聚合項目,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通過源碼生成4個虛擬機,準備工作。vagrant已經安裝了 對應的docker。

用docker安裝nexus就是為了避免環境變量,用戶賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看

mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/

window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統類型IP地址節點角色CPUMemoryHostnameCentos7192.168.66.100gitlab22GgitlabCentos7192.168.66.101jenkins22GjenkinsCentos7192.168.66.102nexus22GnexusCentos7192.168.66.103tomcat22Gtomcat

(1). 虛擬機vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠程登錄root用戶下

su -
# 密碼
vagrant
#設置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


四臺機器公共執行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root

密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \\
--env 'DB_NAME=gitlabhq_production' \\
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \\
--env 'DB_EXTENSION=pg_trgm' \\
--volume ${cur_dir}/postgresql:/var/lib/postgresql \\
sameersbn/postgresql:10
docker run --name gitlab-redis -d \\
--volume ${cur_dir}/redis:/var/lib/redis \\
sameersbn/redis:4.0.9-1
docker run --name gitlab -d \\
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \\
--publish 10022:22 --publish 10080:80 \\
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\
--env 'GITLAB_ROOT_PASSWORD=123456789qwe' \\
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \\
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \\
--volume ${cur_dir}/gitlab:/home/git/data \\
sameersbn/gitlab[root@gitlab ~]#
  • 啟動gitlab

重點說下 不要用rz來上傳我提供的start.sh腳本sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了

sh start.sh
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.101 jenkins安裝

這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個腳本
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個人公眾號 編程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加環境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環境變量

如果環境變量不生效請執行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 下載jenkins

官網:https://jenkins.io/


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是後臺啟動
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • pipline的插件全部安裝


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 之前我也用docker安裝過jenkins插件老安裝失敗各種錯誤。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin

密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


66.103 tomcat安裝

tomcat 還講什麼?不懂?幹就完了 兄弟!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動腳本
sh start.sh


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • war包放在這裡


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


以上所有的程序安裝已經完畢,開始進行自動化的部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


環境回顧

應用IP地址服務端口安裝應用安裝方式


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到100上gitlab

  • 本地代碼

代碼比較簡單為的是流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 本地提交到gitlab上

修改配置,可以非本地化提交代碼


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


可以新建用戶建立倉庫,或者用root建立倉庫。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


提示沒有上傳ssh 祕鑰


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看本地的ssh祕鑰,window環境直接使用git bash

ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


查看jenkins的ssh祕鑰,101環境直接使

ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 和 101的jenkins添加完畢


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地windows 代碼提交

git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


本地項目部署到101上 jenkins

  • 全局安全性配置

一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程




一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


  • 創建任務


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


口令隨意寫,等下要在gitlab做觸發設置

Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


100 gitlab觸發器的設置

http://192.168.66.101:8888/job/idig8/build?token=123456

token的值就是jenkins上設置的。


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程



一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


等下有專門的對pipeline的編寫


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


保存


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


101的配置私服nexus

cd .m2

pwd

vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url>
</mirror>
</mirrors>

<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

</settings>


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。

 yum -y install sshpass


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


測試gitlab和jenkins


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


正式編寫

  • pipeline
#!groovy
pipeline {
agent any
//環境變量,
environment {
REPOSITORY="ssh://[email protected]:10022/root/idig8.git"
MODULE="idig8"
SCRIPT_PATH="/root/"
remoteHost_tomcat= '192.168.66.103'

}
//流水線是如何提前,都是通過很多個stages下面的stage
stages {
stage('獲取代碼'){
steps{
echo " start fetch code from git ssh://[email protected]:10022/root/idig8.git"
deleteDir()
git "${REPOSITORY}"
}
}
stage('代碼靜態檢查') {
steps{
echo " start code check"
}
}
stage('編譯+單元測試') {
steps{
echo " start compile"
sh"""
cd $workspace/idig8/common-parent/
mvn -U clean install -Dmvn.test.skip=true -Ptest
"""
}
}

stage('jar包上傳到nexus上') {
steps{
echo " start maven update jar"
sh"""
cd $workspace/idig8/common-parent/common-utils
mvn clean deploy
cd $workspace/idig8/common-parent/common-dao
mvn clean deploy
cd $workspace/idig8/common-parent/common-service
mvn clean deploy
"""
}
}

stage('移動目錄到用戶目錄下') {
steps{
echo "mv idig8.war"
sh"""
mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war
"""
}
}
stage('拷貝文件到tomcat指定目錄下') {

steps{
echo "scp 目標文件"
sh"""
sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*';
sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war;
"""
echo "打包完畢美滋滋 刷新tomcat查看吧"
}
}

}
}


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


只要push代碼流水線自動開啟工作,真是美滋滋啊

結果20輪的pipeline的編寫終於成功了

刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


一切從實操出發!jenkins和maven,gitlab如何實現自動化部署流程


PS:完成自動化部署,終於完成了 ,在自己的虛擬機環境下搞了3天,感覺好有成就感,首選shell腳本部署學習,pipeline並不是那麼麻煩。裡面多半是用shell的方式搞定了,多虧自己搞了2年shell的開發。沒忘記,必須前2年瞭解的東西確定對自己的以後的路起關鍵作用。ssh的公鑰也在裡面起到了很重要的作用,希望老鐵按照我的思路可以輕鬆的完成部署。感謝老鐵的支持,

"

相關推薦

推薦中...