GitLab CI のパイプラインで処理した内容をコミットしたい

GitLab CI のパイプラインで処理した内容をコミットしたくなることがあります。

たとえば、

といったケースです。

.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

f:id:u9bo:20190915004336p:plain

コミットしたい処理

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 を簡潔に記述できます。

github.com


  1. たとえば、マイグレーションのない環境で Unitテストを実行するときに役立つかもしれません。