5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CircleCI で android-docker executor を Renovate でアップデートする

Last updated at Posted at 2022-09-26

Notes_220926_185151-2.jpg

CircleCI で Android の CI を行うときは 公式のブログ記事にもあるように、
たいてい謹製で用意されている circleci/android Orb を使用すると思います。

ところで、この Orb にはバージョンが切られているわけですが、
その更新は Renovate を導入して自動化することで
忘れることもなくチェックの手間もなく楽にできます:

しかしながら、この Orb が指定する executor のタグに関しては
デフォルトそのままでバージョンアップをしてくれないので、
少しだけ工夫して renovate に面倒をみてもらうことにします。

サンプル CircleCI config

サンプルに Android Orb を使った最小の config を用意しました:

.circleci/config.yml
version: 2.1
orbs:
  android: circleci/android@2.0.3
jobs:
  build:
    executor:
      name: android/android-docker
      resource-class: small
      tag: 2022.08.1
    steps:
      - checkout

workflows:
  android-workflow:
    jobs:
      - build

ここの jobs.build.executor が実行する executor で、その executor.tag が executor のイメージのタグですね。

このタグの一覧は cimg/android のページで確認することができます:

サンプルでは 2022.08.1 を指定していますが、書いている今は 2022.09.2 が出ていますから、既に最新ではなくなっています。

Renovate で検出可能にする

Renovate の config を用意してみます:

renovate.json
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "regexManagers": [

  ]
}

ここの regexManagers に正規表現のパターンを入れることで、任意のパターンと特定のデータソースの更新というふうに紐づけて更新してもらうことを考えます。

今回の例で言うと 次のような正規表現で executor とそのタグを検出することにします:

renovate.json
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "regexManagers": [
    {
      "fileMatch": [
        ".circleci/config.yml"
      ],
      "matchStrings": [
        "executor:\\s+name:\\s*android/android-docker(\\s+resource-class:.+)?\\s+tag:\\s*(?<currentValue>[0-9.]+)"
      ],
    }
  ]
}

config.ymlexecutor 以下の並びなど書き方がプロジェクトによって違う場合は、合うように matchStrings` を調整するとよいでしょう。

正規表現のテストができるサービスを使ったりすると便利です。

regex101__build__test__and_debug_regex.png

(※ renovate.json では \\\ とエスケープしていて、逆に regex101 では /\/ とエスケープしていることに注意しましょう)

Docker データソースの指定

次に、cimg/android を参照していることからわかるように、もとより Docker イメージなので Docker Registry をバージョン情報のソースとして更新してもらいたいと思います:

データソースとして docker を指定することで Renovate がよしなに面倒をみてくれるようになります:

renovate.json
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "regexManagers": [
    {
      "fileMatch": [
        ".circleci/config.yml"
      ],
      "matchStrings": [
        "executor:\\s+name:\\s*android/android-docker(\\s+resource-class:.+)?\\s+tag:\\s*(?<currentValue>[0-9.]+)"
      ],
      "depNameTemplate": "cimg/android",
      "datasourceTemplate": "docker",
      "versioningTemplate": "docker"
    }
  ]
}

さらに 2022.08.1-node のようなバリアントイメージを無視して、本流のみを採用できるように packageRules.allowedVersion も指定します:

renovate.json
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "regexManagers": [...省略...],
  "packageRules": [
    {
      "matchDatasources": [
        "docker"
      ],
      "matchPackageNames": [
        "cimg/android"
      ],
      "allowedVersions": "/^[0-9]{4}\\.[0-9]{2}\\.[0-9]+$/"
    }
  ]
}

これで Renovate config の記述ができました。

確認する

これで今回のパターンを検出できることを確認します。

サンプルのリポジトリをつくってみました:

Renovate Dashboard で結果をみてみると検出され…

job.png

Renovate が android-docker のタグの更新 PR を作ってくれたのでよさそうですね:

Update_cimg_android_Docker_tag_to_v2022_09_2_by_renovate_bot__·Pull_Request__2·_mangano-ito_circleci-android-docker-sandbox.png

以上です。よき自動化ライフを。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?