初體驗 GitHub Actions Workflows 工作流入門教程及我的使用感受

GitHub Actions 是 GitHub 於2018年10月推出的持續集成服務。之前我使用的是Travis CI,昨天我體驗了一次GitHub Actions,感覺功能更強大,可以玩的地方更多,我就介紹一下我初次使用的感受。

GitHub Actions 是什麼

GitHub Actions 可以參考的同類對象有Jenkins、Azure Pelines、CircleCI、TravisCI等,都是持續集成(Continuous integration,簡稱CI)服務的提供商,持續集成其實說白了就是根據每次提交的變化不停的在設計、開發、測試、發佈這樣滾動:

而持續集成的流程是由很多步奏組成的,例如先構建準備運行環境、從Git指定分支拉取代碼、編譯打包、運行單元測試、登陸遠程服務器、發佈到第三方等等步奏,GitHub把這些動作都稱之為Action,所以由多個Action構成的工作流就被命名為 GitHub Actions。

為了能讓Actions能夠複用,GitHub還提供了官方市場,可以搜索其他人提交的Action腳本,還有其他人收集的Action倉庫:awesome actions。

初體驗 GitHub Actions Workflows 工作流入門教程及我的使用感受

GitHub Actions 的構成

GitHub Actions 是由下面幾部分組成的:

  • workflow (工作流程):持續集成一次運行的過程,就是一個 workflow。
  • job (任務):一個 workflow 由一個或多個 jobs 構成,含義是一次持續集成的運行,可以完成多個任務。
  • step(步驟):每個 job 由多個 step 構成,一步步完成。
  • action (動作):每個 step 可以依次執行一個或多個命令(action)。

GitHub Actions 工作流文件

想要配置 GitHub Actions 的工作流,我們只需要定義一個YAML文件即可,它存放在代碼倉庫的.github/workflows目錄,例如我的工作流文件:https://github.com/renfei-net/WinterEE/blob/513214d5e7288cee65721c9d05aebdff18d60a04/.github/workflows/build.yml,文件的名字可以自己定義,沒有要求。workflow 的語法字段非常多,可以參見官方文檔。下面是我自己寫的工作流文件:

<code>name: build
on: [push, pull_request]
jobs:
build:
name: building
runs-on: ubuntu-latest
services:
mysql:

image: mysql:5.7
ports:
- 3306:3306
env:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
MYSQL_DATABASE: winteree
MYSQL_ROOT_PASSWORD: root
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
rabbitmq:
image: rabbitmq:3.7.26-management-alpine
ports:
- 15672:15672
- 5672:5672
zipkin:
image: openzipkin/zipkin:2.21.1
ports:
- 9411:9411
redis:
image: redis:6.0.1
ports:
- 6379:6379
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Verify MariaDB Connection and Load Data
env:
PORT: ${{ job.services.mysql.ports[3306] }}
run: |
while ! mysqladmin ping -h"127.0.0.1" -P"$PORT" --silent; do
sleep 1
done
- name: Loading Database
env:
PORT: ${{ job.services.mysql.ports[3306] }}
run: mysql -h 127.0.0.1 -P $PORT -uroot -proot --default-character-set=utf8 winteree < environment/db/winteree.sql
- name: Cache Maven packages
uses: actions/cache@v2
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven
run: mvn -B clean package --file pom.xml
- name: Upload Coveralls
shell: bash
run: |
curl -s https://codecov.io/bash

mvn clean test org.jacoco:jacoco-maven-plugin:prepare-agent install org.jacoco:jacoco-maven-plugin:report
mvn org.eluder.coveralls:coveralls-maven-plugin:report -DrepoToken="${{ secrets.coveralls_token }}"/<code>
  • name:是我給這個工作流起的名字,你可以起一個屬於你的名字,這個沒有要求。
  • on:是指定觸發 workflow 的條件,通常是某些事件,我這裡定義了push和pull_request事件就會觸發這個工作流。
  • jobs:是workflow 文件的主體,表示要執行的一項或多項任務。
  • jobs.build:是我自己給這個任務起的ID叫”build“,下面我使用<job_id>來代替這個任務ID,你可以給你的任務起一個你自己的任務ID。
  • jobs.<job_id>.name:是我自己給這個任務起的名字叫”building“,你可以給你的任務起一個你自己的任務名稱。
  • jobs.<job_id>.runs-on:是指定運行所需要的虛擬機環境。它是必填字段。目前可用的虛擬機有:ubuntu、windows、macOS。
  • jobs.<job_id>.services:是聲明運行環境所需要的服務,我這裡使用了MySQL、RabbitMQ、Zipkin、Redis。
  • jobs.<job_id>.steps:指定每個 Job 的運行步驟,可以包含一個或多個步驟。
  • jobs.<job_id>.steps.name:指這個不步奏的名稱。
  • jobs.<job_id>.steps.run:指該步驟運行的命令或者 action。
  • jobs.<job_id>.steps.env:指該步驟所需的環境變量。
  • GitHub Actions 中使用密碼

    密碼是不應該公開在代碼倉庫裡的,所以需要先到項目倉庫的 Settings -> Secrets 中添加你的密碼,例如我添加了名為”COVERALLS_TOKEN“的密碼:

    初體驗 GitHub Actions Workflows 工作流入門教程及我的使用感受

    然後在workflow流程文件中使用”${{ secrets.coveralls_token }}“這樣的格式來使用。

    GitHub Actions 的徽章圖標

    以後,每次修改後推送源碼,GitHub Actions 都會自動運行,那怎麼知道運行的結果呢,GitHub Actions 為我們提供了徽標圖標,可以加入到你的項目主頁中,圖標地址語法如下:

    <code>https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_NAME>/badge.svg?branch=<branch-name>/<code>
    • <OWNER>:所有者的用戶名
    • <REPOSITORY>:項目倉庫名稱
    • <WORKFLOW_NAME>:工作流名稱
    • <branch-name>:分支名稱,如果不寫默認是master分支

    所以我的圖標地址就是:https://github.com/renfei-net/WinterEE/workflows/build/badge.svg

    我的使用感受

    我之前一直使用的是TravisCI,這次使用了GitHub Actions以後感覺速度比TravisCI快很多,而且支持的東西也比TravisCI多,配置起來也不復雜,可玩性非常高,可以實現非常多自動化的東西,以後我主要就使用GitHub Actions來做CI/CD了。

    初體驗 GitHub Actions Workflows 工作流入門教程及我的使用感受


    分享到:


    相關文章: