0
1

CDKPipelineで実装したパイプラインにスナップショットテストの工程を追加する

Posted at

完成物

前回までの記事で書いたパイプラインにスナップショットテストの工程を追加したいと思います

Qiita Image.png

実現させたい動きとしては

  1. ローカルでスナップショットを実行して内容に問題がなかったら'npm test -- -u'で更新する
  2. 変更をmainにプッシュ
  3. GitHubActionsによってS3にソースコードをアップロード
  4. S3の変更をトリガーとしてパイプライン起動
  5. Buildの部分でテストを実行。1の工程を忘れていたらデプロイさせないようにする
  6. テストが通ったらデプロイ実行

実際のコード

公式を見ると「テストステージ」として追加する機能としてはなさそうだったので、既存のステージに対してステップを追加する形で追加する必要がありました。

他に参考になりそうな記事もなかったのでその方針で実装することにしました。

lib/stacks/pipeline.stack.ts

// CodePipeline、CodeBuildの作成。S3バケットをソースとしたパイプラインの構築
    const pipeline = new CodePipeline(this, 'PipelineName', {
      pipelineName: 'CdkPipelineName',
      synth: new ShellStep('Synth', {
        input: CodePipelineSource.s3(bucket, 'source-code.zip'),
        commands: [
          'npm ci',
          'npm run build',
          'npx cdk synth'
        ],
      }),
    });

    // テストステップを新しく作成
    const testStep = new ShellStep('RunTests', {
      commands: [
        'npm install',
        'npm test'
      ]
    });

    // デプロイステージにテストステップの工程を追加する
    pipeline.addStage(deployStage, {
      pre: [testStep], //ここを追記。ステージの事前アクションとしてステップを追加した。
    });
  }


ここについて
パイプラインの各フェーズ(ビルド、テスト、デプロイなど)が異なる独自の仮想環境なのでnpm installしないと、「jestがないよ」とエラーになりました。

// テストステップ
    const testStep = new ShellStep('RunTests', {
      commands: [
        'npm install',
        'npm test'
      ]
    });

実際の挙動

きちんとスナップショットテストを更新せずにデプロイしようとしてもデプロイされません。
詳細を表示によって、どこで落ちたのかも確認することができます。

test pipeline.png

テストをクリアするときちんとデプロイされます。
success.png

0
1
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
0
1