5 GitHub Actions 手冊

學習資源:

學習 Actions

記錄學習 Github Actions 的筆記。

學習資料:使用 GitHub 操作 自動化工作流程

1 GitHub 操作使用入門

GitHub 操作 可讓您直接在 GitHub 倉庫中創(chuàng)建自定義的軟件開發(fā)生命周期工作流程。GitHub 操作的核心概念:

  • Workflow:工作流程是您可以在倉庫中創(chuàng)建的自定義自動化的流程旱函,用于在 GitHub 上構建王污、測試、封裝蔬顾、發(fā)行或部署任何代碼項目宴偿。Workflows 由一個或者多個 jobs 組成 并且可以借由 event 部署和激活。
  • Workflow run:workflow 的一個在 pre-configured event 發(fā)生時運行的實例诀豁。您可以看到每個工作流運行的作業(yè)窄刘、操作、日志和狀態(tài)舷胜。
  • Workflow file:使用至少一個作業(yè)定義的工作流配置(configuration)的 YAML 文件娩践。此文件位于 GitHub 存儲庫的根目錄中的 .github/workflows 位置。
  • Job:作業(yè)(或稱為任務)是由 step 組成的 task 定義烹骨。每個作業(yè)均在虛擬環(huán)境的新實例中運行翻伺。您可以定義工作流文件中作業(yè)的運行方式的依賴項規(guī)則。作業(yè)可以并行運行沮焕,也可以依賴于上一個作業(yè)的狀態(tài)吨岭,按順序運行。例如峦树,工作流可以有兩個順序作業(yè): build 和 test辣辫,其中測試作業(yè)取決于生成作業(yè)的狀態(tài)簿废。如果生成作業(yè)失敗,則測試作業(yè)將不會運行络它。
  • Step:步驟是作業(yè)執(zhí)行的一組任務族檬。作業(yè)中的每個步驟都在同一虛擬環(huán)境中執(zhí)行,允許該作業(yè)中的操作使用文件系統(tǒng)共享信息化戳。步驟可以通過 commands 或者 actions 運行单料。
  • Action:操作作為創(chuàng)建作業(yè)的步驟合并的獨立任務。操作是工作流中最小的可移植構建基塊点楼。您可以創(chuàng)建自己的操作扫尖,使用從 GitHub 社區(qū)共享的操作,以及自定義公共操作掠廓。要在工作流中使用操作换怖,必須將其作為步驟包含在內(nèi)。
  • Continuous integration (CI):持續(xù)集成通過提供有關代碼更改的即時反饋來更快地檢測和解決 Bug蟀瞧,從而節(jié)省了開發(fā)人員的時間沉颂。
  • Continuous deployment (CD):持續(xù)部署基于持續(xù)集成。提交新代碼并通過 CI 測試時悦污,代碼將自動部署到生產(chǎn)中铸屉。使用 GitHub ,您可以創(chuàng)建自定義 CD 工作流切端,以自動將代碼部署到存儲庫中的任何云彻坛、自托管服務或平臺。CD 通過自動化部署過程并更快地向客戶部署經(jīng)過測試踏枣、穩(wěn)定的代碼更改來節(jié)省開發(fā)人員的時間昌屉。
  • Virtual environment:GitHub 托管(hosts) Linux、macOS 和 Windows 虛擬環(huán)境以運行工作流茵瀑。
  • Runner:在每個虛擬環(huán)境中等待可用作業(yè)的 GitHub 服務间驮,當 Runner 拾取作業(yè)時,它將運行作業(yè)的操作瘾婿,并將進度蜻牢、日志和最終結果報告回 GitHub。Runner 一次運行一個作業(yè)偏陪。
  • Event:觸發(fā)(triggers)工作流運行的特定活動抢呆。例如,當有人將提交推送到存儲庫或創(chuàng)建問題或拉取請求時笛谦,活動可能來自 GitHub抱虐。您還可以將工作流配置為在使用存儲庫調(diào)度 Webhook 發(fā)生外部事件時運行。
  • Artifact:項目(構件或工件)是生成(build)和測試(test)代碼時創(chuàng)建的文件饥脑。例如恳邀,項目可能包括二進制文件或包文件懦冰、測試結果、屏幕截圖或日志文件谣沸。項目與創(chuàng)建項目的位置的工作流運行相關聯(lián)刷钢,并且可以由其他作業(yè)使用或部署。

2 配置 worflow

如果您對某倉庫具有寫入或管理員權限乳附,您可以創(chuàng)建内地、查看或編輯該倉庫的工作流程。您可以根據(jù)工作流程中包含的操作類型自定義工作流程配置赋除。

您可以在倉庫中創(chuàng)建多個工作流程阱缓,但是必須將工作流程存儲在倉庫根目錄的 .github/workflows 目錄中。

