GitLab CI のパイプラインで処理した内容をコミットしたい
GitLab CI のパイプラインで処理した内容をコミットしたくなることがあります。
たとえば、
- Prettier での JavaScript や SCSS のコード整形を CI で行いたい
- PHP CS Fixer での PHP のコード整形を CI で行いたい
- Laravel IDE Helper Generator で生成される meta ファイルの更新を CI で行いたい
- マイグレーション管理されていないデータベース環境で、データベースからdumpしたスキーマを定期的に保存しておきたい1
といったケースです。
.gitlab-ci.yml の内容
こんな内容に落ち着きました。
詳細
image
今回は alpine イメージを利用したので、gitのインスト—ルをしています。
他のイメージを利用してもそのまま動くと思います。
$GITLAB_API_ACCESS_TOKEN
git push できるように personal access token を設定します。
https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html
scope は api として、environment variables に設定しておきます。
https://docs.gitlab.com/ee/ci/variables/README.html
コミットしたい処理
CI に処理させたい内容を記述します。
(今回は現在時刻を timestamp.txt
に書き出すあまり意味のない処理を記述しています)
たとえば、Prettier で JavaScript のコード整形を行いたい場合は、このように記述するとよさそうです。
./node_modules/.bin/prettier --write "resources/js/**/*.js"
PHP CS Fixer の場合は、以下の指定になりそうです。
./vendor/bin/php-cs-fixer fix
git push
--push-option=ci.skip
というオプションを利用すると、CIのpushによって生成されたパイプライン処理をスキップさせることができます。よって、pushされたcommit内容に関してはパイプライン処理が実行されません。
なお、コミットメッセージに [ci skip]
や [skip ci]
と記述しても同等の意味を持ちます。
一方でコード整形が終わった後にパイプライン処理などでテストを実行したい場合などは、このオプションを削除するとよいでしょう。
https://docs.gitlab.com/ee/ci/yaml/#skipping-jobs
ところで
と、ここまで書いてしまいましたが、PHP CS Fixer の結果をコミットしたいだけであれば、
php-cs-fixer-commit という composer パッケージがあります。こちらを使うと .gitlab-ci.yml
を簡潔に記述できます。