github_action - taka512/memo GitHub Wiki

GitHub actionについてあれこれ

基本

  • 定義は「.github/workflows/」の下に作成
  • Step
    • 違うシェルで実行するとおかしくなるものについては1つのStepにまとめる一択
    • ↑のような事情がないならば、見やすさ読みやすさを考えて区切っていけばOK
  • Job
    • 違うマシン上で動かすことができないStepは1つのJob上にまとめる一択
    • ↑のような事情がないならば、Workflow自体がFAILしたときにどこからre-runさせるのが良いか?というのをもとにJobを分割する
  • Workflow
    • 分けたいなと思ったときは分けるのが正解
    • 同一トリガで発火するWorkflowの間に実行順序を付けたいという場合にも、Reusable Workflowを利用してリファクタすれば別Workflowのままにすることができるので、無理やりWorkflowを結合しなくてもOK
    • StepとJobに複雑な条件分岐を入れるくらいなら、そもそもWorkflow自体を分けてしまうのが得策

記述例

name: CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Run a one-line script
        run: echo Hello, world!

on書式

onはGitHubアクションが起動する条件を指定する

タグがプッシュされた場合

on:
  push:
    tags:
      - v*

masterブランチでPR作られたり、pushされた場合

on:
  # Triggers the workflow on push or pull request events but only for the master branch
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

composer

https://github.com/php-actions/composer

    steps:
      - name: Cache Composer dependencies
        uses: actions/cache@v2
        with:
          path: /tmp/composer-cache
          key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}
      
      - uses: php-actions/composer@v6

MySQL

jobs:
  job-with-mysql-8_0:
    runs-on: ubuntu-20.04
    services:
      db:
        image: mysql:8.0
        ports:
          - 3306:3306
        env:
          MYSQL_ROOT_PASSWORD: root_password
          MYSQL_DATABASE: foo
          MYSQL_USER: user1
          MYSQL_PASSWORD: user1_password
        options: >-
          --health-cmd "mysqladmin ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - name: Show Docker containers
        run: docker ps -a
      - name: Show databases for root user
        run: mysql --protocol=tcp -h localhost -P 3306 -u root -proot_password -e "SHOW DATABASES"
      - name: Show databases for user1
        run: mysql --protocol=tcp -h localhost -P 3306 -u user1 -puser1_password -e "SHOW DATABASES"

link

基礎

方法

CI(テスト/デプロイ)

その他