工作流程必須至少有一項作業(yè)举农,并且作業(yè)包含一組用于執(zhí)行個別任務的步驟荆针。 步驟可以運行命令或使用操作。

您可以配置工作流程在 GitHub 事件發(fā)生時開始颁糟,按時間表開始航背,或者由外部事件觸發(fā)。

您需要使用 YAML 語法配置工作流程滚停,并將其在倉庫中存儲為工作流程文件沃粗。 在成功創(chuàng)建 YAML 工作流程文件并觸發(fā)工作流程后,您會看到工作流程每個步驟的創(chuàng)建日志键畴、測試結果、構件和狀態(tài)突雪。

2.1 創(chuàng)建工作流程文件

添加工作流程文件的步驟如下:

  • 在倉庫根目錄創(chuàng)建目錄 .github/workflows 并在此目錄下新建文件 .yml起惕。 例如 .github/workflows/continuous-integration-workflow.yml
  • 使用“GitHub 操作 的工作流程語法”參考文檔選擇可觸發(fā)操作的事件咏删、添加操作以及自定義工作流程惹想。
  • 將您在工作流程文件中的更改提交到您希望其中運行工作流程的分支。

2.1.1 通過事件觸發(fā)工作流程

事件:

  • GitHub 上的事件督函,例如有人推送提交到倉庫或者創(chuàng)建議題或拉取請求時嘀粱。
  • 安排或計劃的事件。
  • 外部事件發(fā)生辰狡。

要在 GitHub 上通過事件觸發(fā)工作流程锋叨,請在工作流程名稱后面添加 on:(指定觸發(fā) workflow 的條件,通常是某些事件)和事件值(如 push)宛篇。例如娃磺,工作流程在更改推送到倉庫中的任何分支時觸發(fā):

name: descriptive-workflow-name
on: push

on 字段也可以是事件的數(shù)組:

on: [push, pull_request]

要計劃工作流程的運行,可以在工作流程文件中使用 POSIX cron 語法叫倍。 例如偷卧,工作流程每小時觸發(fā)一次:

on:
  schedule:
    # * is a special character in YAML so you have to quote this string
  - cron:  '0 * * * *'

下面的例子表示設定 workflow 運行的時間為周一至周五的 2:00 UTC 時間:

on:
  schedule:
  - cron: "0 2 * * 1-5"

要在外部事件發(fā)生后觸發(fā)工作流程豺瘤,您可以回調(diào)“創(chuàng)建倉庫分發(fā)事件”REST API 端點來調(diào)用 repository_dispatch web 掛鉤事件。 更多信息參閱 "Create a repository dispatch event" in GitHub 開發(fā)者文檔听诸。

更多信息和示例請參閱“觸發(fā)工作流程的事件”坐求。

2.1.2 過濾特定分支

您可以設置工作流程僅在特定分支上運行。

例如晌梨,工作流程限定在 master 分支上發(fā)生推送時運行:

on:
  push:
    branches:
    - master
    # file paths to consider in the event. Optional; defaults to all.
    paths:
      - test/*

有關在工作流程中引用分支的更多信息瞻赶,請參閱“GitHub 操作 的工作流程語法”。

2.1.3 選擇虛擬環(huán)境

您可以在 GitHub 托管的虛擬機上或者 Docker 容器中運行工作流程派任≡已罚可以為工作流程中的每項作業(yè)指定虛擬環(huán)境。

要指定想在其中運行工作流程的虛擬環(huán)境的操作系統(tǒng)掌逛、工具师逸、軟件包和設置,必須在工作流程文件中使用特殊語法豆混。更多信息請參閱“GitHub 操作 的虛擬環(huán)境”篓像。

您可以選擇不同類型和版本的虛擬主機,包括 Ubuntu皿伺、Linux 和 macOS员辩。 工作流程中的每項作業(yè)在同一虛擬環(huán)境中執(zhí)行,讓該作業(yè)中的操作使用文件系統(tǒng)共享信息鸵鸥。

要在全新的虛擬環(huán)境實例上運行作業(yè)奠滑,可以指定虛擬主機運行作業(yè):

runs-on: ubuntu-18.04

有關詳細信息,包括支持的版本妒穴,請參閱“GitHub 操作 的工作流程語法”宋税。

2.1.4 配置構建矩陣

要同時在多個操作系統(tǒng)、平臺和語言版本上測試讼油,可以配置構建矩陣杰赛。構建矩陣提供不同的配置供虛擬環(huán)境測試。 例如矮台,工作流程可為多個支持的語言乏屯、操作系統(tǒng)或工具版本運行作業(yè)。對于每項配置瘦赫,將運行作業(yè)的副本并報告狀態(tài)辰晕。您可以使用矩陣在 strategy: 下列出配置選項,在工作流程文件中指定構建矩陣耸彪。

例如伞芹,構建矩陣將通過不同版本的 Node.jsUbuntuLinux 操作系統(tǒng)運行作業(yè):

strategy:
  matrix:
    node: [6, 8, 10]
    os: [ubuntu-14.04, ubuntu-18.04]

2.1.5 使用檢出(checkout)操作

在工作流程中可以使用多個標準操作。檢出操作是標準操作唱较,在以下情況下扎唾,在工作流程中必須位于其他操作前面:

  • 工作流程需要倉庫代碼的副本,比如在創(chuàng)建并測試倉庫或使用持續(xù)集成時南缓。
  • 工作流程中至少有一項操作在同一倉庫中定義胸遇。 更多信息請參閱“在工作流程中引用操作”。

要使用標準檢出操作而不做進一步的指定汉形,請包含此步驟:

<br />- uses: actions/checkout@v1

此示例中使用 v1 確保您使用檢出操作的穩(wěn)定版本纸镊。

要淺層克隆倉庫,或者只復制倉庫的最新版本概疆,請使用 with 語法設置 fetch-depth

- uses: actions/checkout@v1
  with:
    fetch-depth: 1

更多信息請參閱檢出操作逗威。

2.1.6 選擇用于工作流程的操作類型

您可以根據(jù)項目需求在工作流程中使用不同類型的操作:

  • Docker 容器操作
  • JavaScript 操作

更多信息請參閱“關于操作”。

選擇要在工作流程中使用的操作類型時岔冀,建議探索公共倉庫中或 Docker Hub 上的現(xiàn)有操作凯旭,并根據(jù)需要為項目自定義這些操作。

您可以在 github.com/actions 組織中找到并使用 GitHub 創(chuàng)建的操作使套。 要訪問 Docker Hub罐呼,請參閱 Docker 網(wǎng)站上的“Docker Hub”。

2.1.7 在工作流程中引用操作

要在工作流程文件中使用正確的語法引用操作侦高,必須考慮定義操作的位置嫉柴。工作流程可以使用以下位置定義的操作:

  • 公共倉庫
  • 工作流程文件引用操作的同一倉庫
  • Docker Hub 上發(fā)布的 Docker 容器圖像

要使用私人倉庫中定義的操作,工作流程文件和操作必須在同一倉庫中奉呛。您的工作流程不能使用在其他私人倉庫中定義的操作计螺,即使該倉庫在同一組織中。為使工作流程在操作有更新時也保持穩(wěn)定侧馅,您可以在工作流程文件中指定 Git 引用或 Docker 標記號以引用所用操作的版本危尿。

從公共倉庫引用操作:如果操作定義在公共倉庫中,必須使用語法 {owner}/{repo}@{ref}{owner}/{repo}/{path}@{ref} 引用操作馁痴。

jobs:
   my_first_job:
       name: My Job Name
       steps:
       - uses: actions/setup-node@v1
        with:
          node-version: 10.x

要查看完整的工作流程示例,請參閱設置節(jié)點模板倉庫肺孤。下面簡單列出一些說明:

jobs.<job_id>.steps.name:步驟名稱罗晕。
jobs.<job_id>.steps.run:該步驟運行的命令或者 action。
jobs.<job_id>.steps.env:該步驟所需的環(huán)境變量赠堵。

再看一個完整的例子:

name: Greet Everyone
# This workflow is triggered on pushes to the repository.
on: [push]

jobs:
  build:
    # 作業(yè)名稱為 Greeting
    name: Greeting
    # 此作業(yè)在 Linux 上運行
    runs-on: ubuntu-latest
    steps:
      # 此步驟使用 GitHub 的 hello-world-javascript-action:https://github.com/actions/hello-world-javascript-action
      - name: Hello world
        uses: actions/hello-world-javascript-action@v1
        with:
          who-to-greet: 'Mona the Octocat'
        id: hello
      # 此步驟打印上一步操作的輸出(時間)小渊。
      - name: Echo the greeting's time
        run: echo 'The time was ${{ steps.hello.outputs.time }}.'

在工作流程文件使用操作的同一倉庫中引用操作:如果操作在工作流程文件使用該操作的同一倉庫中定義,您可以在工作流程文件中通過 ?{owner}/{repo}@{ref}./path/to/dir 語法引用操作茫叭。

示例倉庫文件結構:

.github
└── workflows
    └── my-first-workflow.yml
.
└── hello-world-action
    └── action.yml

示例工作流程文件:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    # This step checks out a copy of your repository.
    - uses: actions/checkout@v1
    # This step references the directory that contains the action.
    - uses: ./hello-world-action

引用 Docker Hub 上的容器:如果操作在 Docker Hub 上發(fā)布的 Docker 容器的鏡像中定義酬屉,您必須在工作流程文件中通過 docker://{image}:{tag} 語法引用操作。為保護代碼和數(shù)據(jù),強烈建議先驗證 Docker Hub 中 Docker 容器鏡像的完整性后再將其用于工作流程呐萨。

jobs:
  my_first_job:
    steps:
      - name: My first step
        uses: docker://alpine:3.8

有關 Docker 操作的部分示例杀饵,請參閱 Docker-image.yml 工作流程或 Docker 操作倉庫

2.2 創(chuàng)建多個任務的 workflow

workflow 文件的主體是 jobs 字段谬擦,表示要執(zhí)行的一項或多項任務切距。

jobs 字段里面,需要寫出每一項任務的 job_id惨远,具體名稱自定義谜悟。job_id 里面的 name 字段是任務的說明。比如:

jobs:
  first_job:
    name: My first job
  second_job:
    name: My second job

上面代碼的 jobs 字段包含兩項任務北秽,job_id 分別是 first_job 和 second_job葡幸。

有時,我們需要創(chuàng)建有依賴關系的任務贺氓,此時需要借助 needs 字段:

jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

上面代碼中蔚叨,job1 必須先于 job2 完成,而 job3 等待 job1 和 job2 的完成才能運行掠归。因此缅叠,這個 workflow 的運行順序依次為:job1、job2虏冻、job3肤粱。

2.3 將工作流程狀態(tài)徽章添加到您的倉庫

狀態(tài)徽章顯示工作流程目前失敗還是通過。 添加狀態(tài)徽章的常見位置是倉庫的 README.md 文件厨相,但也可將其添加到您喜歡的任何網(wǎng)頁领曼。 徽章顯示默認分支(通常是 master)的狀態(tài)。 您也可以在 URL 中使用 branch 和 event 查詢參數(shù)顯示特定分支或事件運行的工作流程狀態(tài)蛮穿。具體的格式:

https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_NAME>/badge.svg

2.4 為操作創(chuàng)建自述文件

如果計劃公開分享您的操作庶骄,建議創(chuàng)建自述文件以幫助人們了解如何使用您的操作。 您可以將此信息包含在 README.md 中:

  • 操作的詳細描述
  • 必要的輸入和輸出變量
  • 可選的輸入和輸出變量
  • 操作使用的密碼
  • 操作使用的環(huán)境變量
  • 如何在工作流程中使用操作的示例

配置工作流程

構建操作

在 GitHub 上設置持續(xù)集成

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末践磅,一起剝皮案震驚了整個濱河市单刁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌府适,老刑警劉巖羔飞,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異檐春,居然都是意外死亡逻淌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門疟暖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卡儒,“玉大人田柔,你說我怎么就攤上這事」峭” “怎么了硬爆?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锦募。 經(jīng)常有香客問我摆屯,道長,這世上最難降的妖魔是什么糠亩? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任虐骑,我火速辦了婚禮,結果婚禮上赎线,老公的妹妹穿的比我還像新娘廷没。我一直安慰自己,他們只是感情好垂寥,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布颠黎。 她就那樣靜靜地躺著,像睡著了一般滞项。 火紅的嫁衣襯著肌膚如雪狭归。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天文判,我揣著相機與錄音过椎,去河邊找鬼。 笑死戏仓,一個胖子當著我的面吹牛疚宇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赏殃,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼敷待,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仁热?” 一聲冷哼從身側響起榜揖,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抗蠢,沒想到半個月后根盒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡物蝙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敢艰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诬乞。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出震嫉,到底是詐尸還是另有隱情森瘪,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布票堵,位于F島的核電站扼睬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏悴势。R本人自食惡果不足惜窗宇,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望特纤。 院中可真熱鬧军俊,春花似錦、人聲如沸捧存。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昔穴。三九已至镰官,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吗货,已是汗流浹背泳唠。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卿操,地道東北人警检。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像害淤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子窥摄,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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

  • Git global setup git config --global user.name "your name...
    Lucifer黃閱讀 142評論 0 0
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 2,963評論 1 3
  • 2008年,當湯姆·普雷斯頓-沃納(Tom Preston Werner)建峭、克里斯·萬斯特拉斯(Chris Wan...
    小哈公社閱讀 1,027評論 0 9
  • 請允許我借鑒前輩們的東西~~~~ 感激不盡~~~~~ 以下為Android 框架排行榜 么么噠~ Android...
    嗯_新閱讀 2,017評論 3 32
  • 圖决摧、文/龍小燭 -1- 青嵐被接回殷家老宅的那天是一個日頭晃眼的大晴天亿蒸,南方的初夏一旦翻跳過了雷雨期凑兰,便迎來這樣長...
    龍小燭閱讀 1,268評論 13 23