前言
首先想要做這個自動化構(gòu)建的初衷是岩榆,最近網(wǎng)站備案信息作了更改怖喻,我需要重新備案如孝,但是現(xiàn)在備案可比幾年前的時候嚴(yán)格多了失乾,導(dǎo)致了現(xiàn)在網(wǎng)站的內(nèi)容有好多不符合規(guī)范常熙,因此我把個人網(wǎng)站修改了之后,再提交審核碱茁,結(jié)果又出現(xiàn)了其他問題被拒絕回來再次需要修改裸卫,這樣來來回回搞了好幾回,因?yàn)槲业膫€人網(wǎng)站都是靜態(tài)網(wǎng)站纽竣,每次修改后都要手動把代碼發(fā)布到服務(wù)器上墓贿,這樣的重復(fù)性工作顯得很繁瑣,所以研究了一下怎么用工具自動化構(gòu)建自己的網(wǎng)站。
使用Docker在電腦上運(yùn)行 Jenkins 平臺
首先拉取Jenkins鏡像募壕,我使用的網(wǎng)易的蜂巢鏡像源,鏡像地址是:hubhub.c.163.com/library/jenkins:latest
语盈。鏡像倉庫地址(需要登錄才能查看)
運(yùn)行命令docker pull hub.c.163.com/library/jenkins:latest
把鏡像拉取到本地舱馅,然后為了日后使用方便,我們給這個鏡像打上一個標(biāo)簽:
docker tag hubhub.c.163.com/library/jenkins:latest cubesuger/jenkins
我這里是使用cubeSuger/jenknis這個名稱
根據(jù)這個鏡像的使用說明刀荒,我們需要映射 8080 和 50000 端口代嗤,那我們使用下面的命令來運(yùn)行這個鏡像:
docker run -p 8080:8080 -p 50000:50000 --name jenkins -v D:/docker/docker-file/jenkins:/var/jenkins_home cubesuger/jenkins
-p 是映射端口,--name 是為運(yùn)行鏡像所創(chuàng)建的容器添加一個名稱(名稱為 jenkins), -v 是把 Jenkins 的配置和插件保存到我們的磁盤上
執(zhí)行后等待一會兒缠借,便會看到下面內(nèi)容便是成功啟動了 Jenknis干毅。
INFO:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
91a3b5b09eea439689e5faead48e9891
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
--> setting agent port for jnlp
--> setting agent port for jnlp... done
注意這里包含了一個密碼串
91a3b5b09eea439689e5faead48e9891
,這個密碼串會在接下來的登錄中用到
在瀏覽器打開 localhost:8080
就會看到j(luò)enkins的初始化界面:
我們填上Jenkins的默認(rèn)密碼串泼返,密碼串可以在剛剛啟動時輸出的內(nèi)容中找到硝逢。找不到的也可以到/var/jenkins_home/secrets/initialAdminPassword
這個目錄下用文件編輯器打開查看。(/var/jenkins_home
這個目錄我們映射到了D:/docker/docker-file/jenkins
這個目錄中绅喉,所以可以在電腦上直接到這個目錄上打開查看渠鸽,而不用在容器中用cat命令查看)
輸入后便會跳轉(zhuǎn)到用戶管理界面,這個時候最好修改一下原始密碼柴罐,防止以后忘記要進(jìn)入容器中尋找徽缚。
一般來說我們從蜂巢上下載下來的Jenkins版本會相對老一些,這時候我們應(yīng)該對jenkins做升級革屠,防止因?yàn)榘姹径霈F(xiàn)問題凿试。
更新Jenkins
我們可以從清華鏡像中下載最新版本的Jenkins,(下載地址:://mirrors.tuna.tsinghua.edu.cn/jenkins/war/latest/)似芝,打開后選擇下載jenkins.war即可那婉,然后我們把下載好的文件移動到剛剛我們給容器共享的目錄中(這里我設(shè)置的目錄是:D:/docker/docker-file/jenkins),然后我們執(zhí)行命令以root身份進(jìn)入容器:
docker exec -it -u root [containerID] /bin/bash
注:containerID 就是創(chuàng)建容器是的ID国觉。
默認(rèn)情況下會以 jenkins 這個用戶進(jìn)入容器吧恃,但是這個用戶只能操作jenkins_home下的目錄,所以要更新jenkins版本麻诀,就要用root用戶進(jìn)入容器進(jìn)行操作痕寓。
然后我們查看當(dāng)前jenkins的war包在哪里,點(diǎn)擊設(shè)置蝇闭,查看系統(tǒng)信息
等重啟完畢后就能看到新版本的Jenkins在運(yùn)行了:
更新國內(nèi)源
默認(rèn)情況下Jenkins會使用國外的地址進(jìn)行更新和插件下載呻率,這些地址訪問時可能會非常慢,因此如果出現(xiàn)這種現(xiàn)象的時候呻引,我們應(yīng)該把更新地址改為國內(nèi)的鏡像地址礼仗。更新為國內(nèi)源需要兩步:
修改
jenkins_home/update
目錄下default
文件里的地址,因?yàn)槲覀冊趩尤萜鞯臅r候做了映射,所以這個文件可以在D:\docker\docker-file\jenkins\updates
這個目錄中找到元践,打開default
文件韭脊,把里面的http://www.google.com/
全部改成http://www.baidu.com/
,把http://updates.jenkins-ci.org/download/
全部改成https://mirrors.tuna.tsinghua.edu.cn/jenkins/
单旁,然后保存修改沪羔。打開jenkins控制臺,進(jìn)入插件管理象浑,點(diǎn)擊Advanced(高級),在最下面的update site 中填寫
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
這個地址蔫饰,點(diǎn)擊submit(提交)然后等待刷新然后重啟就可以了。
修改完成后可以發(fā)現(xiàn)插件的更新速度有了明顯的提升愉豺。
安裝必要的插件
接下來安裝必要的插件來完成我們的自動化構(gòu)建篓吁。
漢化插件
對于英文不好的朋友,可以先去安裝一個漢化插件蚪拦,名字叫 Localization Chinese(Simplified)杖剪。安裝完后重啟就可以看到漢化后的界面了。
安裝git插件
在插件中搜索git并安裝外盯,一般來說在安裝git的過程中會把憑證插件也安裝上摘盆,所以就不用手動去安裝憑證插件了,如果發(fā)現(xiàn)沒有安裝憑證插件饱苟,則需要手動安裝一下孩擂。
安裝并配置憑證插件
要想自動化構(gòu)建網(wǎng)站,首先要可以獲取到構(gòu)建網(wǎng)站的代碼箱熬,這就涉及到安全驗(yàn)證的問題类垦,比如GitHub的私有倉庫就有兩種方式來獲取代碼,ssh和用戶密碼城须。還有我們有時候在構(gòu)建好代碼后蚤认,需要登錄到服務(wù)器上把構(gòu)建好的代碼放到指定目錄上去,也需要用到憑證糕伐。
安裝Credentials Binding插件砰琢,安裝完成后重啟jenkins。
重啟完成后點(diǎn)擊管理憑證良瞧,然后點(diǎn)擊全局陪汽,添加一個憑證,這里可以選擇 用戶名和密碼 褥蚯、ssh等方式挚冤。選擇自己想要的驗(yàn)證方式并且配置就可以了。用戶名和密碼比較簡單赞庶,這里就列舉比較復(fù)雜的ssh方式:
首先進(jìn)入到容器中生成公鑰和私鑰(這里參考GitHub上的教程):
輸入命令然后按回車即可:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
然后執(zhí)行命令把秘鑰添加到ssh-agent中:
eval "$(ssh-agent -s)"
然后把新生成的秘鑰添加到GitHub上(參考)
最后在jenkins的憑證中配置:
私鑰中選中在容器中創(chuàng)建的 ~/.ssh/id_rsa
训挡,然后保存即可澳骤。
安裝Node.js
搜索node.js插件并安裝,安裝完成后到系統(tǒng)管理澜薄,全局工具配置中配置Node.js为肮。
這里我選擇安裝了兩個版本的Node.js,都是使用從nodejs.org官網(wǎng)上的安裝方法肤京,如果你的項(xiàng)目有使用到一些全局的包也可以在下面的Global npm packages to install
選項(xiàng)中配置弥锄。
安裝Publish Over SSH
當(dāng)我們把項(xiàng)目在容器中構(gòu)建好后,就需要把構(gòu)建好的代碼發(fā)送到生產(chǎn)服務(wù)器上蟆沫,這個時候就需要用到這個插件:Publish Over SSH
搜索Publish Over SSH
插件并安裝,安裝好在系統(tǒng)管理——系統(tǒng)配置中配置Publish Over SSH
温治。
這樣就可以在構(gòu)建流程中使用了饭庞。
創(chuàng)建工作流程
首先創(chuàng)建一個自由風(fēng)格的項(xiàng)目,給項(xiàng)目起個名字熬荆,然后就進(jìn)入到了構(gòu)建流程配置中:
可以給項(xiàng)目添加一個描述
然后在源碼管理中選擇git舟山,添加git倉庫地址,憑證選擇之前創(chuàng)建好的憑證卤恳,分支選擇你需要構(gòu)建的分支即可累盗。
如果在構(gòu)建之前需要登錄服務(wù)器把之前的舊目錄刪除,則可以在構(gòu)建環(huán)境中勾選
Send files or execute commands over SSH before the build starts
突琳,然后選擇之前配置好的服務(wù)器若债,在Exec command
中編寫命令:
- 勾選緊接著的
Provide Node & npm bin/ folder to PATH
,然后選擇當(dāng)前項(xiàng)目需要用到的Node.js版本拆融。
- 然后在構(gòu)建中輸入需要執(zhí)行的構(gòu)建命令蠢琳。
- 最后把構(gòu)建好的代碼發(fā)送到生產(chǎn)服務(wù)器上。
點(diǎn)擊保存后就可以進(jìn)行構(gòu)建了镜豹。
第一次構(gòu)建的時候需要安裝node.js和一些全局的npm包傲须,所以等待的時間會久一些,之后的構(gòu)建速度就快很多了趟脂。
結(jié)尾
至此泰讽,我們就已經(jīng)完成了使用Jenkins來自動化構(gòu)建自己的網(wǎng)站應(yīng)用了。