Github Actions
是Github
推出的一個新的功能,能夠爲咱們的項目自動化地構建工做流,例如代碼檢查,自動化打包,測試,發佈版本等等。入口在項目pull request
的旁邊。 node
sign up for beta
便可。
因爲每一個
action
都是在一個獨立的docker
容器裏面運行的,因此須要咱們有一點docker
方面的知識儲備,關於docker
本文就很少加介紹了...git
字面上理解,workflow
就是一個工做流,而action
就是這個工做流中的一個個步驟,github
規定每次最多隻能併發執行兩個工做流,每一個工做流中的actions
會按照咱們須要的順序運行,actions
怎樣執行能夠根據咱們的須要進行定製。github
github
提供的可視化界面進行建立actions
入口,一開始咱們能夠看到這個界面:create a new workflow
按鈕,進入自定義workflow
頁面:workflow
拉下來一條線,下面那個就是
action
,
GitHub官方
提供了幾個
action
可讓咱們直接用,點擊右側的幾個
action
對應的
use
按鈕便可。
例如咱們想使用npm
,點擊npm
對應的use
,出現如下界面,假如咱們每次push
分支以後想執行npm install
,在runs
對應的輸入框輸入npm install
,那麼,執行npm install
這個action
就寫好了。docker
在項目根目錄新建.github
文件夾,在.github
文件夾新建main.workflow
文件,編寫完成後推送到master
分支便可。npm
這是一個簡單的main.workflow
文件:數組
workflow "Build, Test, and Publish" { on = "push" resolves = ["Publish"] } action "Build" { uses = "actions/npm@master" args = "install", env = { LOG_FILE = "log.txt" } } action "Test" { needs = "Build" uses = "actions/npm@master" args = "test" } action "Publish" { needs = "Test" uses = "actions/npm@master" args = "publish --access public" secrets = ["NPM_AUTH_TOKEN"] } 複製代碼
其實,咱們大概能夠看出這段代碼想要表達的意思,這裏我簡單介紹一下幾個屬性:瀏覽器
workflow
的屬性:bash
actions
,能夠是字符串或者一個字符串數組,如果只有一個字符串,表示最後調用的action
,如果一個字符串數組,則表示完成這個workflow
須要執行完這幾個actions
。action
的屬性:markdown
needs:定義執行本action
前須要成功執行的action
,能夠是字符串或者一個字符串數組,若是needs
的action
不止一個,那麼這些actions
會並行執行。併發
uses:定義執行本action
須要運行的docker
鏡像,如uses = "node:10"
,若是不是使用docker hub
提供的鏡像,而是選擇本身編寫Dockerfile
的話(後面會具體說明),這裏的路徑則爲本地Dockerfile
的路徑。
runs:指定在docker
鏡像中要執行的命令,若指定,則會覆蓋Dockerfile
裏面的ENTRYPOINT
,若不指定,則默認執行Dockerfile
裏面ENTRYPOINT
的命令。
假如咱們想要在action裏面執行npm install,那麼只要指定:
runs: "npm install"
便可。
action
的參數,能夠是一個字符串或者一個字符串數組,若指定,則會覆蓋Dockerfile
裏面的CMD
。假如咱們想要在action裏面執行npm run lint,那麼只要指定:
args: "run lint"
便可。
Dockerfile
時會須要用到,具體說明請看官方文檔。在github action
界面點擊右側的actions
列表,經過點擊use按鈕使用該action
,根據需求填寫runs
, args
, env
等參數便可。
能夠參考Github actions for npm等官方提供的action
源碼進行編寫,主要是編寫如下兩個文件:
Dockerfile
entrypoint.sh
複製代碼
經過本身寫dockerfile
的方式來建立action
的話,須要執行如下代碼,否則會出錯。
chmod +x ./actions/entrypoint.sh(替換成本身項目entrypoint.sh的路徑)
複製代碼
原本是想經過安裝yarn
,而後使用yarn
來安裝依賴的,可是由於容器的獨立性,每一個action
都是獨立的,不存在全局環境,因此沒法實現,而github
官方提供了一個公共的存儲空間,npm install
下載完成的文件就放在公共的存儲空間,所以能夠提供給後面的action
使用,這也意味着若是須要在action
之間傳遞信息,暫時也只能利用公共的存儲空間,使用文件讀寫的方式來傳遞。
瀏覽器沒法直接在docker容器裏面啓動,使用xvfb-run npm test
成功解決。
因爲github action
還算比較新的功能,網上的教程不是不少,以上大可能是參考官方文檔,加上本身摸索嘗試得出的結論,若是有什麼錯漏之處,歡迎指出~