Open3
Zenn bookを限定公開するCI/CDの構築
スクラップの目的
これらの記事を参考にzenn bookの限定公開を行うCI/CDを構築する
事前準備
- gcpのアカウント作成
- gcpでプロジェクト作成
- 作成したプロジェクトでGoogle Container Registry APIを有効化
- gcloud cliをインストール
- dockerをインストール
- zenn用のレポジトリを作成
- zenn cliをインストール
gcloud cliのインストール
- homebrewを使ってインストール
$ brew install --cask google-cloud-sdk
- PATHを通す
brew install時に下記の通り、PATH通してねと教えてくれる
==> Source [/opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.zsh.inc] in your profile to enable shell command completion for gcloud.
==> Source [/opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.zsh.inc] in your profile to add the Google Cloud SDK command line tools to your $PATH.
.zshrc
source "/opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.zsh.inc"
source "/opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.zsh.inc"
- gcloud cliを初期化
- gcloud cliにログイン
$ gcloud auth login
dockerをインストール
- homebrewでdockerをインストール
$ brew install --cask docker
- dockerアプリを起動
$ open /Applications/Docker.app
- dockerのアカウント作成→ログイン
dockerのアカウントがなければ作成し、ログイン。ログインするとdocker
コマンドがコマンドラインから実行できるようになっている
$ docker --version
手動デプロイ手順
- zenn用のレポジトリを作成
- articleもしくはbookを作成
- Dockerfileを作成
- gcloud cliで使うプロジェクトを選択
- gcloud cliでdockerを設定する
- dockerイメージを作成
- dockerイメージをpush
- cloud runにデプロイ
3. Dockerfileを作成
Dockerfile
FROM node:lts-alpine3.12
WORKDIR /app
RUN apk add --no-cache --virtual .build-deps git \
&& npm init --yes \
&& npm install zenn-cli \
&& npx zenn init \
&& apk del .build-deps
COPY articles articles
COPY books books
ENTRYPOINT ["npx", "zenn", "preview"]
4. gcloud cliで使うプロジェクトを選択
gcloud config set project PROJECT_ID
5. gcloud cliでdockerを設定する
gcloud auth configure-docker
すると以下が表示
shoheiogawa@mba zenn-contents % gcloud auth configure-docker
WARNING: `docker` not in system PATH.
`docker` and `docker-credential-gcloud` need to be in the same PATH in order to work correctly together.
gcloud's Docker credential helper can be configured but it will not work until this is corrected.
Adding credentials for all GCR repositories.
WARNING: A long list of credential helpers may cause delays running 'docker build'. We recommend passing the registry name to configure only the registry you are using.
After update, the following will be written to your Docker config file located at [/Users/shoheiogawa/.docker/config.json]:
{
"credHelpers": {
"gcr.io": "gcloud",
"us.gcr.io": "gcloud",
"eu.gcr.io": "gcloud",
"asia.gcr.io": "gcloud",
"staging-k8s.gcr.io": "gcloud",
"marketplace.gcr.io": "gcloud"
}
}
Do you want to continue (Y/n)? y
6. dockerイメージを作成
GCLOUD_PROJECT=<your project>
docker build -t "gcr.io/$GCLOUD_PROJECT/zenn-preview" .
7. docker imageをプッシュ
docker push "gcr.io/$GCLOUD_PROJECT/zenn-preview"
8. cloud runにデプロイ
shoheiogawa@mba zenn-contents % service_name="zenn-preview-$(uuidgen | tr '[:upper:]' '[:lower:]')"
shoheiogawa@mba zenn-contents % gcloud run deploy "$service_name" \
--image "gcr.io/$GCLOUD_PROJECT/zenn-preview" \
--port 8000 \
--platform managed \
--allow-unauthenticated \
--region asia-northeast1
API [run.googleapis.com] not enabled on project [412561740140]. Would you like to enable and retry (this will take a few minutes)?
(y/N)? y
トラブルシューティング
以下エラーでcloud runのデプロイが失敗
ERROR: (gcloud.run.deploy) The user-provided container failed to start and listen on the port defined provided by the PORT=8000 environment variable. Logs for this revision might contain more information.
Cloud Run側のエラーログを確認すると以下のエラーが表示。npxの実行が失敗している。
terminated: Application failed to start: Failed to create init process: failed to load /usr/local/bin/npx: exec format error"
原因
docker build時にM1、M2 Mac使用の場合、--platform linux/amd64
オプションを付ける必要がある。
参考