Self managed GitLabでRenovateを実行する
この記事は GitLab Advent Calendar 2023 の 4日目の記事です。
公式に.gitlab-ci.yml
が提供されているのでそれを使わせてもらうのが基本ですが、Self managed GitLabなので少々勝手が違う点もあります。
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
からも起動できるようにします。
renovate:
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
- if: '$CI_PIPELINE_SOURCE == "web"'
タイムゾーン指定
GitLab CIのスケジュールとは関係ありません(先ほどの例でいうと以下のvariableの設定によらず午前7時に実行されることに変わりない)。
renovate.json5
でschedule
を設定した場合に関係します。
variables:
# https://docs.renovatebot.com/configuration-options/#timezone
RENOVATE_TIMEZONE: Asia/Tokyo
ドキュメントでいうGlobal schedule
がGitLab CIの設定で、Specific schedule
が各リポジトリのrenovate.json5
のschedule
設定になります。
renovate.json5
にschedule
設定がある場合、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