今天的越寫悅快樂之系列文章為大家?guī)鞻ue項目如何使用GitHub Actions進(jìn)行自動發(fā)布缎玫。眾所周知岂昭,GitHub已經(jīng)成為全世界碼農(nóng)進(jìn)行學(xué)習(xí)的朝圣之地,眾多的開源項目在GitHub上進(jìn)行分享和分發(fā)赶撰,讓我們一起來探索GitHub的奧秘吧。
GitHub Actions是什么(What)
GitHub Actions 是 GitHub 的持續(xù)集成服務(wù)炕舵,于2018年10月推出。
大家知道跟畅,持續(xù)集成由很多操作組成幕侠,比如抓取代碼、運行測試碍彭、登錄遠(yuǎn)程服務(wù)器,發(fā)布到第三方服務(wù)等等悼潭。GitHub 把這些操作就稱為 actions庇忌。
很多操作在不同項目里面是類似的,完全可以共享舰褪。GitHub 注意到了這一點皆疹,想出了一個很妙的點子,允許開發(fā)者把每個操作寫成獨立的腳本文件占拍,存放到代碼倉庫略就,使得其他開發(fā)者可以引用捎迫。
如果你需要某個 action,不必自己寫復(fù)雜的腳本表牢,直接引用他人寫好的 action 即可窄绒,整個持續(xù)集成過程,就變成了一個 actions 的組合崔兴。這就是 GitHub Actions 最特別的地方彰导。
GitHub 做了一個官方市場,可以搜索到他人提交的 actions敲茄。另外位谋,還有一個 awesome actions 的倉庫,也可以找到不少 action堰燎。
GitHub Actions的應(yīng)用場景(Where)
- GitHub上的項目都可以使用
GitHub Actions的基本概念(What)
workflow (工作流程):持續(xù)集成一次運行的過程掏父,就是一個 workflow。
job (任務(wù)):一個 workflow 由一個或多個 jobs 構(gòu)成秆剪,含義是一次持續(xù)集成的運行赊淑,可以完成多個任務(wù)。
step(步驟):每個 job 由多個 step 構(gòu)成鸟款,一步步完成膏燃。
action (動作):每個 step 可以依次執(zhí)行一個或多個命令(action)。
workflow 文件
GitHub Actions 的配置文件叫做 workflow 文件何什,存放在代碼倉庫的.github/workflows
目錄组哩。
workflow 文件采用 YAML 格式,文件名可以任意取处渣,但是后綴名統(tǒng)一為.yml
伶贰,比如foo.yml
。一個庫可以有多個 workflow 文件罐栈。GitHub 只要發(fā)現(xiàn).github/workflows
目錄里面有.yml
文件黍衙,就會自動運行該文件。
workflow 文件的配置字段非常多荠诬,詳見官方文檔琅翻。下面是一些基本字段。
(1)name
name
字段是 workflow 的名稱柑贞。如果省略該字段方椎,默認(rèn)為當(dāng)前 workflow 的文件名。
name: GitHub Actions Demo
(2)on
on
字段指定觸發(fā) workflow 的條件钧嘶,通常是某些事件棠众。
on: push
上面代碼指定,push
事件觸發(fā) workflow有决。
on
字段也可以是事件的數(shù)組闸拿。
on: [push, pull_request]
上面代碼指定空盼,push
事件或pull_request
事件都可以觸發(fā) workflow。
完整的事件列表新荤,請查看官方文檔揽趾。除了代碼庫事件,GitHub Actions 也支持外部事件觸發(fā)迟隅,或者定時運行但骨。
(3)on.<push|pull_request>.<tags|branches>
指定觸發(fā)事件時,可以限定分支或標(biāo)簽智袭。
on:
push:
branches:
- master
上面代碼指定奔缠,只有master
分支發(fā)生push
事件時,才會觸發(fā) workflow吼野。
(4)jobs.<job_id>.name
workflow 文件的主體是jobs
字段校哎,表示要執(zhí)行的一項或多項任務(wù)。
jobs
字段里面瞳步,需要寫出每一項任務(wù)的job_id
闷哆,具體名稱自定義。job_id
里面的name
字段是任務(wù)的說明单起。
jobs:
my_first_job:
name: My first job
my_second_job:
name: My second job
上面代碼的jobs
字段包含兩項任務(wù)抱怔,job_id
分別是my_first_job
和my_second_job
。
(5)jobs.<job_id>.needs
needs
字段指定當(dāng)前任務(wù)的依賴關(guān)系嘀倒,即運行順序屈留。
jobs:
job1:
job2:
needs: job1
job3:
needs: [job1, job2]
上面代碼中,job1
必須先于job2
完成测蘑,而job3
等待job1
和job2
的完成才能運行灌危。因此,這個 workflow 的運行順序依次為:job1
碳胳、job2
勇蝙、job3
。
(6)jobs.<job_id>.runs-on
runs-on
字段指定運行所需要的虛擬機(jī)環(huán)境挨约。它是必填字段味混。目前可用的虛擬機(jī)如下。
-
ubuntu-latest
诫惭,ubuntu-18.04
或ubuntu-16.04
-
windows-latest
惜傲,windows-2019
或windows-2016
-
macOS-latest
或macOS-10.14
下面代碼指定虛擬機(jī)環(huán)境為ubuntu-18.04
。
runs-on: ubuntu-18.04
(7)jobs.<job_id>.steps
steps
字段指定每個 Job 的運行步驟贝攒,可以包含一個或多個步驟。每個步驟都可以指定以下三個字段时甚。
-
jobs.<job_id>.steps.name
:步驟名稱隘弊。 -
jobs.<job_id>.steps.run
:該步驟運行的命令或者 action哈踱。 -
jobs.<job_id>.steps.env
:該步驟所需的環(huán)境變量。
下面是一個完整的 workflow 文件的范例梨熙。
name: Greeting from Mona
on: push
jobs:
my-job:
name: My Job
runs-on: ubuntu-latest
steps:
- name: Print a greeting
env:
MY_VAR: Hi there! My name is
FIRST_NAME: Mona
MIDDLE_NAME: The
LAST_NAME: Octocat
run: |
echo $MY_VAR $FIRST_NAME $MIDDLE_NAME $LAST_NAME.
上面代碼中开镣,steps
字段只包括一個步驟。該步驟先注入四個環(huán)境變量咽扇,然后執(zhí)行一條 Bash 命令邪财。
GitHub Actions的使用(How)
以我的Vue項目為例來說明GitHub Actions的基本使用。
- 我們在項目的頂部欄看到
actions
的一項质欲;
- 創(chuàng)建
workflow
文件树埠;
我們在項目倉庫的目錄下創(chuàng)建文件,存放的位置在.github/workflows/nodejs.yml
嘶伟。
name: nodejs
on:
push:
branches:
- master
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '12'
- run: npm install
- run: npm run-script build
- name: Deploy to GitHub Pages
uses: JamesIves/github-pages-deploy-action@3.7.1
with:
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
BRANCH: gh-pages
FOLDER: dist
保存文件并推送到GitHub怎憋;
等待workflow運行結(jié)束,訪問GitHub Pages九昧,會看到結(jié)果绊袋。
參考(Where)
個人收獲及總結(jié)(With)
今天的文章為大家介紹了如何利用GitHub Actions為自己的項目創(chuàng)建CI服務(wù),可以讓我們隨時構(gòu)建我們的項目铸鹰,把項目的運行環(huán)境癌别、測試和發(fā)布一體化,也能節(jié)省我們的時間蹋笼,當(dāng)然我們也可以使用Docker來創(chuàng)建測試鏡像展姐,測試運行我們的項目,讓我們一起持續(xù)提升我們的技術(shù)姓建,并做更有價值的事情诞仓。若是我的文章對你有所啟發(fā),那將是我莫大的榮幸速兔。希望和您一起精進(jìn)墅拭,成為更好的自己。