ブランチを変えただけなのに ― GitLab CI構築時にチェックすべきポイント

カサレアルでは、GitLabで各種研修教材を管理しています。テキストや演習用のソースコードはもちろん、研修で利用する環境もGitLab CIパイプラインで構築できます。決まりきった手順はどんどん自動化して開発効率を高めていくことは、すべてのプロジェクトに共通する課題でしょう。

しかし、便利な仕組みも裏側の働きを理解していないと思わぬエラーを引き起こします。今回は、自動化作業中にぶつかったエラーについて説明します。

補足:AWSに関連する単語が少し出てきますが、AWSの知識は不要です。

起こったこと

ブランチを変えただけなのにGitLab CIパイプラインが失敗しました。

  1. 既存ブランチ(パイプラインが正常に動くもの)から新たなブランチを作る
  2. 新たなブランチを指定してパイプラインを実行する
    ※ソースコードは変更していない
  3. パイプラインが失敗する

パイプラインは、AWS CDK(CloudFormation)を使ってEC2インスタンスなどを起動するものです。エラーメッセージによると、AWSのアカウント情報などが取得できていないようです。

しかし、パイプラインが正常に動作するブランチとまったく同じソースコードを使っているのに、なぜ新しいブランチではパイプラインが失敗したのでしょうか?

原因

パイプラインで参照する環境変数が、GitLabの内部で保護されているためにエラーが起こりました。

GitLab CIパイプラインは実行時に環境変数を参照できます。実行する時に都度指定したい情報や、アクセスキーなどの機密情報を環境変数で保持することが多いです。

基本的に、宣言した環境変数は外部から参照できます。パイプラインの実行画面やログにも表示されます。アクセスキーなど、外に見せたくない機密情報を環境変数とする時は、設定を変更した方が良いでしょう。

・変数の保護: オプション。選択した場合、変数は保護ブランチまたは保護タグで実行されるパイプラインでのみ利用可能です。
・表示レベル: 表示、マスクする (デフォルト)、またはマスクして非表示を選択します。

https://docs.gitlab.com/ja-jp/ci/variables/#define-a-cicd-variable-in-the-ui

今回エラーが起きたリポジトリでは、AWSへアクセスするために必要な情報を環境変数として宣言しています。この変数が保護されているため、新しいブランチから参照できずエラーが起こりました。

対処方法

考えられる対処方法は「環境変数の保護を外す」と「ブランチを保護する」の2つです。変数に代入された値の性質によって適切な対処方法も変わります。

エラーの原因となった環境変数は、AWSへのアクセス情報、つまり外部に漏れたら深刻な問題を引き起こしかねない値が代入されているため、できる限り隠しておかなければなりません。したがって、環境変数の保護は外さず、ブランチを保護することでパイプラインのエラーを解消します。

そもそも、保護ブランチとは、マージやプッシュを行えるユーザーを制限するルールです。ブランチ名と、マージできるユーザー権限、プッシュできるユーザー権限を指定すると、名前が一致するブランチは自動的に保護されます。ブランチ名にはワイルドカードも使えるので、たとえば ‘feature-*’ と指定して「feature-」から始まるブランチをすべて保護することも可能です。

https://docs.gitlab.com/ja-jp/user/project/repository/branches/protected/

保護ブランチを本格的に運用する場合はレビュープロセスなども含めてじっくり検討しなければなりませんが、今回はとりあえず「このブランチは保護されている」とみなされれば十分です。ブランチ名には ‘*’ (すべてのブランチ)、各種権限は「デベロッパー + メンテナー」を指定したルールを追加します。

これで、今まで通り開発でき、パイプラインも実行できる環境が整いました。もう一度パイプラインを実行すると問題なく成功します。

まとめ

ソースコードに差分がなくても、GitLabの設定によってはパイプラインが失敗します。CIパイプラインを構築する時は、環境変数周りの設定もよく確認しましょう。

また、今回はソースコードに手を加える前にパイプラインを実行したおかげで、早期にエラーを解消できました。CIパイプラインを直接触る立場でなくても、新たな作業に取り掛かる前に「今まで通り実行できるか」を確かめる習慣をつけておくと良いでしょう。

--------------------------
開発支援・技術研修のご要望・ご相談はこちらから
--------------------------
【この技術ブログを読んだエンジニアの皆様へ】
カサレアルブログをお読みいただき、ありがとうございます!

私たちは、常に新しい技術に挑戦し、ユーザーのニーズに応えるサービスを提供しています。
もし、当社の技術への情熱や、会社・チーム・社員の雰囲気に共感いただけたなら、
ぜひ私たちと一緒に働きませんか?
現在、株式会社カサレアルでは事業拡大に伴い、新たな仲間となるエンジニアを積極的に募集しています。

少しでも興味をお持ちいただけましたら、まずは弊社のことを知っていただけると嬉しいです。
▼採用サイト
https://www.casareal.co.jp/recruit/career
▼社員インタビュー
https://hrmos.co/pages/casareal/jobs/0000016
▼エンジニアの仲間になる! エントリーはこちらから
https://hrmos.co/pages/casareal/jobs

皆様のエントリーを心よりお待ちしています!

Claude Codeを実案件に投入してみて出てきた課題と、その後の対応

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

コメント ※

名前 ※

メール ※

サイト