程序猿除了但願寫好代碼,必定也想着本身的項目能夠如何快速的迭代上線,從而能夠專一的完成代碼的編寫,減小繁雜的運維等工做。例如完成一項功能的開發後,推送到 Git 等代碼管理系統後,剩下的測試、部署、上線等工做能夠交給一個系統來自動化完成,這時即可以靠持續集成系統了。這裏記錄下我使用老牌的 Jenkins 持續集成系統來幫助本身完成的工做。node
Jenkins 已有官方的 docker 鏡像,經過 docker 能夠快速完成 jenkins 系統的部署。nginx
我使用的 Jenkins 部署命令:git
docker run --name=jenkins -td -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai jenkins/jenkins:lts
複製代碼
解釋下各個運行選項github
因爲我在本身的域名下使用了 nginx 反代 Jenkins 端口,這裏再分享下個人 nginx 配置web
upstream jenkins {
server 127.0.0.1:8080 fail_timeout=0;
}
server {
listen 80;
server_name your.site.com;
return 301 https://your.site.com$request_uri;
}
server {
listen 443 ssl http2;
server_name your.site.com;
location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Fix the "It appears that your reverse proxy set up is broken" error.
proxy_pass http://jenkins;
proxy_redirect http:// https://;
# Required for new HTTP-based CLI
proxy_http_version 1.1;
proxy_request_buffering off;
# workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
add_header 'X-SSH-Endpoint' 'your.site.come:50022' always;
}
}
複製代碼
第一次安裝 Jenkins 後,進入網頁還須要配置下 Jenkins 的首次運行設置。基本上按默認的一直點下一步就能夠了,網上教程也不少,有問題能夠自行搜索。docker
Jenkins 搭建完畢後,這裏就詳細演示下的經過 Jenkins 來完成發佈基於 hexo 的博客的一系列流程。bash
我基於 hexo 搭建了一個博客,博客代碼託管於 Github,生成的靜態內容託管於 coding page,在沒有 Jenkins 的狀況下,經常爲如下問題感受不爽:hexo
hexo deploy
命令,我只想把最新的更新推送到 Git 上後就再也不管了這時候 Jenkins 便派上用場了,以上這些均可以交給它來自動完成。整個發佈流程以下: app
Jenkins 在安裝時已附帶了經常使用的插件,因爲這須要接收 coding 的推送通知和生成 hexo 靜態文件,於是須要 Coding Webhook
和 NodeJS
這兩個插件。能夠在 Jenkins 首頁 -> 系統管理 -> 插件管理
中選擇安裝。運維
爲了讓 Jenkins 有權限拉取和推送代碼,須要爲 Jenkins 生成一個拉取代碼的 ssh 密鑰,並添加到代碼項目中。生成 ssh 密鑰的方法不少,通常能夠在 Liunx 系統經過 ssh-keygen -t rsa
來建立,建立好後添加到 系統管理 -> 憑據 -> 系統 -> 全局憑據
中,使每一個項目均可以使用。以後還需將公鑰添加到對應的 Git 項目中。
爲了能夠編譯 hexo 項目生成靜態項目,還須要配置 NodeJS 插件生成 hexo 插件運行環境。可在 系統管理 -> 全局工具配置
NodeJS 配置項中按以下配置添加 NodeJS 10.14.2 運行環境,並自動安裝 hexo。
在完成一系列的準備工做後,能夠建立執行具體流程的任務了。點擊首頁左側的新任務,輸入一個喜歡的任務名,選擇構建一個自由風格的軟件項目。在 General 選項頁面,能夠配置丟棄舊的構建節省空間。
Source Code Management 選項頁面須要配置託管代碼的 Git 地址,這裏由於咱們想配置 Jenkins 自動推送代碼到 Github,於是須要配置兩個地址。
Build Triggers 選項頁面須要配置什麼時候觸發這個項目,這裏咱們配置爲經過 coding webhook 來觸發。每次推送代碼後,coding 便會經過一個 webhook 來通知 Jenkins 開始執行任務。
以後在 coding 項目的 設置 -> webhook
頁面配置好項目觸發地址和條件。
Build Environment 選項頁面配置任務所需的環境,這裏因爲因爲 hexo deploy 時須要 push 靜態頁面到 coding,也須要以前 git 倉庫認證的密鑰文件,能夠勾選 Use secret text(s) or file(s)
,將密鑰文件提取出來以備接下來使用。同時在這裏配置 nodeJS 運行環境,而且勾選了在控制檯打印信息中添加時間戳以便調試。
Build 選項頁面配置任務須要執行的命令,這裏配置好 hexo 生成靜態頁面和部署所需各項命令。
Post-build Actions 選項頁面可配置任務執行先後須要執行的動做,這裏咱們即可以經過 Git Publisher 推送代碼到 Github 中,並經過發送郵件告知任務執行結果。
活用好此類持續集成工具,能夠幫助咱們完成開發流程中的不少事,極大的提高咱們的開發效率。除了老牌的 Jenkins,如今也有不少新型的工具或平臺能夠更方便的完成這些配置。好比 DaoCloud,cds,drone, flowci 等等,能夠挑一個最順手的好好研究。