使用持續集成系統解放生產力

程序猿除了但願寫好代碼,必定也想着本身的項目能夠如何快速的迭代上線,從而能夠專一的完成代碼的編寫,減小繁雜的運維等工做。例如完成一項功能的開發後,推送到 Git 等代碼管理系統後,剩下的測試、部署、上線等工做能夠交給一個系統來自動化完成,這時即可以靠持續集成系統了。這裏記錄下我使用老牌的 Jenkins 持續集成系統來幫助本身完成的工做。node

部署 Jenkins

使用 docker 部署 Jenkins

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

  • --name=jenkins 將容器命名爲 jenkins
  • -td 分配一個僞 tty 終端,在後臺運行
  • -v jenkins_home:/var/jenkins_home 將 jenkins_home 存儲卷掛載到容器 /var/jenkins_home,這樣在刪除或升級容器後數據也能夠存在
  • -p 8080:8080 -p 50000:50000 將容器的 8080 和 50000 端口映射到主機對應端口上
  • -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai 配置環境變量 JAVA_OPTS=-Duser.timezone=Asia/Shanghai 這樣在 Jenkins 中顯示的時區纔是中國地區的

nginx 反代設置

因爲我在本身的域名下使用了 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 後,進入網頁還須要配置下 Jenkins 的首次運行設置。基本上按默認的一直點下一步就能夠了,網上教程也不少,有問題能夠自行搜索。docker

配置持續集成項目

Jenkins 搭建完畢後,這裏就詳細演示下的經過 Jenkins 來完成發佈基於 hexo 的博客的一系列流程。bash

爲什麼須要 Jenkins

我基於 hexo 搭建了一個博客,博客代碼託管於 Github,生成的靜態內容託管於 coding page,在沒有 Jenkins 的狀況下,經常爲如下問題感受不爽:hexo

  1. 博客更新後推送到 Github 的速度老是很慢,沒有使用國內代碼託管平臺那樣的流程體驗
  2. 每次想發佈博客時,還需手動執行一下 hexo deploy 命令,我只想把最新的更新推送到 Git 上後就再也不管了

這時候 Jenkins 便派上用場了,以上這些均可以交給它來自動完成。整個發佈流程以下: app

配置 Jenkins 持續集成任務

安裝插件

Jenkins 在安裝時已附帶了經常使用的插件,因爲這須要接收 coding 的推送通知和生成 hexo 靜態文件,於是須要 Coding WebhookNodeJS 這兩個插件。能夠在 Jenkins 首頁 -> 系統管理 -> 插件管理 中選擇安裝。運維

配置 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,如今也有不少新型的工具或平臺能夠更方便的完成這些配置。好比 DaoCloudcdsdrone, flowci 等等,能夠挑一個最順手的好好研究。

相關文章
相關標籤/搜索