GitLab CI で継続的 composer update する

みなさん composer update していますか?

f:id:enomotodev:20180831192902p:plain

ってことで以前

enomotodev.hatenablog.com

という記事を書いたのですが、今回は GitLab CI で継続的に composer update するようにしてみました。

パッケージ紹介

GitLab CI でも簡単に composer update ができる gitlabci-composer-update-mr というパッケージを作成しました。

不具合などありましたら PR ください!

使い方

1. アクセストークンの発行

まずはアクセストークンを発行します。

GitLab の右上の自分のアイコンから Setting を押して、Access Tokens を選択します。

f:id:enomotodev:20190125175952p:plain

Name に適当な名前をつけ、Expires at は有効期限なのでここでは空にします。

Scopes で api を選択し、そのまま作成します。

作成するとアクセストークンが表示されるのでメモっておいてください。

2. アクセストークンの設定

composer update を行いたいプロジェクトのページに移動します。

f:id:enomotodev:20190125180039p:plain

画面左側のナビゲーターから CI/CD を選択し、Environment variables のアコーディオンを開くと、環境変数を設定できるフォームが表示されます。

key に GITLAB_API_PRIVATE_TOKEN を入力し、value には先ほどメモったアクセストークンを入力します。

(Protected を選択すると Protected branch の CI でしか環境変数を使用できなくなるので、ここでは Protected は選択しません)

Save ボタンを押して保存したら、アクセストークンの設定は完了です。

3. .gitlab-ci.yml の編集

次は CI の設定を記述している .gitlab-ci.yml を編集していきます。

job:on-schedule:
  image: composer:latest
  only:
    - schedules
  script:
    - "composer global require enomotodev/gitlabci-composer-update-mr"
    - "$COMPOSER_HOME/vendor/bin/gitlabci-composer-update-mr ユーザ名 メールアドレス ブランチ名"

こんな感じで書きます。(job:on-schedule には好きなものを入れてください)

注意点としては、テストなど他のジョブが書かれている場合は他のジョブは全て

other_job:
  except:
    - schedules
  script:
    # snip

のような形で except で schedules を除外するようにしてください。

4. Schedules の設定

f:id:enomotodev:20190125180123p:plain

上の図のように移動して Schedules の作成画面に移動します。

f:id:enomotodev:20190125180221p:plain

こんな感じで入力してあげたら完成です。

5. テスト

実際に設定した時間まで待つのもあれなので、手動で起動してテストをしましょう。

スケジュール一覧ページに Run ボタンがあるので押してみます。

6. 確認

Run ボタンが押されると GitLab ランナーが動いて .gitlab-ci.yml に記載した通りにジョブを実行してくれます。

ジョブの実行が完了したら新しく Merge Request が作成されているので確認します。

f:id:enomotodev:20190125175811p:plain

無事差分が表示されました!!🎉🎉🎉

GitLab実践ガイド impress top gearシリーズ

GitLab実践ガイド impress top gearシリーズ

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現