🌊

Cline で Circle CI のパイプライン設定ファイルを修正してみる

に公開

今日は最近はやりのCline + VSCode環境でCircle CIのパイプライン設定ファイルを修正できるか試してみました。

https://zenn.dev/kameoncloud/articles/641dbdd496a59d
https://zenn.dev/kameoncloud/articles/dc567a672e311e
https://zenn.dev/kameoncloud/articles/fa2b181c9dedfb
https://zenn.dev/kameoncloud/articles/c989cc650338e4
環境は過去この手順で用いたものを利用します。

さっそくやってみる

0. VSCodeにClineのインストール

この記事ではClineの設定自体は割愛しますが、先駆者が色んなブログを書いてくれています。感謝!
https://qiita.com/minorun365/items/b2990a7228e8cc4ed025
なんかはわかりやすかったです。

1. CircleCIのパイプライン設定ファイル変更をお願いする

現在の設定ファイルは以下となっています。

version: 2.1

executors:
  node-executor:
    docker:
      - image: circleci/node:14
    working_directory: ~/repo

jobs:
  deploy_lambda:
    executor: node-executor
    steps:
      - checkout
      - run:
          name: Create Lambda ZIP
          command: |
            # Lambda用のコードをZIP圧縮
            zip -r lambda.zip .  # カレントディレクトリ(Lambda関数のコード)をZIP圧縮

      - run:
          name: Deploy Lambda function
          command: |
            # AWS CLIをインストール
            curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
            unzip awscliv2.zip
            sudo ./aws/install

            # AWS認証情報を環境変数から設定(Contextから引き出される)
            export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
            export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
            export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}

            # AWS CLIのページャーを無効化
            export AWS_PAGER=""

            # Lambdaのデプロイを実行
            aws lambda update-function-code \
              --function-name firstcci \
              --zip-file fileb://lambda.zip

workflows:
  version: 2
  deploy:
    jobs:
      - deploy_lambda:
          context:
            - aws-credentials
          filters:
            branches:
              only:
                - /prod*/

prodブランチのみパイプラインが設定されており即Deployされるようになっています。
ここで以下のプロンプトを投げてみます。

https://github.com/harunobukameda/firstcci
はCircleCIのパプラインと連携しています。以下の変更を加えてください。
1.新たにstgブランチの設定を追加
2.prodブランチのみ手動承認ステップを追加

1分経たずに以下が生成されます。

version: 2.1

executors:
  node-executor:
    docker:
      - image: circleci/node:14
    working_directory: ~/repo

jobs:
  deploy_lambda:
    executor: node-executor
    steps:
      - checkout
      - run:
          name: Create Lambda ZIP
          command: |
            # Lambda用のコードをZIP圧縮
            zip -r lambda.zip .  # カレントディレクトリ(Lambda関数のコード)をZIP圧縮

      - run:
          name: Deploy Lambda function
          command: |
            # AWS CLIをインストール
            curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
            unzip awscliv2.zip
            sudo ./aws/install

            # AWS認証情報を環境変数から設定(Contextから引き出される)
            export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
            export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
            
            # AWS_DEFAULT_REGIONが設定されていない場合のデフォルト値を設定
            if [ -z "${AWS_DEFAULT_REGION}" ]; then
              export AWS_DEFAULT_REGION="ap-northeast-1"  # デフォルトで東京リージョンを使用
            else
              export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}
            fi
            
            echo "Using AWS region: ${AWS_DEFAULT_REGION}"

            # AWS CLIのページャーを無効化
            export AWS_PAGER=""

            # Lambdaのデプロイを実行
            aws lambda update-function-code \
              --function-name firstcci \
              --zip-file fileb://lambda.zip \
              --region ${AWS_DEFAULT_REGION}

workflows:
  version: 2
  deploy:
    jobs:
      # For staging branches - deploy automatically
      - deploy_lambda:
          filters:
            branches:
              only:
                - stg
                - /stg*/
          context:
            - aws-credentials
      
      # For production branches - require manual approval
      - hold:
          type: approval
          filters:
            branches:
              only:
                - /prod*/
      
      # Deploy to production only after approval
      - deploy_lambda:
          requires:
            - hold
          filters:
            branches:
              only:
                - /prod*/
          context:
            - aws-credentials

