🛠️
GitHubActions個人用まとめ
下記読めばいいと思いますが、自分用のメモです。
- 実行順序:デフォルトでは、ワークフロー内のジョブはすべて同時に並行して実行される
- 直列実行したい場合、needsで指定したジョブが終わったあとに実行させるようにする
- runs-on: ubuntu-latest
- 最新バージョンのUbuntuLinuxランナーで実行する
- uses:指定したリポジトリをランナーにチェックアウトするアクション
- ビルドマトリックス:OS,言語等複数の環境での組み合わせでテストを実行
- サービスコンテナ:mysqlやpostgresのDB・redis等のキャッシュをテストで利用する場合に使います
- サービスをホストするための一時的なコンテナーを作成できます(dockerイメージを指定)
- sqlmode指定したかったが手こずったので下記利用してmysql使えるようにした
- cweinberger/github-actions-mysql@1.0.0
- https://docs.github.com/ja/actions/using-containerized-services/creating-postgresql-service-containers
- 環境変数
- https://qiita.com/progrhyme/items/56c24b3731deffcd4481#環境変数を設定する
- envを記載する位置によって影響範囲が異なる
- デバッグ
- エラーの原因が分からないときは下記usesを使う
- 「https://tmate.io/t/xxxxx」が実行ログに表示されるのでクリック
- https://qiita.com/ucan-lab/items/20a5a6ad7faea7cd622f
- 「php artisan tinker」を使って接続情報の確認・PDO接続できるかチェック
- 接続情報チェック:config('database.connections.mysql')
- PDO接続チェック:DB::connection()->getPdo();
- exitしないと次のステップが実行されないので注意
- name: Debug
if: ${{ always() }}
uses: mxschmitt/action-tmate@v3
if: ${{ always() }}
で途中でエラーになっても実行されます。
$ php artisan tinker
Psy Shell v0.10.12 (PHP 7.4.26 — cli) by Justin Hileman
>>> config('database.connections.mysql')
=> [
"driver" => "mysql",
"url" => null,
"host" => "127.0.0.1",
"port" => "3306",
"database" => "forge",
"username" => "forge",
"password" => "",
"unix_socket" => "",
"charset" => "utf8mb4",
"collation" => "utf8mb4_unicode_ci",
"prefix" => "",
"prefix_indexes" => true,
"engine" => null,
"options" => [],
]
>>> DB::connection()->getPdo();
PDOException with message 'SQLSTATE[HY000] [1045] Access denied for user 'forge'@'172.18.0.1' (using password: NO)'
参考になるか分からないですが、下記mysqlを使ったジョブになります。
jobs:
analyse:
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
extensions: mbstring, mysql
tools: composer:v2
- name: Resolve dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader
- name: Run phpstan
run: ./vendor/bin/phpstan --memory-limit=1G analyse --error-format=github
- name: Run composer-require-checker
run: php composer-require-checker.phar check composer.json
test:
runs-on: ubuntu-latest
needs: analyse
env:
DB_HOST: 127.0.0.1
DB_PASSWORD: root
steps:
- name: Set up MySQL
uses: cweinberger/github-actions-mysql@1.0.0
with:
version: 5.7 # Optional, default version is `latest`
hostPort: 3306 # Optional, default host port is `3306`
containerPort: 3306 # Optional, default container port is `3306`
rootPassword: root # Optional, default is `empty` (⚠️ required if you did not specify a user)
user: root # Optional, default is `empty` (⚠️ required if you did not specify a root password)
database: narou_test # Optional, default is `TestDatabase`
characterSet: utf8mb4 # Optional, default is `utf8mb4`
collation: utf8mb4_general_ci # Optional, default is `utf8mb4_general_ci`
sqlMode: ""
- name: "Checkout"
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
extensions: mbstring, mysql
tools: composer:v2
- name: Resolve dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader
- name: migrate
run: php artisan migrate --env=testing
- name: Execute tests (Unit and Feature tests) via PHPUnit
run: vendor/bin/phpunit
- name: Debug
if: ${{ always() }}
uses: mxschmitt/action-tmate@v3
deploy:
runs-on: ubuntu-latest
needs: test
steps:
...(デプロイのステップは割愛)
Discussion