GITHUB ACTION 快速入門

最近在看Github Action , 學習他的基本的CI/CD的操作。簡單的記錄一下他的基本流程。

Github action是Github網站提供的一個託管的CI/CD 的工具。具體的文檔可以參考
https://docs.github.com/en/actions/creating-actions/about-actions

Github action本身支持javascript action和Docker action,前者效率更高,可以跑在任何OS平臺上,但是需要手動配置依賴文件;後者因爲是Docker,只能跑在Linux平臺,效率略低,但是不需要手動配置依賴文件。

下面看一個簡單的docker例子,每次我通過git push的時候,都會觸發一個workflow,這個workflow會輸出 runner的內存狀態。

https://github.com/vetpartner/containeraction

我需要創建下面幾個文件。

.github\workflows\config.yaml

on: [push]

jobs:
  my-job:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: run the action
      id: hello
      uses: ./
      with:
        myInput: 'Chad'
    - name: output the memory
      run: |
        echo ${{ steps.hello.outputs.memory }}
        echo "total memory successfully output"

根目錄下面一個 action.yml 文件


name: 'my first container action'
description: 'A demo'
author: 'Beanxyz'
inputs:
  myInput:
    description: 'greeting to use'
    required: true
    default: 'Awesome Guru'
outputs:
  myOutput:
    description: 'total memory'
runs:
  using: 'docker'
  image: 'Dockerfile'

根目錄下面一個Dockerfile 文件


FROM debian:9.5-slim

ADD entrypoint.sh /entrypoint.sh

RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

根目錄下面一個 entrypoint.sh 文件

#!/bin/sh

echo "Hello $INPUT_MYINPUT"
memory=$(cat /proc/meminfo)
echo "::set-output name=memory::$memory"

執行效果如下所示

GITHUB ACTION 快速入門

簡單的描述一下文件和執行的流程

首先我們的workflow 會通過關鍵字 on 觸發 push的事件,下面會執行一系列的jobs,my-job是我的job的名字(id),runs-on 指定這個runner的操作系統爲 ubuntu,我們可以看見他對應的過程叫set up job

GITHUB ACTION 快速入門

接下來,我們的jobs裏面定義了一系列的steps。第一個step 是使用一個關鍵字 use 調用官方的公共的actions/checkout@v2,他的作用就是讀取我的repository裏面的內容 放入一個runner的workflow的臨時空間裏面。這一步是所有workflow裏面必須要有的。除了官方的actions,我們也可以直接use 其他人的actions,格式爲username/repository@XXX, XXX可以指向release version,指向branch,或者指向某一個commit都是可以的

GITHUB ACTION 快速入門

第二個step指向了我自己的根目錄。我的根目錄裏面存放了action.yml, Dockerfile和entrypoint.sh 三個文件。他們的調用順序是 workflow的文件查看action.yml, 發現裏面使用的docker container action方式,於是他會根據我們定義的Dockerfile來創建鏡像和容器,Dockerfile裏面我們配置了一個啓動腳本,因此容器啓動的時候回自動執行這個腳本。

workflow.yml - > action.yml -> Dockerfile - > entrypoint.sh

我在action.yml裏面還可以定義輸入變量和輸出變量,然後在workflow.yml裏面通過 with 來配置, 每個輸入變量他會自動生成一個環境變量$INPUT_變量名ID, 因此在我們的shell腳本里面, 我們使用echo的時候,直接調用了$INPUT_MYINPUT

GITHUB ACTION 快速入門

最後,我們可以輸出output的變量
GITHUB ACTION 快速入門

一個簡單的CI 流程就出來了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章