





Jenkins 構建
鏡像庫,容器云
服務器上傳文件命令,跟SCP類似
yum install lrzsz -y
// 選擇本地文件并上傳
rz -y
# 前言
目前主流網站部署方法,通過Hudson/Jenkins工具平臺實現(xiàn)全自動部署+測試,是一個可擴展的持續(xù)集成引擎,是一個開源軟件項目
持續(xù)集成組件
1)一個自動構建過程,包括自動編譯、分發(fā)、部署、測試。
2)一個代碼倉庫,SVN, GIT
3)一個jenkins持續(xù)集成服務器
jenkins屬于一個java代碼,需要java容器才可以運行Jenkins,所以需要在服務器安裝JDK+Tomcat
1 java jdk安裝
https://www.yuque.com/allblue-byynd/ezv40n/qmxvg0
先查看是否已安裝jdk
java -version

拷貝文件:
將/usr/xu目錄中的所有文件及其子目錄拷貝到目錄/usr/liu中,命令如下:
$ cp - r /usr/xu/ /usr/liu/
2.安裝tomcat


進入 /usr/lib/tomcat 目錄,執(zhí)行命令下載
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.39/bin/apache-tomcat-8.5.39.tar.gz
解壓到指定目錄
tar -zxvf apache-tomcat-8.5.39.tar.gz
cd apache-tomcat-8.5.39/conf/
啟動tomcat
然后我們返回到apache-tomcat-8.5.39目錄下,用cd 命令進入到bin目錄下,啟動tomcat
命令:sh startup.sh

http://ip:8080/? 訪問tomcat主頁
指向的資源目錄是 tomcat/webapps/ROOT/index.jsp
./shutdown.sh
./startup.sh
重啟tomcat,然后切換到tomcat的logs目錄,鍵入
tail -f catalina.out

運行起來之后,瀏覽器訪問tomcat顯示404

可能是端口被占用
查看8080端口
netstat -nltp | grep 8080
下載jenkins.war
https://www.jenkins.io/download/
刪除tomcat/webapps/ROOT 目錄下的所有東西
把下載下來的jenkins.war上傳到這里
啟動Jenkins服務
執(zhí)行命令:
java -jar jenkins.war
報錯信息如下,沒有指定端口號,或者端口號被占用

指定端口號,重新啟動
java -jar jenkins.war --httpPort=9000
jenkins啟動過程中會初始化,并會生成一個密碼如下(后面解鎖Jenkins時候用到)

接著就可以看到jenkins初始化的頁面啦^v^



后臺啟動Jenkins
我們也可以使用nohup命令,讓Jenkins在后臺運行。
nohup java -jar jenkins.war --httpPort=8080 &
還有別的啟動方式,可以使用tomcat啟動,進入tomcat/conf目錄,在server.xml里面修改端口號,或者進行域名配置,類似雨nginx的nginx.conf
進入tomcat/bin目錄,執(zhí)行./startup.sh
服務器安裝git
因為要進行使用git連接倉庫,克隆,拉取分支等等
服務器安裝node
https://www.yuque.com/allblue-byynd/ezv40n/ikgxzk
jenkins下載插件以及全局工具配置
安裝maven插件
配置jdk, maven, node
連接云服務器,
echo $PATH
獲取全局環(huán)境變量,復制
【系統(tǒng)管理】-> 【系統(tǒng)配置】 -> 【環(huán)境變量】
增加環(huán)境變量

不進行配置,構建任務執(zhí)行shell腳本的時候,可能會報錯,如下

添加憑據,創(chuàng)建密鑰
Jenkins通過SSH私鑰憑證,免密登陸Gitee服務器
在Jenkins服務器創(chuàng)建公鑰和私鑰
ssh-keygen -t rsa
cd /root/.ssh
把公鑰添加到gitee的ssh里面
把私鑰配置到Jenkins里面(全局工具配置里,不同版本的入口不一樣)


添加完成之后,在項目配置里git源可以切換成ssh, 選擇上面配置的憑證就可以連接倉庫了。
基礎工作準備完成
----------------------------------------------------------------------------------------------------------------
Make工具
linux,windows最原始的編譯工具,在linux下編譯工具常用Make(windows下對應的工具為nmake)
它負責組織構建的過程,負責指揮編譯器如何編譯,連接器如何連接,最后生成一個可用的文件。
ANT工具
make在編譯復雜的東西時使用不夠靈活,語法很難理解,于是就衍生出ant工具
Maven工具
Maven工具是對ant工具的進一步改進,Maven像make一樣,是個構建工具,有很多Maven plugin(maven插件)
Jenkins工具
Jenkins就是一個可視化的工具平臺,通過編寫一系列的腳本來控制編譯、測試、打包、部署等流程。
Jenkins就是用圖形界面的方式把maven進行一個整合。
Jenkins可以用于運行各種CI,測試,批處理任務等等,所以在Jenkins中將這些任務統(tǒng)稱為“free-style software project”
linux:jenkins 默認安裝目錄
(1)/usr/lib/jenkins/:jenkins安裝目錄,WAR包會放在這里。
( 2 ) /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在這里配置。
(3)/var/lib/jenkins/:默認的JENKINS_HOME。
(4)/var/log/jenkins/jenkins.log:Jenkins日志文件。
Eclipse工具
新建任務并構建
先進行一個最基礎的配置
選擇靈活配置
描述
源碼管理
git,
git登錄賬戶名密碼用于clone、pull等操作
指定分支
構建環(huán)境
不要勾選 Provide Node & npm bin/ folder to PATH
服務器已經下載node并進行了環(huán)境變量配置,如果這里選擇會造成沖突。
構建
執(zhí)行shell:
```javascript
pwd
ls
node -v
npm -v
git --version
echo '構建的版本號:'${BUILD_NUMBER}
npm install
npm run build
```
點擊【應用】,點擊【保存】
點擊【立即構建】
查看日志
編譯生成的文件存放在 服務器/root/.jenkins/workspace目錄下面

新建jenkins任務
https://blog.csdn.net/qq_35620501/article/details/87459391
設置構建觸發(fā)器
這里選擇webHooks觸發(fā)
Jenkins上操作



本地push就會自動觸發(fā)Jenkins構建
部署項目
使用 Jenkins 可以完成整個 CI/CD 的操作,之前關于源碼下載、鏡像構建、鏡像推送等操作都只能算是 CI 的步驟, Jenkins 完成一系列包括構建和部署的操作,屬于CD操作
安裝插件: public over ssh
Publish Over SSH 是 Jenkins 的一個插件,可以使用 SSH 的方式遠程連接服務器,并進行文件的傳輸和命令執(zhí)行。
由主節(jié)點不具備環(huán)境,只進行分配任務,執(zhí)行構建操作。配置從節(jié)點,web服務器,從節(jié)點構建完成之后,把鏡像和部署代碼一并傳到服務器節(jié)點上面,然后在服務器節(jié)點執(zhí)行部署命令,這幾個步驟都是 Publish Over SSH 可以完成的。
全局配置:ssh server
點擊【高級】配置密碼
ssh的配置可使用密鑰,也可以使用密碼,

測試連接,并應用保存
在任務配置中增加【構建后操作】
send build artifacts over ssh
exec
# 進入項目的文件夾 ( 項目路徑:? /usr/local/webserver/nginx/testweb02/testweb02/xxxx )
echo '--- 1.進入項目的文件夾:---'
cd /usr/local/webserver/nginx/testweb02/testweb02
pwd
#? 打包壓縮項目文件
echo '--- 2.打包壓縮項目的文件:---'
# 自動創(chuàng)建testweb02-copy文件夾,存在則創(chuàng)建失敗。mkdir -p a/b/c 創(chuàng)建多級目錄
mkdir /usr/local/webserver/nginx/testweb02-copy
tar -zcvf? /usr/local/webserver/nginx/testweb02-copy/${JOB_NAME}-${BUILD_ID}.tar.gz? *
# 查看壓縮備份后的文件
cd? /usr/local/webserver/nginx/testweb02-copy
echo '--- 3.下面是已經備份項目的版本:---'
ls
# 回復備份
echo '--- 4.下面是備份回滾的命令:---'
echo '刪除舊項目:rm -rf /usr/local/webserver/nginx/testweb02/*'
echo '回滾指定版本: tar -zxvf? /usr/local/webserver/nginx/testweb02-copy/testweb02-16.tar.gz? -C? /usr/local/webserver/nginx/testweb02/'
echo '停止服務:/usr/local/webserver/nginx/sbin/nginx -s stop'
echo '重啟服務:/usr/local/webserver/nginx/sbin/nginx'
echo '--- 構建結束 ---'

點擊【立即構建】

需求場景
一般情況下,通過 Jenkins 完成一個項目的上線,至少應該包括三臺虛擬機,一臺用來運行 Jenkins 服務,作為主節(jié)點,第二臺(正常情況可能不止一臺)是一個從節(jié)點,由主節(jié)點分配任務,執(zhí)行構建操作,之所以從節(jié)點會很多是因為每個從節(jié)點可能配置的不同的環(huán)境,可以完成特定的構建任務,比如某個從節(jié)點配置了 nodejs 環(huán)境,所以可以執(zhí)行前端項目構建,而另一個配置了 Java 環(huán)境所以可以構建 Java 項目;第三臺虛擬機就是項目部署的服務器了(有時候可能也不止一臺),可以通過 Jenkins 遠程控制服務器完成構建后的部署。
現(xiàn)在我就有3個虛擬機,1個 Jenkins 主機點,使用容器運行的,1個 Jenkins 從節(jié)點,配置了 nodejs 環(huán)境和 Java 環(huán)境,所以可以完成 vue 項目的構建,最后一個是一臺僅僅配置了 docker 環(huán)境的虛擬機,只能運行容器。這個場景很服務實際的項目場景。
解決方案
Jenkins 主節(jié)點由于是在容器中運行的,所以根本不具備任何其他環(huán)境,所以只做任務分配;從節(jié)點需要完成的事情是從 GitHub 拉取代碼,并打包 vue 項目,最后構建成鏡像,構建完成之后可以推送到遠程倉庫,也可以打包成 tar 包(這里為了使用 Publish Over SSH 的文件傳輸功能,所以使用 tar 包鏡像);從節(jié)點構建完成之后,把鏡像和部署代碼一并傳到服務器節(jié)點上面,然后在服務器節(jié)點執(zhí)行部署命令,這幾個步驟都是 Publish Over SSH 可以完成的。