4
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 の Trigger Pipeline で任意のワークフローを実行する

Last updated at Posted at 2023-08-03

はじめに

CircleCI でカスタマーサクセスをしている鈴木です。暑い日が続きますが、頭が大きすぎてあう帽子がなく困っています。ちょっとした帽子専門店でも見つかりませんでした。

本記事では CircleCI の Trigger Pipeline を利用して任意のタイミングで任意のワークフローを実行します。この機能を利用することで、通常は CI のワークフローを実行しておき、社内の承認プロセスを経たあと、デプロイ用のワークフローのみを実行するといったことができます。

WebUI で Trigger Pipeline を実行する手順

CircleCI の WebUI のトップページに相当する Dashboard で、リポジトリとブランチを指定すると、手動で Pipeline をトリガーする Trigger Pipeline のボタンがアクティブになります。
image.png

このまま Trigger Pipeline のボタンをクリックすると、選択したブランチの最新コミットの config.yml に従って Pipleline を実行します。
image.png

このウィンドウ内の「Add Parameters (Optional)」の部分を展開すると、下図のような表示となり、Pipeline 実行時にパラメータの値を渡しながら Pipleline を実行することができます。
image.png

ここで指定するパラメーターと値の組み合わせで任意のワークフローを実行できます。

サンプルプロジェクトの背景と config.yml の概観

それでは、config.yml 側にパラメーターと値、そしてその組み合わせに応じて実行するワークフローの設定を行います。今回のサンプルでは、通常のコミットでトリガーされるビルド用のワークフローとは別に、手動の Trigger Pipeline ではデプロイ用のワークフローのみを実行するようにします。さらに、そのデプロイ用のワークフローは変更が merge されたあとの main ブランチから実行できるように制限を加えてみます。
今回のサンプルの config.yml の全体図は以下のようになります。(こちらに公開しています。)

config.yml での設定

それでは部分ごとに見ていきます。

まず、parameters キーでパラメータを以下のように設定しています。

version: 2.1

parameters:
  action:
    type: enum
    enum: [build, deploy]
    default: build

parameters キーの直後に記述している action はパラメーターの名前です。任意の名前をつけることができます。

  • type キーでは値をリスト形式で設定する enum を選んでいます。他にも string, boolean, integer といった type があります。(参考までに boolean を用いた config.yml はこちらです。)
  • enum キーではパラメーターに渡す値をリスト形式で設定しています。サンプルでは build と deploy という文字列を設定しています。
  • default キーではパラメーターの値を明示していない場合に使用する値を設定します。サンプルでは通常時にビルド用のワークフローを実行するよう、build という値をデフォルト値にしています。

jobs キーの部分ではビルド用とデプロイ用のジョブを設定しています。
この部分の解説は割愛します。

workflows キーの部分でビルド用とデプロイ用のワークフローを設定しています。
以下の build-workflow はワークフローの名前です。任意に設定します。
その下の when キーのところで action パラメーターの値が build と等しいときという条件を指定しています。

workflows:
  build-workflow:
    when:
      equal: [ build, << pipeline.parameters.action >> ]
    jobs:
      - build-job

action パラメーターのデフォルト値は build にしているので、通常はこちらのワークフローが実行されます。image.png

次の deploy-workflow は action パラメーターの値が deploy と等しいときに実行されます。さらにここでは、main ブランチのときに実行されるという条件も追加しています。

deploy-workflow:
    when:
      equal: [ deploy, << pipeline.parameters.action >> ]
    jobs:
      - deploy-job:
          filters:
            branches:
              only:
                - main

サンプルプロジェクトの実行

前述の「WebUI で Trigger Pipeline を実行する手順」にしたがって Trigger Pipeline のウィンドウを表示させたあと、下図のように action パラメーターに deploy という値を渡してパイプラインをトリガーします。
※ なお、config.yml の parameters では、enum を type に設定していますが、このウィンドウの Parameter type に enum という選択肢はありません。string を選択します。
image.png

この Trigger Pipeline を main ブランチで実行すると、下図のように deploy-workflow のみが実行されました。
image.png

API でもパラメーター付きの Trigger Pipeline が可能

ここまでは、WebUI 上の Trigger Pipeline ボタンから実行していましたが、CircleCI API からパイプラインの実行をトリガーする際にもパラメータを渡すことができます。
例えば、Pipeline を実行するAPIのリクエスト Body に以下のような設定をすることで WebUI 上の Trigger Pipeline ボタンと同じ動作を実行できます。

{
  "branch": "main",
  "parameters": {
    "action": "deploy"
  }
}

おわりに

というわけで CircleCI の Trigger Pipeline という機能で任意のワークフローを実行してみました。今回のサンプルプロジェクトのように、デプロイ用のワークフローは社内の承認プロセスを経て手動で実行したいといったご要望は少なくありません。さらに、デプロイ先を staging1, staging2, production というように制御したり、特定のユーザーグループのみが実行できるように制御することも可能です。ぜひご活用ください。

4
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
4
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?