用 Travis CI 自動(dòng)部署 Github Pages

原文鏈接:用 Travis CI 自動(dòng)部署 Github Pages

EtjGbq.png

前言

Github Pages 不能運(yùn)行動(dòng)態(tài)程序,只能輸出一些靜態(tài)內(nèi)容安接。因此 Github Pages 非常適合用于前端項(xiàng)目的展示俊嗽∥砑遥可用于存放項(xiàng)目介紹、項(xiàng)目文檔或者個(gè)人博客绍豁。本文介紹了怎么用 Travis CI 自動(dòng)化部署 Github Pages芯咧。

關(guān)于 CI

持續(xù)集成(Continuous integration)是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成他們的工作竹揍,通常每個(gè)成員每天至少集成一次敬飒,也就意味著每天可能會(huì)發(fā)生多次集成。每次集成都通過自動(dòng)化的構(gòu)建(包括編譯芬位,發(fā)布无拗,自動(dòng)化測(cè)試)來驗(yàn)證,從而盡早地發(fā)現(xiàn)集成錯(cuò)誤昧碉。目前 github 開源項(xiàng)目用的較多的 CI 主要是 Circle CI 和 Travis CI英染,兩者都是利用容器技術(shù)來適配不同項(xiàng)目環(huán)境。

Circle CI
Travis CI

(圖一 CIrcle CI被饿,圖二 Travis CI)

步驟

1. 安裝 Github App

Github Market Place 安裝 Travis CI四康。安裝時(shí)選擇你想要的項(xiàng)目權(quán)限。
<img src="https://s2.ax1x.com/2019/05/02/ENCylT.png" width="50%" alt="ENCylT.png" title="ENCylT.png" />

2. 配置 Github Token

配置 Github Token 用于 Travis CI 對(duì)你項(xiàng)目的訪問權(quán)限狭握,配置完了之后 不要刷新頁面闪金,先點(diǎn)一下 Token 后面的復(fù)制按鈕,因?yàn)槟阒荒芸匆娺@個(gè) Token 一次论颅,刷新了它就沒了 :joy: 不得不贊一下 Github 的安全性 :+1:

ENjIns.png

3. 加密 Github Token

以下是 Travis CI 官方文檔的 Github Pages 配置示例:

deploy:
  provider: pages
  skip_cleanup: true
  github_token: $GITHUB_TOKEN # Set in the settings page of your repository, as a secure variable
  keep_history: true
  on:
    branch: master

$GITHUB_TOKEN 是加密后的環(huán)境變量毕泌。如果不加密直接提交明文到一個(gè) Repo 的話喝检,github 會(huì)直接刪除掉這個(gè) token,簡(jiǎn)直太安全了 :joy: 加密步驟為

gem install travis      # Travis CI 官方 cli 工具
travis login --pro      # 登錄 Travis CI 撼泛,賬號(hào)密碼為你 Github 的賬號(hào)密碼
travis encrypt 'GITHUB_TOKEN=<YOUR_GITHUB_TOKEN>' --add     # 加密 github token 并自動(dòng)添加至配置文件

4. 配置 .travis.yml

完整的 .travis.yml 配置示例,需要將前面加密的 github token 解密澡谭,當(dāng)然只有 Travis CI 知道解密后的結(jié)果是啥 :facepunch:

地址:Bougie Design Travis CI config

language: node_js
node_js:
  - '10'
before_install:
  - composer config --global github-oauth.github.com "$GITHUB_TOKEN"
install:
  - yarn
