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
基礎
方法
- GitHub ActionでDockerコンテナをビルドしてAmazon ECRに保存する
- GitHub ActionsにおけるStep/Job/Workflow設計論
- Gitワークフロー設計について
- GitHub Actions で簡単にバージョン番号付きリリースとリリースノートを作成する方法
- Github Actions チートシート
CI(テスト/デプロイ)
- GitHub Actionsのワークフローを利用してクロスブラウザのE2Eテストを自動化する
- Slack ワークフロー × GitHub Actions で何時でも誰でも楽なステージングデプロイを実現する
- GitHub Actionsでデプロイを並列に実行させてCI/CDを高速化してみた
- GitHub ActionsからECSとECRへのCI/CDを最小権限で実行したい
- GitHub ActionsでDocker Buildするときのキャッシュテクニック
- GitHub Actionsを使ってコンテナ版AWS Lambdaにデプロイしてみた