余りに便利すぎて眩暈がします。これをprod,stgそれぞれのブランチにコミットしておきます。
以下の様にちゃんと動作しています。

ただこの状態だと同じLambda関数を上書きするためあまりよろしくありません。追加で以下のプロンプトを投げます。

stgでdeployするときのLambda関数の名前をわかる安いものに変更してください
prodはそのままにしてください。

再度以下の設定ファイルが生成されます。

version: 2.1

executors:
  node-executor:
    docker:
      - image: circleci/node:14
    working_directory: ~/repo

jobs:
  deploy_lambda_prod:
    executor: node-executor
    steps:
      - checkout
      - run:
          name: Create Lambda ZIP
          command: |
            # Lambda用のコードをZIP圧縮
            zip -r lambda.zip .  # カレントディレクトリ(Lambda関数のコード)をZIP圧縮

      - run:
          name: Deploy Lambda function to Production
          command: |
            # AWS CLIをインストール
            curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
            unzip awscliv2.zip
            sudo ./aws/install

            # AWS認証情報を環境変数から設定(Contextから引き出される)
            export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
            export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
            
            # AWS_DEFAULT_REGIONが設定されていない場合のデフォルト値を設定
            if [ -z "${AWS_DEFAULT_REGION}" ]; then
              export AWS_DEFAULT_REGION="ap-northeast-1"  # デフォルトで東京リージョンを使用
            else
              export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}
            fi
            
            echo "Using AWS region: ${AWS_DEFAULT_REGION}"

            # AWS CLIのページャーを無効化
            export AWS_PAGER=""

            # Lambdaのデプロイを実行 (Production)
            aws lambda update-function-code \
              --function-name firstcci \
              --zip-file fileb://lambda.zip \
              --region ${AWS_DEFAULT_REGION}
              
  deploy_lambda_stg:
    executor: node-executor
    steps:
      - checkout
      - run:
          name: Create Lambda ZIP
          command: |
            # Lambda用のコードをZIP圧縮
            zip -r lambda.zip .  # カレントディレクトリ(Lambda関数のコード)をZIP圧縮

      - run:
          name: Deploy Lambda function to Staging
          command: |
            # AWS CLIをインストール
            curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
            unzip awscliv2.zip
            sudo ./aws/install

            # AWS認証情報を環境変数から設定(Contextから引き出される)
            export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
            export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
            
            # AWS_DEFAULT_REGIONが設定されていない場合のデフォルト値を設定
            if [ -z "${AWS_DEFAULT_REGION}" ]; then
              export AWS_DEFAULT_REGION="ap-northeast-1"  # デフォルトで東京リージョンを使用
            else
              export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}
            fi
            
            echo "Using AWS region: ${AWS_DEFAULT_REGION}"

            # AWS CLIのページャーを無効化
            export AWS_PAGER=""

            # Lambdaのデプロイを実行 (Staging)
            aws lambda update-function-code \
              --function-name firstcci-stg \
              --zip-file fileb://lambda.zip \
              --region ${AWS_DEFAULT_REGION}

workflows:
  version: 2
  deploy:
    jobs:
      # For staging branches - deploy automatically
      - deploy_lambda_stg:
          filters:
            branches:
              only:
                - stg
                - /stg*/
          context:
            - aws-credentials
      
      # For production branches - require manual approval
      - hold:
          type: approval
          filters:
            branches:
              only:
                - /prod*/
      
      # Deploy to production only after approval
      - deploy_lambda_prod:
          requires:
            - hold
          filters:
            branches:
              only:
                - /prod*/
          context:
            - aws-credentials

よくよく考えるとClineもすごいですが、外部Extensionがファイルを作成して、差分を表示させ、上書きできるようになっているVSCodeの汎用性の高さもすごいです。

Discussion