🧹

Self managed GitLabでRenovateを実行する

2023/12/04に公開

この記事は GitLab Advent Calendar 2023 の 4日目の記事です。


公式に.gitlab-ci.ymlが提供されているのでそれを使わせてもらうのが基本ですが、Self managed GitLabなので少々勝手が違う点もあります。

https://gitlab.com/renovate-bot/renovate-runner

Self managed GitLabにrenovate-runnerリポジトリを作成

リポジトリ名に縛りはありませんが特に凝る必要もないのでrenovate-runnerとします。

CI/CD Variablesを入力する

You need to add a GitLab Personal Access Token (scopes: read_user, api and write_repository) as RENOVATE_TOKEN to CI/CD variables.
You can also use a GitLab Group Access Token.

RENOVATE_TOKEN(必須)とGITHUB_COM_TOKEN(必須ではない)をセットします。

It is also recommended to configure a GitHub.com Personal Access Token (minimum scopes) as GITHUB_COM_TOKEN so that your bot can make authenticated requests to github.com for Changelog retrieval as well as for any dependency that uses GitHub tags.
Without such a token, github.com's API will rate limit requests and make such lookups unreliable.

GITHUB_COM_TOKENはchangelogの取得やGitHubAPIレートリミットの軽減のために使用します。
"minimum scopes"はpublic_repoで十分そうです。

.gitlab-ci.ymlを作成

自分のGitLabとgitlab.comは別インスタンスのため、READMEの例と違いremoteで公式のYAMLを参照します。

include:
  - remote: https://gitlab.com/renovate-bot/renovate-runner/-/raw/v16.47.1/templates/renovate.gitlab-ci.yml

variables:
  RENOVATE_EXTRA_FLAGS: '--autodiscover=true --autodiscover-filter=foo-group/*'

renovate:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule"'

後で便利にするために設定を追加しますが、動かすにはこれだけで足ります。

GitLab CIのスケジュールを作成する

例として毎日午前7時に実行します。

スケジュール設定例のキャプチャ

追加の設定

マージリクエストに対してdry-run

remoteのrenovate-runner自体を更新するMRでdry-runさせます。

renovate:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule"'
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      variables:
        RENOVATE_EXTRA_FLAGS: '--dry-run=full --autodiscover=true --autodiscover-filter=foo-groups/*'

Webから手動実行

UIのRun Pipelineからも起動できるようにします。

image

renovate:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule"'
    - if: '$CI_PIPELINE_SOURCE == "web"'

タイムゾーン指定

GitLab CIのスケジュールとは関係ありません(先ほどの例でいうと以下のvariableの設定によらず午前7時に実行されることに変わりない)。
renovate.json5scheduleを設定した場合に関係します。

variables:
  # https://docs.renovatebot.com/configuration-options/#timezone
  RENOVATE_TIMEZONE: Asia/Tokyo

https://docs.renovatebot.com/key-concepts/scheduling/

ドキュメントでいうGlobal scheduleがGitLab CIの設定で、Specific scheduleが各リポジトリのrenovate.json5schedule設定になります。
renovate.json5schedule設定がある場合、globalとspecificのスケジュールが重なる場合のみブランチとマージリクエストの作成が行われます。

例えば以下の設定だとGitLab CIのジョブは毎日7時に起動しても、このリポジトリのMRは水曜日にしか作られません。

  "schedule": [
    "on Wednesday"
  ],

マージリクエストの作成数上限撤廃

デフォルト値が小さいので無制限にします。
MRが増えすぎたりCIが渋滞する場合はこの値を調整してもいいですが、無制限を基本としつつ個別にrenovate.json5で調整することもできます。

variables:
  # https://docs.renovatebot.com/configuration-options/#prconcurrentlimit
  RENOVATE_PR_CONCURRENT_LIMIT: 0
  # https://docs.renovatebot.com/configuration-options/#prhourlylimit
  RENOVATE_PR_HOURLY_LIMIT: 0
{
  "prConCurrentLimit": 10,
  "prHourlyLimit": 2,
}

AWS_REGION

AMIの更新をさせたいときに指定します。

variables:
  # https://docs.renovatebot.com/modules/datasource/aws-machine-image/
  # https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html
  # https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-images.html
  AWS_REGION: ap-northeast-1

Discussion