test: true
script:
  - yarn docs:build
  - cp -r ./.docz/dist/* .
deploy:
  provider: pages
  skip_cleanup: true
  github_token: $GITHUB_TOKEN
  keep_history: true
  on:
    branch: master
env:
  global:
    secure: TTQLIDz0jL4FRFrpq6DDocxLiELUSpJsj9phdmjW9Eg9kna73KjPF2XmZaWFvkObZU3og/7Thr/iwsXQqfdq8gHShhLkHZAZqgvWqbjMIQABYIFqqqUE9grrPdrLXWVAidh+nET+pjes8VX92NBz6HA+i/15+PugVwYhC85AGyNN2JRL7nxCwh2ECiKATRiX+cLmVqFwTGpzqHovAiBFnap17whWa4C4uVEzdBwjQAZKw+IFxiiJIA7hkFTTThS11uCx//Dr7/A1X7c6ZLao/qiwvW8fNAbhV5ZA6dx4a0vtLwj6lprjcwWuGQX/vutKHnpdNpxeIDhmLNspN1U7YxjgUZJXgFjpE6tw1I8N6nSRpzhPUlrXPkKUAdN9x2jN20NSUeFDSl0FhazPwhGWzlSQb0gNyH1U04wvw3QB2VP/3UvTiyCZjum6prTpuXy/D262smG97o0/0XlNySX6MC+OLQNDIVgzO4YO2IHVB8lW6CBSMeTlcE8a4yvHwmGQpLKnX6tY06/n8lvjgZgPKZaRZL6aVrBE+/104Gt/aBFpraZZpiXJjXjdm4TO3N+u8gT8+gkDJ0BvzrX7Kf/W/WouecziCJgzYCB7y8eqec4kmZKRs2O6zyKJ0SbPrW54UuCmjFzTLEmdRCXRLIbEQsWvS5x+FKKwGNGRcrgPjxY=

5. 觸發(fā) CI

一般默認(rèn)是 git push 時(shí)觸發(fā)愿题,也可以修改成 tag 時(shí)觸發(fā),push 后可以到 travis-ci.com 查看 CI 日志蛙奖。如果出現(xiàn)下圖所示日志潘酗,則表明部署 Github Pages 成功了
<img src="https://s2.ax1x.com/2019/05/03/ENzmkt.png" width="50%" alt="ENzmkt.png" title="ENzmkt.png" />

6. 查看 Github Pages

Travis CI 會(huì)自動(dòng)創(chuàng)建一個(gè)叫 gh-pages 的分支,如圖所示:
<img src="https://s2.ax1x.com/2019/05/03/ENz8mj.png" width="50%" alt="ENz8mj.png" title="ENz8mj.png" />

到項(xiàng)目設(shè)置中設(shè)置 Github Pages 分支為 gh-pages:


EUSNbd.png

訪問 https://your-github-id.github.io/repo-name/ 即可訪問 Github Pages 了雁仲。需要注意的是 Github Pages 的 root path 不是 /仔夺,而是 /repo-name/,因此在打包時(shí)記得把基礎(chǔ)路由設(shè)置成 /repo-name/攒砖,否則會(huì)出現(xiàn)資源路徑錯(cuò)誤的情況缸兔。

附:阮老師對(duì)幾個(gè)“持續(xù)“概念的解釋

一、概念

持續(xù)集成(Continuous integration)指的是吹艇,頻繁地(一天多次)將代碼集成到主干惰蜜。

它的好處主要有兩個(gè)。

(1)快速發(fā)現(xiàn)錯(cuò)誤受神。 每完成一點(diǎn)更新抛猖,就集成到主干,可以快速發(fā)現(xiàn)錯(cuò)誤鼻听,定位錯(cuò)誤也比較容易财著。

(2)防止分支大幅偏離主干。 如果不是經(jīng)常集成撑碴,主干又在不斷更新撑教,會(huì)導(dǎo)致以后集成的難度變大,甚至難以集成灰羽。

持續(xù)集成的目的驮履,就是讓產(chǎn)品可以快速迭代,同時(shí)還能保持高質(zhì)量廉嚼。 它的核心措施是玫镐,代碼集成到主干之前,必須通過自動(dòng)化測(cè)試怠噪。只要有一個(gè)測(cè)試用例失敗恐似,就不能集成。

Martin Fowler 說過傍念,"持續(xù)集成并不能消除 Bug矫夷,而是讓它們非常容易發(fā)現(xiàn)和改正葛闷。"

與持續(xù)集成相關(guān)的,還有兩個(gè)概念双藕,分別是持續(xù)交付和持續(xù)部署淑趾。

二、持續(xù)交付

持續(xù)交付(Continuous delivery)指的是忧陪,頻繁地將軟件的新版本扣泊,交付給質(zhì)量團(tuán)隊(duì)或者用戶,以供評(píng)審嘶摊。 如果評(píng)審?fù)ㄟ^延蟹,代碼就進(jìn)入生產(chǎn)階段。

持續(xù)交付可以看作持續(xù)集成的下一步叶堆。它強(qiáng)調(diào)的是阱飘,不管怎么更新,軟件是隨時(shí)隨地可以交付的虱颗。

三沥匈、持續(xù)部署

持續(xù)部署(continuous deployment)是持續(xù)交付的下一步,指的是代碼通過評(píng)審以后上枕,自動(dòng)部署到生產(chǎn)環(huán)境咐熙。

持續(xù)部署的目標(biāo)是,代碼在任何時(shí)刻都是可部署的辨萍,可以進(jìn)入生產(chǎn)階段棋恼。

持續(xù)部署的前提是能自動(dòng)化完成測(cè)試、構(gòu)建锈玉、部署等步驟爪飘。它與持續(xù)交付的區(qū)別,可以參考下圖拉背。

image

圖片來源

四师崎、流程

根據(jù)持續(xù)集成的設(shè)計(jì),代碼從提交到生產(chǎn)椅棺,整個(gè)過程有以下幾步犁罩。

4.1 提交

流程的第一步,是開發(fā)者向代碼倉庫提交代碼两疚。所有后面的步驟都始于本地代碼的一次提交(commit)床估。

4.2 測(cè)試(第一輪)

代碼倉庫對(duì) commit 操作配置了鉤子(hook),只要提交代碼或者合并進(jìn)主干诱渤,就會(huì)跑自動(dòng)化測(cè)試丐巫。

測(cè)試有好幾種。

  • 單元測(cè)試:針對(duì)函數(shù)或模塊的測(cè)試
  • 集成測(cè)試:針對(duì)整體產(chǎn)品的某個(gè)功能的測(cè)試,又稱功能測(cè)試
  • 端對(duì)端測(cè)試:從用戶界面直達(dá)數(shù)據(jù)庫的全鏈路測(cè)試

第一輪至少要跑單元測(cè)試递胧。

4.3 構(gòu)建

通過第一輪測(cè)試碑韵,代碼就可以合并進(jìn)主干,就算可以交付了缎脾。

交付后祝闻,就先進(jìn)行構(gòu)建(build),再進(jìn)入第二輪測(cè)試赊锚。所謂構(gòu)建治筒,指的是將源碼轉(zhuǎn)換為可以運(yùn)行的實(shí)際代碼,比如安裝依賴舷蒲,配置各種資源(樣式表、JS 腳本友多、圖片)等等牲平。

常用的構(gòu)建工具如下。

Jenkins 和 Strider 是開源軟件域滥,Travis 和 Codeship 對(duì)于開源項(xiàng)目可以免費(fèi)使用纵柿。它們都會(huì)將構(gòu)建和測(cè)試,在一次運(yùn)行中執(zhí)行完成启绰。

4.4 測(cè)試(第二輪)

構(gòu)建完成昂儒,就要進(jìn)行第二輪測(cè)試。如果第一輪已經(jīng)涵蓋了所有測(cè)試內(nèi)容委可,第二輪可以省略渊跋,當(dāng)然,這時(shí)構(gòu)建步驟也要移到第一輪測(cè)試前面着倾。

第二輪是全面測(cè)試拾酝,單元測(cè)試和集成測(cè)試都會(huì)跑,有條件的話卡者,也要做端對(duì)端測(cè)試蒿囤。所有測(cè)試以自動(dòng)化為主,少數(shù)無法自動(dòng)化的測(cè)試用例崇决,就要人工跑材诽。

需要強(qiáng)調(diào)的是,新版本的每一個(gè)更新點(diǎn)都必須測(cè)試到恒傻。如果測(cè)試的覆蓋率不高脸侥,進(jìn)入后面的部署階段后,很可能會(huì)出現(xiàn)嚴(yán)重的問題碌冶。

4.5 部署

通過了第二輪測(cè)試湿痢,當(dāng)前代碼就是一個(gè)可以直接部署的版本(artifact)。將這個(gè)版本的所有文件打包( tar filename.tar * )存檔,發(fā)到生產(chǎn)服務(wù)器譬重。

生產(chǎn)服務(wù)器將打包文件拒逮,解包成本地的一個(gè)目錄,再將運(yùn)行路徑的符號(hào)鏈接(symlink)指向這個(gè)目錄臀规,然后重新啟動(dòng)應(yīng)用滩援。這方面的部署工具有AnsibleChef塔嬉,Puppet等玩徊。

4.6 回滾

一旦當(dāng)前版本發(fā)生問題,就要回滾到上一個(gè)版本的構(gòu)建結(jié)果谨究。最簡(jiǎn)單的做法就是修改一下符號(hào)鏈接恩袱,指向上一個(gè)版本的目錄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胶哲,一起剝皮案震驚了整個(gè)濱河市畔塔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸯屿,老刑警劉巖澈吨,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異寄摆,居然都是意外死亡谅辣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門婶恼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桑阶,“玉大人,你說我怎么就攤上這事熙尉×撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵检痰,是天一觀的道長(zhǎng)包归。 經(jīng)常有香客問我,道長(zhǎng)铅歼,這世上最難降的妖魔是什么公壤? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮椎椰,結(jié)果婚禮上厦幅,老公的妹妹穿的比我還像新娘。我一直安慰自己慨飘,他們只是感情好确憨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布译荞。 她就那樣靜靜地躺著,像睡著了一般休弃。 火紅的嫁衣襯著肌膚如雪吞歼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天塔猾,我揣著相機(jī)與錄音篙骡,去河邊找鬼。 笑死丈甸,一個(gè)胖子當(dāng)著我的面吹牛糯俗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睦擂,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼得湘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了顿仇?” 一聲冷哼從身側(cè)響起忽刽,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夺欲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體今膊,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡些阅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斑唬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片市埋。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恕刘,靈堂內(nèi)的尸體忽然破棺而出缤谎,到底是詐尸還是另有隱情,我是刑警寧澤褐着,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布坷澡,位于F島的核電站,受9級(jí)特大地震影響含蓉,放射性物質(zhì)發(fā)生泄漏频敛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一馅扣、第九天 我趴在偏房一處隱蔽的房頂上張望斟赚。 院中可真熱鬧,春花似錦差油、人聲如沸拗军。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽发侵。三九已至交掏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間器紧,已是汗流浹背耀销。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铲汪,地道東北人熊尉。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像掌腰,于是被迫代替她去往敵國(guó)和親狰住。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容