Golang使用Github Actions CI教程

Github Actions是Github推出的一個新的功能,能夠爲咱們的項目自動化地構建工做流,
例如代碼檢查,自動化打包,測試,發佈版本等等.入口在項目pull request的旁邊.
Github Actions 目前處於beta階段,須要申請Beta體驗資格.
Github Actions Beta 申請體驗資格入口網站.node

1.什麼是Github Actions

GitHub Actions allow you to implement custom logic without having to create an app to perform the task you need.
You can combine GitHub Actions to create workflows using an action defined in your repository,
a public repository on GitHub, or a published Docker container image.
GitHub Actions are customizable and can use the GitHub API and any publicly available third-party APIs to interact with a repository.
For example, an action can publish npm modules, send SMS alerts when urgent issues are created, or deploy production ready code.
You can discover, create, and share your GitHub Actions with the GitHub community.

GitHub Actions容許您實現自定義邏輯,而無需建立應用程序來執行您須要的任務.
你能夠經過經過在Github public倉庫定義Action或者經過你發佈的docker鏡像來建立workflow.
GitHub操做是可自定義的,能夠調用GitHub API和任何公開可用的第三方API與Github Repo進行交互.
例如,操做能夠發佈npm模塊,在發送緊急Issue時發送SMS警報,或部署production代碼.
您能夠經過GitHub社區發現,建立和共享您的GitHub Actions.git

2.Github Actions可以作什麼

  1. 經過Github Actions 你能夠每次Github事件(push,pull-request,merge,issue,comment...)執行你的代碼.
  2. (Travis/CircleCI功能類似)最多見的功能就是持續集成(CI),你能夠在Github Actions中建立測試代碼,使用Email/SMS接受測試的反饋.
  3. (Travis/CircleCI功能類似)能夠查看特定運行的日誌.
  4. GitHub操做支持運行任意代碼,所以您能夠作的不單單是構建和測試代碼.

3.Golang Github Actions基本workflow

工做流定義一個或多個Job.每一個Job都包含多個步驟,例如檢查源代碼,安裝Go工具鏈,構建和測試Go代碼等.
workflow由GitHub託管的計算機上運行.這些服務是對私有倉庫收費,功能倉庫免費.github

一下構建和測試Go包的最簡單的workflow.在你的public倉庫.github/workflows/go.yml中建立一下代碼:golang

name: TechMojotvGo
on: push
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: Set up Go 1.12
        uses: actions/setup-go@v1
        with:
          go-version: 1.12
        id: go

      - name: Check out source code
        uses: actions/checkout@v1

      - name: Build
        run: go build .

      - name: Test
        run: go test -v .

讓咱們來解讀一下.github/workflows/go.ymldocker

3.1定義工做流的名稱

name定義GitHub Actions 的名稱,Actions在GitHub的repo視圖的選項卡中可見.macos

name: TechMojotvGo

3.2指定觸發workflow的事件

工做流由GitHub repo中的事件觸發.有許多事件類型,包括push,pull request,merge...等.npm

on:push 表示:當Github 收到push代碼.
您可使用yaml數組指定多個事件:ubuntu

on: [push, pull_request]

3.3指定執行工做流的操做系統

runs-on定義運行工做流的機器的操做系統.最多見的:windows

  • ubuntu-latest :ubuntu 18.04(未來可能會更新)
  • macos-latest
  • windows-latest

常見的操做系統列表數組

3.4定義Job

Job是一系列操做

jobs:
  build:
    name: BuildJobName

咱們只定義一個build的job, name可見名稱爲BuildJobName.

咱們能夠定義多個job. job並行運行,但它們是在一個空的環境中開始的,因此若是你有多個步驟,好比構建和測試,那麼把他們合併成一個單一任務會更快.

3.5安裝Golang工具鏈

- name: Set up Go 1.12
  uses: actions/setup-go@v1
  with:
    go-version: 1.12
  id: go

Actions的美妙之處在於它們是開源的而且能夠被共享.
actions/setup-go是https://github.com/actions/se...

Actions能夠是JavaScript(node.js)腳本或docker鏡像.
actions/setup-go是一個node.js actions.

name是人類可讀的步驟名稱.
Action能夠接受咱們提供的參數with go-version是一個actions/setup-go可以解析的參數.它定義了咱們要安裝的Go版本.

3.6編譯和測試代碼

- name: Build
  run: go build .

- name: Test
  run: go test -v .

咱們能夠逐步執行任意命令.
Go代碼最多見的步驟是:構建它並運行測試.執行命令時的默認工做目錄是源代碼目錄.當步驟失敗時,workflow將中止,您將收到一封電子郵件.

4.Github高級feature

4.1使用secret

有時你須要使用一個你不能公開的secret.在此示例中,咱們有一個部署到Netlify賬戶的項目.

在GitHub UI中,咱們定義了NETLIFY_TOKEN 使用Netlify進行身份驗證所需的secret

接下來咱們在.github/workflows/go.yml中使用他

- name: Netlify deploy
  env:
    NETLIFY_TOKEN: ${{secrets.NETLIFY_TOKEN}}
  run: |
    ./netlifyctl -A ${{secrets.NETLIFY_TOKEN}} deploy || true
    cat netlifyctl-debug.log || true

咱們能夠在工做流.yml文件中訪問secret {{ secrets.NETLIFY_TOKEN }} .咱們能夠做爲參數傳遞給用runor 執行的命令,如本例所示,設置環境變量use env.
請記住,已記錄執行命令的stdoutstderr,所以請當心不要打印secret.更多關於secret的信息.

4.2調試workflow

workflow正在遠程服務器上運行,所以若是出現問題,可能很難弄清楚緣由.

這裏有一些tips:

5.總結

因爲github action還算比較新的功能,大部分功能機制和Travis/CircleCI相似,可是Github Actions能夠獲取更多的Github Actions權限,目前還在Beta狀態還有不少不足.

相關文檔

相關文章
相關標籤/搜索