1. 程式人生 > >利用Travis CI+GitHub實現持續整合和自動部署

利用Travis CI+GitHub實現持續整合和自動部署

前言

如果你手動部署過專案,一定會深感持續整合的必要性,因為手動部署實在又繁瑣又耗時,雖然部署流程基本固定,依然容易出錯。

如果你很熟悉持續整合,一定會同意這樣的觀點:“使用它已經成為一種標配”。

什麼是持續整合
Continuous Integration(CI) is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early.
———ThoughtWorks
翻譯過來就是:持續整合是一個開發行為,它要求開發者每天多次將程式碼整合到一個共享的倉庫,每次提交都會被自動構建所檢查,團隊可因此提前檢測出問題。

持續整合的工具非常多,例如用java語言開發的Jenkins,由於其可以在多臺機器上進行分散式地構建和負載測試的特性,很多大公司都在使用它。

但是Jenkins的不加修飾的介面介面讓我有些嫌棄...

隨著GitHub的發展,出現了越來越多支援GitHub的CI/CD產品。在GitHub市場上,可以看到,已經支援的持續整合服務提供商已超過300多家(詳情)。

選擇Travis CI,是因為身邊很多朋友的推薦。

下面分享一下我是如何利用Travis CI+GitHub實現持續整合和自動部署的,通過我的一些研究和實戰經驗,希望可以幫到有需要的朋友。

什麼是Travis CI

Travis CI是用Ruby語言開發的一個開源的分散式持續整合服務,用於自動構建和測試在GitHub託管的專案。支援包括Javascript、Node.js、Ruby等20多種程式語言。對於開源專案免費提供CI服務。你也可以買他的收費版,享受更多的服務。

Travis CI目前有兩個官網,分別是 https://travis-ci.org 和 https://travis-ci.com 。
https://travis-ci.org 是舊平臺,已經逐漸往新平臺 https://travis-ci.com 上遷移了。對於私有倉庫的免費自動構建,Travis CI在新平臺上給予了支援。

一、獲取GitHub Access Token

Travis CI在自動部署的時候,需要push內容到倉庫的某個分支,而訪問GitHub倉庫需要使用者授權,授權方式就是使用者提供 Access Token 給Travis CI。

獲取token的位置:GitHub->Settings->Developer Settings->Personal access tokens

勾選repo下的所有項,以及user下的user:email後,生成一個token,複製token值。

注意:這個token只有現在可以看到,再次進入就看不到了,而且是再也看不到了,忘記了就只能重新生成了,所以要記住保管好。

二、使用GitHub賬號登入Travis

進入Travis官網,用GitHub賬號登入。(我目前使用的是它的舊平臺)

登入後,會在Travis裡看到自己GitHub賬號下所有的public open source repo。

三、開啟對專案的監控

選擇目標專案,開啟右側開關。

四、配置travis

  • 點選開關右側Settings,進入該專案的travis配置頁
  • 勾選觸發條件
  • 設定全域性變數

    注意:第一步獲取的access token,必須設定
    設定好的變數可以在配置檔案中以 ${變數名}來引用。

五、在專案根目錄新增.travis.yml配置檔案

注意檔名以.開頭。

Travis CI的一次構建分兩個步驟:

  1. install安裝,安裝任何所需的依賴
  2. script指令碼,執行構建指令碼

Travis CI提供了一些構建生命週期的“鉤子”

一個完整的 Travis CI 構建生命週期:

  1. OPTIONAL Install apt addons
  2. OPTIONAL Install cache components
  3. before_install
  4. install
  5. before_script
  6. script
  7. OPTIONAL before_cache(for cleaning up cache)
  8. after_success or after_failure
  9. OPTIONAL before_deploy
  10. OPTIONAL deploy
  11. OPTIONAL after_deploy
  12. after_script

before_installbefore_script之前,或者after_script之後,都可以執行自定義命令,詳細資料可參考官方文件:Job Lifecycle

我在footprint專案中的.travis.yml完整配置:

language: node_js #設定語言

node_js: "10.16.3" #設定語言版本

cache:
  directories:
    - node_modules #快取依賴

# S: Build Lifecycle
install:
  - npm i

script:
  - npm run build

#after_script前5句是把部署分支的.git資料夾保護起來,用於保留歷史部署的commit日誌,否則部署分支永遠只有一條commit記錄。
#命令裡面的變數都是在Travis CI裡配置過的。
after_script:
  - git clone https://${GH_REF} .temp
  - cd .temp
  - git checkout gh-pages
  - cd ../
  - mv .temp/.git dist
  - cd dist
  - git config user.name "${U_NAME}"
  - git config user.email "${U_EMAIL}"
  - git add .
  - git commit -m ":construction_worker:- Build & Deploy by Travis CI"
  - git push --force --quiet "https://${Travis_Token}@${GH_REF}" gh-pages:${D_BRANCH}
# E: Build LifeCycle

# 只有指定的分支提交時才會執行指令碼
branches:
  only:
    - master

Done!

.travis.yml push 到遠端,可以看到 travis 開始構建編譯了。並且之後每次push程式碼,travis 都會自動執行.travis.yml裡配置的指令碼任務了。

  • 自動編譯:
  • 構建完,travis 會根據我的配置,自動部署到 GitHub:

And One More Thing

構建成功後,我們就可以在自己的GitHub專案裡新增build徽章了。
方法:在Travis裡,點選專案右側的徽章,即可獲取小徽章地址,將地址放在README.md文件中即可。

效果:

--
GOODLUCK!

歡迎轉載,轉載請註明出處:https://champyin.com/2019/09/27/%E5%88%A9%E7%94%A8Travis-CI-GitHub%E5%AE%9E%E7%8E%B0%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90%E5%92%8C%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/#more

本文同步發表於:
利用Travis CI+GitHub實現持續整合和自動部署 | 掘