0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitActionsについて備忘録

Posted at

GithubActionsはCI/CDの1つ。
各種"イベント"をトリガーに実行開始される。
イベント=push,pull,request,timerなど
実行する処理はワークフロー(YAMLファイル)に定義
/.github/workflows/{NAME}.yml
実行する処理はワークフロー/ジョブ/ステップの3層構造になる。

sample.yml
name: "Hello World Flow" #ワークフローの名称

on: #トリガーの指定
  push:
    paths:
      - ".github/workflows/**"

jobs: #ジョブの指定
  sample:
    name: Hello World Job
    runs-on: ubuntu-latest #実行環境の指定
    steps: #ステップの指定
      -run: echo "Hello World !"
トリガー

トリガーとは、Github Actionsが実行されるキッカケ(イベント)
ワークフロー中では"on"配下に指定

sample.yml
#イベント
push #指定されたイベントが指定された条件下で発生した時に実行
pull_request #指定されたイベントが指定された条件下で発生した時に実行

#時間指定
schedule #決められた日時で定期的に実行

#マニュアル実行
workflow_dispatch #GitHubのWebページから手動実行

#ワークフロー依存
workflow_run #ワークフロー同士の依存関係を定義。別ワークフローがトリガーまたは完了した場合に実行
イベント(push)

プッシュイベント時に実行。
「指定ブランチ」にプッシュされた場合、ワークフローを実行。

sample.yml
name: "Hello World Flow"

on: 
  push:
    branch:
      - main
      - 'releases/**'

jobs: 
  sample:
    ・・・省略・・・

パターン指定の例

  • feature/* : "/"(スラッシュ)含まない任意ブランチ
  • feature/** : feature以下全てのブランチ
  • main : 完全一致するブランチ

「指定パス」にプッシュされた場合、ワークフローを実行。

sample.yml
name: "Hello World Flow"

on: 
  push:
    paths:
      - '**.js'

jobs: 
  sample:
    ・・・省略・・・

パターン指定の例

    • : "/"(スラッシュ)以外の任意文字列と一致
  • **.js : リポジトリ内のすべての".js"ファイル
  • docs/* : ルート直下のdocsフォルダ直下ファイル
  • docs/** : ルート直下のdocsフォルダ以下全ファイル

「指定ブランチ」かつ「指定パス」にプッシュされた場合、ワークフローを実行。との指定も出来る。

「指定タグ」が設定された場合、ワークフローを実行。

sample.yml
name: "Hello World Flow"

on: 
  push:
    tags:
      - v2
      - v1.*

jobs: 
  sample:
    ・・・省略・・・

パターン指定の例

    • : "/"(スラッシュ)含まない任意タグ
  • ** : 全てのタグ
  • v2* : v2で始まる任意タグ
  • v2 : 完全一致するタグ
イベント(pull_request)

プルリクエスト時に実行。
例)開発時のテスト実行。本番やステージ向けリリースの為の結合

sample.yml
name: "Hello World Flow"

on: [pull_request]

jobs: 
  sample:
    ・・・省略・・・

「ブランチ」「パス」「ブランチ+パス」の指定は全てpullと同じ指定方法を取る。

時刻指定(schedule)

cron形式で指定されたタイミングで定期的に実行
例)テストで時間がかかるもの(ブラウザ、パフォーマンス)、脆弱性検査

sample.yml
name: "Hello World Flow"

on:
  schedule:
    - cron: '30 5 * * 1,3'
    - cron: '30 5 * * 2,4'
jobs: 
  sample:
    ・・・省略・・・

cron形式とは
0 5 * * 6 = 毎週土曜日 朝5:00に実行
| | | | └ 週の何曜日か(0~6またはSUN~SAT)
| | | └ 月(1~12またはJAN~DEC)
| | └ 1か月の何日目か(1~31)
| └ 時(0~23)
└ 分(0~59)

マニュアル実行(workflow_dispatch)

GitHubのWebページ上から手動実行
例)デバッグ実行。脆弱性検査。

sample.yml
name: "Hello World Flow"

on:
  workflow_dispatch: #引数なしで実行できるようにする場合は値が空でOK

jobs: 
  sample:
    ・・・省略・・・
ワークフロー依存(workflow_run)

指定したワークフローが「要求」または「完了」したら実行
例)ワークフローを再利用したい場合、ビルドは同じワークフローを使ってリリースは別のワークフローにしたい

sample.yml
name: "Hello World Flow"

on:
  workflow_run:
    workflows: ["Build"]
    types: [requested] #request(要求時に実行)かcompleted(完了時に実行)
    branches:
      - 'releases/**'
jobs: 
  sample:
    ・・・省略・・・
ジョブ

GithubActionsが実行する処理のカタマリ。
ワークフロー中ではルート直下に"jobs"を続けて記述

sample.yml
name: "Hello World Flow"

on:[push, workflow_dispatch]

jobs: #ジョブの指定
  sample: #ジョブIDの指定
    name: Hello World Job #ジョブ名の指定
    runs-on: ubuntu-latest #実行環境(ランナー)の指定
    steps: #実行する処理(ステップ)を指定
      -run: echo "Hello World !"
ステップ

ワークフロー中では"jobs.{JOB_ID}.steps"以下に記述

sample.yml
name: "Hello World Flow"

on:[push, workflow_dispatch]

jobs:
  sample:
    name: Hello World Job
    runs-on: ubuntu-latest
    steps:
      -uses: actions/checkout@v3" #再利用可能なアクション。
      -run: echo "Hello World !" #CLI(.sh)プログラムの実行
ステップ(run)
sample.yml
    ・・・省略・・・
jobs:
  sample:
    name: Hello World Job
    runs-on: ubuntu-latest
    steps:
      -name: Greeting message #ステップの表示名を設定
       id: greeting #ステップIDを設定
       run: | #複数行シェルスクリプトを記述
          echo "Hello" #シェルスクリプトを記述
          echo "${NAME}" 
       env: #環境設定を設定
            NAME: tanaka
       shell: bash #bash,pwsh,python,cmd,powershellなど選択可能
      working-directory: tmp #ワークディレクトリの指定

すべての環境で同じ環境設定を構築したい場合、defaultsを定義する。

sample.yml
    ・・・省略・・・
defaults: 
  run:
    shell: bash
    working-directory: tmp

jobs:
  sample:
    name: Hello World Job
    runs-on: ubuntu-latest
    steps:
    ・・・省略・・・
ステップ(run)
sample.yml
    ・・・省略・・・
jobs:
  sample:
    name: Hello World Job
    runs-on: ubuntu-latest
    steps:
      -name: Greeting message #ステップの表示名を設定
       id: greeting #ステップIDを設定
       uses: actions/checkout@v3 #実行したいアクションをバージョン番号付きで記述
       with: #アクションごとに必要とされる引数を指定。
         fetch-depth: 0
ランナー

ランナーとは、GithubActionsの処理を実行する環境。
ランナーはジョブ単位で起動するため、ジョブ間で情報連携するには工夫が必要。
Githubが提供する環境と自身で構築する環境があるが、Githubが提供する環境がオススメ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?