質問: こんにちは。 Gitlab,CI共に初心者です。 やりたいこと ------- 以下のようなCI環境を作ろうとしています。 1. 開発者が各々のトピックブランチにpush 2. キリが良ければ、そのリモートのトピックブランチをmasterにmerge requestと出す 3. ここでCIツールが動き、MR出されたコードに対してテストコードを実行する 4. 失敗すればその時点でMR取り消し、成功すれば権限のあるものが確認しMRを承認する やったこと ------ Gitlab.comとgitlabCIを使って、CI環境を構築しています。 gitlab-ci.ymlに設定を書き、 * push時にテストコードを実行 * テストの結果をslackに送信 といった、練習用のymlはちゃんと動きました。 その後、上記のことを実現したいと思いいろいろ調べたのですが、 「gitlabへのpushなどをトリガにしてJenkinsでテストを走らす」などの情報がたくさん出てきて、なかなか理解に苦しんでいます。 最初の推測では、gitlabciなどを使わなくとも「MR時にテストを走らす」などの設定が簡単にできると思っていたのですが、どうやらそういったものはないようで、 調べた中でも最も近いものが以下の質問でした。 Trigger jobs in gitlab-ci on merge request - Stack Overflow gitlab上でwebhookとPipeline triggersで設定をし、 gitlabにMRがあったことをwebhookで検知し、gitlab-ci.yml上で書いたtriggerでそれを確認してテストコードを走らせるというものです。 シンプルな作業をするためにすごい遠回りをしている感じがします。 つまっていること --------- 以上を踏まえて、gitlab-ci.ymlの一部に以下のように書きました。 `only: trigger`とすることで、trigger時にのみテストが実行されるようなのですが、 トピックブランチにpushした時点で普通にテストコードが実行されてしまっています。 どこの設定がおかしいのかわからず困っています。 ``` test_job: stage: test script: - python test.py only: - /^feature-.*$/ - triggers ``` 聞きたいこと ------- * 本当にこのstackoverflowの方法しかないのか * このstackoverflowの質問の理解の仕方はあっているのか * gitlab-ci.ymlの書き方はあっているのか どなたかご存知のかたいらっしゃればご教示願えませんでしょうか。 よろしくおねがいします。
回答: こんな感じでいかがでしょうか? ``` stages: - master デプロイ名: stage: master script: - if [ $CI_COMMIT_REF_NAME = 'master' ]; then - echo 'masterブランチですのでデプロイ処理を実行' - else - echo 'master以外のブランチですので何もしない' - fi tags: - tag_name ```