Jenkins搭建與博客自動(dòng)部署

起因

最開始我是使用CircleCI來進(jìn)行博客的自動(dòng)部署的,但是在部署的時(shí)候使用又拍云的upx同步博客到對(duì)象存儲(chǔ)的時(shí)候經(jīng)常出現(xiàn)504(網(wǎng)關(guān)超時(shí))錯(cuò)誤最后導(dǎo)致失敗。很容易就可以想應(yīng)該是因?yàn)楸娝苤木W(wǎng)絡(luò)原因,但是說好的全球cdn呢:sweat:,這不免讓我對(duì)它的全球cdn的實(shí)力有所懷疑:joy:。于是就打算自己搭Jenkins服務(wù)器在國(guó)內(nèi)構(gòu)建部署解決問題,順帶學(xué)習(xí)一下。

Jenkins安裝

Jenkins的詳細(xì)安裝方法可以參考官方的中文文檔:https://jenkins.io/zh/doc/book/installing/。這里我使用docker進(jìn)行安裝,安裝時(shí)使用的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:

運(yùn)行的時(shí)候先別急著docker-compose up -d,先docker-compose up一下,這時(shí)如果防火墻安全組什么的設(shè)置沒有問題的話可以在8080端口訪問到了。在看終端的輸出信息的時(shí)候記錄一下初始安裝的隨機(jī)密碼,初始安裝的時(shí)候需要用到,之后就是根據(jù)網(wǎng)站的提示一直下一步下一步了。安裝配置結(jié)束后可以讓docker轉(zhuǎn)到后臺(tái)運(yùn)行。

使用前的配置

反向代理

直接使用8080端口當(dāng)然也是可以的,但是明顯看起來有點(diǎn)丑(主要是逼格不夠高:smirk:),這個(gè)這個(gè)時(shí)候我們就需要用到反向代理來處理一下了。這里我使用的是caddy,caddy的配置十分簡(jiǎn)單,兩行行實(shí)現(xiàn)https自動(dòng)申請(qǐng)續(xù)期與透明轉(zhuǎn)發(fā),我的Caddyfile如下所示。

https://ci.yinaoxiong.cn {
    gzip
    log /var/log/caddy/ci.log
    tls aoxiongyin@qq.com
    proxy / localhost:8080 {
        transparent
    }
}

添加虛擬內(nèi)存

安裝的時(shí)候看到官方對(duì)于小團(tuán)隊(duì)的推薦硬件配置自己這個(gè)騰訊云的學(xué)生機(jī)也算是勉強(qiáng)達(dá)到了,然后一頓操作猛如虎,然后build的時(shí)候out of memory甩臉上。然后用free -h看了一下發(fā)現(xiàn)自己的交互內(nèi)存配置的是0,趕緊加個(gè)1G的交換內(nèi)存試一下看看,這里使用交換文件添加交換內(nèi)存。具體操作如下所示:

#創(chuàng)建一個(gè)大小為1G的文件
sudo fallocate -l 1G /swapfile
#鎖定root權(quán)限
sudo chmod 600 /swapfile
#標(biāo)記文件為交換空間
sudo mkswap /swapfile
#啟用交換空間
sudo swapon /swapfile
#查看設(shè)置是否生效
free -h
#配置寫入fstab永久生效
#先備份文件
sudo cp /etc/fstab /etc/fstab.bak
#寫入文件
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

配置構(gòu)建與部署

Jenkins的使用這個(gè)問題過于龐大,大家可以去官網(wǎng)看它的文檔學(xué)習(xí)一下,下面分享一下我的僅分享一下我自己的配置,這個(gè)博客的配置文件可以在這個(gè)鏈接中查看: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鏡像規(guī)范環(huán)境,因?yàn)楸緛砭褪菑乃麄兗疫w移的就沒什么好改的了。構(gòu)建的時(shí)候?yàn)閞uby設(shè)置中國(guó)源加速訪問。最后使用又拍云的upx工具同步到對(duì)象存儲(chǔ)中。

添加徽標(biāo)

原來使用CircleCI直接提供了構(gòu)建的徽標(biāo)鏈接來滿足用戶的使用(裝逼)需要,但是Jenkins本身沒有提供這個(gè)功能。好在萬能的網(wǎng)友早已明白人們對(duì)于徽標(biāo)的使用(裝逼)需求,并創(chuàng)建了一個(gè)生成各種徽標(biāo)的開源項(xiàng)目。項(xiàng)目的地址是:badges/shields,項(xiàng)目的一個(gè)demo網(wǎng)址是:https://shields.io/。

在build中點(diǎn)擊Jenkins按照要求填寫好你就可以獲得你想要的徽標(biāo)了,我的填寫方式如下所示。

示例

將my-blog更換成你自己的job名稱應(yīng)該就可以了,需要注意的是Jenkins默認(rèn)是不允許匿名查看的,所以直接上去一頓操作是不行的。需要先用管理員賬號(hào)在 系統(tǒng)管理》全局安全設(shè)置》訪問控制 里面勾選允許匿名只讀訪問才行。如果你不想這么做也可以自己使用badges/shields搭建服務(wù),然后按照這個(gè)文檔:Server Secrets,設(shè)置好具有權(quán)限的Jenkins賬號(hào)密碼,這樣就不用把構(gòu)建信息公開了。

博客原文:Jenkins搭建與博客自動(dòng)部署

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容