持續(xù)集成利器,GitHub Actions
簡(jiǎn)介
GitHub Actions 是 GitHub 推出的持續(xù)集成服務(wù),于 2018 年 10 月推出,目前已經(jīng)可以投入到正式環(huán)境中使用。
什么是持續(xù)集成呢?
回憶一下代碼從開發(fā)到上線的過(guò)程,通常要經(jīng)過(guò)
代碼開發(fā) -> 代碼提交 -> 服務(wù)器編譯、測(cè)試、打包 -> 服務(wù)器部署(大規(guī)模部署用 docker)
整個(gè)過(guò)程中,除了代碼開發(fā)和代碼提交這兩個(gè)步驟是依賴于開發(fā)人員的。
后面的服務(wù)器編譯、測(cè)試、打包和部署都是重復(fù)性工作,完全可以用程序替代,沒(méi)有必要用人工去手動(dòng)操作,而且如果要部署 100 臺(tái)服務(wù)器,全部靠手工的話,運(yùn)維人員一定會(huì)累吐血

于是為了解決上述問(wèn)題,機(jī)智的程序員們發(fā)明了持續(xù)集成!
持續(xù)集成的做什么的?
持續(xù)集成的目標(biāo):代碼提交之后的所有服務(wù)器編譯、測(cè)試、打包和部署所有流程都自動(dòng)執(zhí)行。

之前通常的方案如下圖所示,其中虛線框中的就是持續(xù)集成部分

可以看出來(lái)整個(gè)流程還是十分流暢的,但是其中 jenkins 是需要開發(fā)人員手工搭建的,并且要占用服務(wù)器的一定資源,有一些麻煩
那有沒(méi)有更好的方案呢?那就是今天要講的 GitHub Actions!
GitHub Actions
如何查找 actions
GitHub Actions 可以理解為提交代碼到 GitHub 后 GitHub 直接提供服務(wù)器幫助你做編譯、測(cè)試、打包的工作,不需要再去手工搭建任何持續(xù)集成的工具,也不需要占用自己的服務(wù)器資源做這些事情
之后每一個(gè)操作就可以理解為是一個(gè) action,很多個(gè)操作疊加起來(lái)就是 actions
官方提供了 actions 市場(chǎng),可以根據(jù)自己的需求選擇,https://github.com/marketplace?type=actions

如何編寫 actions
GitHub Actions 配置文件放在倉(cāng)庫(kù)的 .github/workflows 目錄下面,以 yaml 文件的形式存在,文件名根據(jù)自己的需求命名,比如main.yml或者develop.yml
其中文件的配置項(xiàng)可參考 https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions 官方文檔來(lái)進(jìn)行編寫,下面介紹一些常見(jiàn)的選項(xiàng)
- name:name 表示當(dāng)前 action 的名稱,根據(jù)自己的需求進(jìn)行命名
- on:on 表示觸發(fā)條件,比如當(dāng)代碼 push 到 master 分支的時(shí)候觸發(fā),則
on:
??push:
????branches:
??????-?master
- jobs:jobs 表示實(shí)際需要執(zhí)行的工作,比如下方代碼,表示使用 ubuntu 執(zhí)行構(gòu)建工作,執(zhí)行步驟上使用了 appleboy/ssh-action 這個(gè)倉(cāng)庫(kù)的能力
jobs:
??build:
????name:?Build
????runs-on:?ubuntu-latest
????steps:
??????-?name:?executing?remote?ssh?commands?using?password
????????uses:?appleboy/ssh-action@master
實(shí)例:登錄服務(wù)器打包
現(xiàn)在有一個(gè)已經(jīng)開發(fā)完成的 React 前端應(yīng)用,希望每次push代碼到master分支后,能夠自動(dòng)登錄自己的服務(wù)器,拉取最新的代碼并進(jìn)行打包上線,應(yīng)該怎么處理?
首先這里面涉及到ssh登錄的問(wèn)題,所以查找到了一個(gè)倉(cāng)庫(kù)https://github.com/appleboy/ssh-action,能夠自動(dòng)模擬ssh登錄,按照文檔建立.github/workflows/main.yml文件
name:?remote?ssh?command
on:
??push:
????branches:
??????-?master
jobs:
??build:
????name:?Build
????runs-on:?ubuntu-latest
????steps:
??????-?name:?executing?remote?ssh?commands?using?password
????????uses:?appleboy/ssh-action@master
????????with:
??????????host:?${{?secrets.HOST?}}
??????????username:?${{?secrets.USERNAME?}}
??????????password:?${{?secrets.PASSWORD?}}
??????????command_timeout:?5m
??????????script:?|
????????????cd?~/test
????????????git?pull?origin?master
????????????yarn
????????????yarn?build
配置文件中前面的內(nèi)容很容易理解,從 with 開始的部分,涉及到登錄個(gè)人服務(wù)器信息,需要使用賬號(hào)和密碼,那么如果將賬號(hào)密碼明文放在GitHub中,一定會(huì)非常不安全,GitHub也不會(huì)允許這樣的事情出現(xiàn),于是就有secrets配置
選擇 settings->secrets,然后添加文件中的 secrets,這里的值不會(huì)被泄露出去

其中 HOST值為 IP地址,USERNAME 為用戶名,PASSWORD為登錄密碼
比如[email protected]
HOST?=?10.20.0.1
USERNAME?=?root
PASSWORD?=?******(服務(wù)器登錄密碼)
根據(jù)配置文件,在登錄完成后會(huì)連續(xù)執(zhí)行script中的指令
script:?|
??cd?~/test
??git?pull?origin?master
??yarn?build
這里的含義就是訪問(wèn)代碼目錄,拉取最新代碼,然后進(jìn)行打包(其中代碼目錄、Git、Node.js、yarn等環(huán)境要提前準(zhǔn)備好),這樣就可以僅僅通過(guò)一個(gè)yaml配置文件,結(jié)合GitHub Actions 達(dá)到目標(biāo)
小結(jié)
GitHub Actions將應(yīng)用版本管理和持續(xù)集成非常好的結(jié)合了起來(lái),形成了開發(fā)部署利器。
除了上述的例子之外,還有很多功能值得探索,建議大家多多嘗試,給自己的代碼插上持續(xù)集成的翅膀!
- END -來(lái)個(gè)直擊靈魂的四連,轉(zhuǎn)發(fā)、點(diǎn)贊、在看、留言
