'一切從實操出發!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
- 歷史
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
測試gitlab和jenkins
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
測試gitlab和jenkins
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
測試gitlab和jenkins
正式編寫
- 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
- 歷史
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
測試gitlab和jenkins
正式編寫
- 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查看吧"
}
}
}
}
只要push代碼流水線自動開啟工作,真是美滋滋啊
結果20輪的pipeline的編寫終於成功了
刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
測試gitlab和jenkins
正式編寫
- 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查看吧"
}
}
}
}
只要push代碼流水線自動開啟工作,真是美滋滋啊
結果20輪的pipeline的編寫終於成功了
刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
測試gitlab和jenkins
正式編寫
- 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查看吧"
}
}
}
}
只要push代碼流水線自動開啟工作,真是美滋滋啊
結果20輪的pipeline的編寫終於成功了
刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
測試gitlab和jenkins
正式編寫
- 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查看吧"
}
}
}
}
只要push代碼流水線自動開啟工作,真是美滋滋啊
結果20輪的pipeline的編寫終於成功了
刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
測試gitlab和jenkins
正式編寫
- 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查看吧"
}
}
}
}
只要push代碼流水線自動開啟工作,真是美滋滋啊
結果20輪的pipeline的編寫終於成功了
刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到服務器,給服務器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的項目,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動項目。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的項目,還持續停留在這個腳本上運維人員都累死了,因為有可能一次部署幾十個項目。
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 git 、maven gitlab 、tomcat 構建持續集成環境 流程
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
四臺機器公共執行命令
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
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
官網:https://jenkins.io/
下載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 &
- pipline的插件全部安裝
- 之前我也用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
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
- war包放在這裡
以上所有的程序安裝已經完畢,開始進行自動化的部署流程
環境回顧
應用IP地址服務端口安裝應用安裝方式
本地項目部署到100上gitlab
- 本地代碼
代碼比較簡單為的是流程
- 本地提交到gitlab上
修改配置,可以非本地化提交代碼
可以新建用戶建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
查看本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]"
cat /c/Users/Administrator/.ssh/id_rsa.pub
查看jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]"
cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins添加完畢
本地windows 代碼提交
git init
git add .
git commit -m "註釋語句"
git remote add origin ssh://[email protected]:10022/root/idig8.git
git push -u origin master
本地項目部署到101上 jenkins
- 全局安全性配置
- 創建任務
口令隨意寫,等下要在gitlab做觸發設置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設置的。
等下有專門的對pipeline的編寫
保存
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>
安裝sshpass,ssh登陸不能在命令行中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非交互SSH的密碼驗證,一般用在sh腳本中,無須再次輸入密碼。
yum -y install sshpass
測試gitlab和jenkins
正式編寫
- 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查看吧"
}
}
}
}
只要push代碼流水線自動開啟工作,真是美滋滋啊
結果20輪的pipeline的編寫終於成功了
刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去
PS:完成自動化部署,終於完成了 ,在自己的虛擬機環境下搞了3天,感覺好有成就感,首選shell腳本部署學習,pipeline並不是那麼麻煩。裡面多半是用shell的方式搞定了,多虧自己搞了2年shell的開發。沒忘記,必須前2年瞭解的東西確定對自己的以後的路起關鍵作用。ssh的公鑰也在裡面起到了很重要的作用,希望老鐵按照我的思路可以輕鬆的完成部署。感謝老鐵的支持,