CodePipeline 流れ図
ステージ
Source
ソースコードの取得
ここではBitbucket
dir構造
├── build
│ ├── go
│ │ └── Dockerfile
│ └── nuxt
├── cmd
│ └── api
│ └── main.go
├── e2e
│ ├── cypress
│ │ └── e2eテストファイル
│ ├── cypress.config.js
│ └── package.json
└── web
└── nuxtのコード
Build
echo(Go) -> ECRにコンテナイメージをプッシュ
Nuxt -> s3にファイルをアップ
Goのビルド
ECRに登録するGoコンテナを作成する | ECS FargateでGoコンテナを起動してローリングアップデートする
↑こちらを参考に
コンパイルしたバイナリファイルと必要な静的ファイルだけを詰めたimageを作り,imageサイズを削減する
FROM golang:1.20.2-alpine as build
RUN apk add --update && apk add git
RUN mkdir /go/src/app
WORKDIR /go/src/app
ENV GO111MODULE=on
COPY ./cmd/go.mod ./
RUN go mod download
ADD ./cmd /go/src/app
WORKDIR /go/src/app/api
RUN go build
# ここからECR保存用image
FROM alpine:3.10
RUN apk add --update --no-cache ca-certificates
WORKDIR /go/src/app/api/
# バイナリファイルのコピー
COPY --from=build /go/src/app/api/api /go/src/app/api/
# 静的ファイルのコピー
COPY --from=build /go/src/app/api/public/static /go/src/app/api/public/static/
ENTRYPOINT ["/go/src/app/api/api"]
deploy
ECS Fargateを使っているので、
サービス設定でBuildステージで作ったimageのコンテナを立てるように設定
e2e-test
こちらの記事が大変参考になりました
AWS CodeBuildでCypressのE2Eテストをする | DevelopersIO
CodeBuild設定
cypressの公式imageを環境に設定する
詳細は公式: https://docs.cypress.io/guides/continuous-integration/aws-codebuild
## buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
nodejs: latest
pre_build:
commands:
- cd e2e
- npm install
build:
commands:
- npx cypress run
まとめ
CIをCodePipelineを用いて組んだ時のポイントのみを書いていきました
各フェーズが明示的に分けて処理を考えていけるのが良かったです
弊社では、一緒に働いてくれるエンジニアを募集しています。
↓興味のある方はこちらから↓
Wantedly - スタジオアンビルト株式会社
こんなWebサービスを作っています。
・マドリー
・Studio Unbuilt