Gitlab-CIでビルド時に環境変数CIが原因でエラーになる時の対処法
GitLabのCI/CDを用いて、GitLab側でビルド&AWSのS3へデプロイをしようとしたときに
以下のようなエラーが起きました。
⋮
yarn build
⋮
Treating warnings as errors because process.env.CI = true.
Most CI servers set it automatically.
Failed to compile.
⋮
Githubの解決方法はいくつか見つけましたが、Gitlabの解決方法が日本の記事で見つからなかったのでまとめました。
TL;DR
build_job:
stage: build
variables:
CI: false
script:
- yarn
- yarn build
原因は環境変数のCIがtrueになっているせいで、ビルド時のwarningがerrorとして処理されるためです。
ジョブのvariablesにCI: falseを定義することで、実行モードがCIと認識されなくなり、ビルドが通ります。
今回の事象と原因
事象
Gitlab-CIを使いgitlab-ci.ymlを元に、Gitlab上でビルドのジョブを実行していた時に、冒頭で書いた以下のエラーが出ました。
⋮
yarn build
⋮
Treating warnings as errors because process.env.CI = true.
Most CI servers set it automatically.
Failed to compile.
⋮
要約すると、
process.env.CI = true であるため、ビルド時に出るwarningをerrorとして扱います。
ほとんどのCIサーバーでは自動的にtrueにセットされています。
とのことです。
原因
今回の自分のケースでは、TypeScriptで書いていてtypescript-eslintという構文エラーの検証パッケージを入れています。
ローカルではany型を多用していたのですが、typescript-eslintでは「any型を使うな!ちゃんと型定義をしろ!」とwarningで警告されていました。
ですがとりあえず出来れば良いの精神だったので、このwarningを無視していたわけですが(ダメ、絶対)
このwarningが、gitlab上でbuildした時にerrorとして認識されてしまった訳です。
解決方法
gitlab-ci.ymlで記述したものがGitlab上で実行されるのですが、その中でCIの環境変数をfalseと定義してあげることでwarningをerrorとして処理させなくしています。
build_job:
stage: build
variables:
CI: false
script:
- yarn
- yarn build
gitlab-ci.ymlの書き方の問題ですが、ジョブのvariablesにCIを定義してあげる必要があるんですね。
(↓GitLab公式ドキュメント 定義済みの環境変数)
https://gitlab-docs.creationline.com/ee/ci/variables/predefined_variables.html
ちなみにgithubの方では以下のような書き方で解決できるようです。
jobs:
build:
name: Build
runs-on: alpine-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Install
run: yarn
- name: Build
run: yarn build
env:
CI: false

zawa1205
webフロントエンドエンジニア