CircleCI 設定ファイルを複数の GitHub リポジトリにデプロイする方法

専用の CircleCI プロジェクトを用意して、GitHub API で設定ファイルをリポジトリのリストにプッシュするというアプローチをお勧めします。

この CircleCI プロジェクトのビルド元のリポジトリには、たとえば次のものを配置します。

  • 他のリポジトリにプッシュする個別の設定ファイル (この例では global-ci.yml)
  • 上記の設定ファイルをプッシュするビルドを定義した config.yml
  • "user/repository" または "org/repository" という形式でリポジトリのリストを記載したファイル (この例では satellites.txt)

上記の設定に加えて、適切な権限 (スコープ) を指定してGitHub API トークンを作成し、これを含む環境変数を追加する必要もあります。

config.yml の例を次に示します。

version: 2.1jobs:  deploy-config:    docker:      - image: circleci/python    steps:      - checkout      - run:          name: テスト          command: |            echo GLOBAL_64=$(base64 -w 0 global-ci.yml) >> $BASH_ENV            while IFS= read -r repo              do                echo BLOB_SHA=$(curl --location --request GET "https://api.github.com/repos/$repo/contents/.circleci/config.yml" --header "Authorization: token ${GH_TOKEN}" --header "Accept: application/vnd.github.v3+json"|jq -r .sha) >> $BASH_ENV                source $BASH_ENV                curl --location --request PUT "https://api.github.com/repos/$repo/contents/.circleci/config.yml" --header "Authorization: token ${GH_TOKEN}" --header "Accept: application/vnd.github.v3+json" --data-raw "{\"message\":\"Global config update\", \"content\":\"$GLOBAL_64\", \"sha\":\"${BLOB_SHA}\"}"              done < "satellites.txt"          workflows:  main:    jobs:      - deploy-config

 

GitHub API リファレンス:

この記事は役に立ちましたか?
2人中1人がこの記事が役に立ったと言っています