起因
最開始我是使用CircleCI來進行博客的自動部署的,但是在部署的時候使用又拍雲的upx同步博客到對象存儲的時候經常出現504(網關超時)錯誤最後導致失敗。很容易就可以想應該是因爲衆所周知的網絡原因,但是說好的全球cdn呢😓,這不免讓我對它的全球cdn的實力有所懷疑😂。於是就打算自己搭Jenkins服務器在國內構建部署解決問題,順帶學習一下。
Jenkins安裝
Jenkins的詳細安裝方法可以參考官方的中文文檔:https://jenkins.io/zh/doc/book/installing/。這裏我使用docker進行安裝,安裝時使用的docker-compose.yml配置文件如下所示:
version: "3"
services:
kms:
image: jenkinsci/blueocean
user: root
ports:
- 8080:8080
volumes:
- jenkins-data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
restart: always
volumes:
jenkins-data:
運行的時候先別急着docker-compose up -d
,先docker-compose up
一下,這時如果防火牆安全組什麼的設置沒有問題的話可以在8080端口訪問到了。在看終端的輸出信息的時候記錄一下初始安裝的隨機密碼,初始安裝的時候需要用到,之後就是根據網站的提示一直下一步下一步了。安裝配置結束後可以讓docker轉到後臺運行。
使用前的配置
反向代理
直接使用8080端口當然也是可以的,但是明顯看起來有點醜(主要是逼格不夠高😏),這個這個時候我們就需要用到反向代理來處理一下了。這裏我使用的是caddy,caddy的配置十分簡單,兩行行實現https自動申請續期與透明轉發,我的Caddyfile如下所示。
https://ci.yinaoxiong.cn {
gzip
log /var/log/caddy/ci.log
tls [email protected]
proxy / localhost:8080 {
transparent
}
}
添加虛擬內存
安裝的時候看到官方對於小團隊的推薦硬件配置自己這個騰訊雲的學生機也算是勉強達到了,然後一頓操作猛如虎,然後build的時候out of memory甩臉上。然後用free -h
看了一下發現自己的交互內存配置的是0,趕緊加個1G的交換內存試一下看看,這裏使用交換文件添加交換內存。具體操作如下所示:
#創建一個大小爲1G的文件
sudo fallocate -l 1G /swapfile
#鎖定root權限
sudo chmod 600 /swapfile
#標記文件爲交換空間
sudo mkswap /swapfile
#啓用交換空間
sudo swapon /swapfile
#查看設置是否生效
free -h
#配置寫入fstab永久生效
#先備份文件
sudo cp /etc/fstab /etc/fstab.bak
#寫入文件
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
配置構建與部署
Jenkins的使用這個問題過於龐大,大家可以去官網看它的文檔學習一下,下面分享一下我的僅分享一下我自己的配置,這個博客的配置文件可以在這個鏈接中查看:Jenkinsfile。目前使用 的配置文件如下所示:
pipeline {
agent {
docker {
image 'circleci/ruby:2.6.0'
}
}
stages {
stage('build') {
steps {
sh 'gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/'
sh 'sudo gem install bundler -f'
sh 'bundle config mirror.https://rubygems.org https://gems.ruby-china.com'
sh 'bundle install --jobs=4 --retry=3 --path vendor/bundle'
sh 'bundle exec jekyll build'
}
}
stage('deploy') {
steps {
sh 'wget -c http://collection.b0.upaiyun.com/softwares/upx/upx-linux-amd64-v0.2.3'
sh 'mv upx-linux-amd64-v0.2.3 upx'
sh 'chmod +x upx'
sh './upx login yax-blog ${upx_USR} ${upx_PSW}'
sh './upx sync _site/ / --delete'
}
}
}
environment {
upx = credentials('upyun-account')
}
}
直接使用CircleCI家的docker鏡像規範環境,因爲本來就是從他們家遷移的就沒什麼好改的了。構建的時候爲ruby設置中國源加速訪問。最後使用又拍雲的upx工具同步到對象存儲中。
添加徽標
原來使用CircleCI直接提供了構建的徽標鏈接來滿足用戶的使用(裝逼)需要,但是Jenkins本身沒有提供這個功能。好在萬能的網友早已明白人們對於徽標的使用(裝逼)需求,並創建了一個生成各種徽標的開源項目。項目的地址是:badges/shields,項目的一個demo網址是:https://shields.io/。
在build中點擊Jenkins按照要求填寫好你就可以獲得你想要的徽標了,我的填寫方式如下所示。
將my-blog更換成你自己的job名稱應該就可以了,需要注意的是Jenkins默認是不允許匿名查看的,所以直接上去一頓操作是不行的。需要先用管理員賬號在 系統管理》全局安全設置》訪問控制 裏面勾選允許匿名只讀訪問才行。如果你不想這麼做也可以自己使用badges/shields搭建服務,然後按照這個文檔:Server Secrets,設置好具有權限的Jenkins賬號密碼,這樣就不用把構建信息公開了。
博客原文:Jenkins搭建與博客自動部署