9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHubのwebフックでCodeBuildを動かす場合に見ているブランチを変更したい

Last updated at Posted at 2023-04-05

GitHubのwebフックイベントでCodeBuildを動かす際にぶち当たる壁

CodeBuildでデプロイの仕組みを作成するうえで、
「GitHubのPRマージをトリガーとしてCodeBuildを動かす」
という構成にしている方もいらっしゃると思います。

その際、WEBフックイベントで動き出したCodeBuildが見ているのはマージ先のブランチではなく、マージ元のブランチになります。

buildspec.yml
version: 0.2
env:
  shell: bash
phases:
  install:
    commands:
      # 関係ないので略
  build:
    commands:
      - npx cdk deploy #ここでdeployが行われるのはマージ元のブランチのコード

この仕様のせいで、修正を行っていたブランチ(下図でいうとfeature2ブランチ)をマージするより前に、マージ先のブランチ(下図でいうとdevelopブランチ)に変更が入っていた場合、少し面倒なことになります。

……お察しの通り、feature1をマージすることによって適用されていた変更や、そのままdevelopブランチに積み重ねていたコミットが打ち消されてしまうんですね。

先に解決策

CodeBuildの中でブランチを切り替えちゃいましょう。
ビルドスペックを以下のように書き換えるとうまくいきました。

buildspec.yml
version: 0.2
env:
  shell: bash
phases:
  install:
    commands:
      # 関係ないので略
  pre_build:
    commands:
      - git switch develop
  build:
    commands:
      - npx cdk deploy #developブランチのコードがデプロイされます!

デプロイコマンドの前にswitchすればいいいんですね。

回り道

以下は解決策にたどりつくための試行錯誤の過程です。

swicthする前にfetchしないとダメかもなと思っていたので、

buildspec.yml
      # 関係ないので略
  pre_build:
    commands:
      - git fetch #ここでエラーが起きてビルドが落ちます
      - git switch develop 
  build:
    commands:
      - npx cdk deploy 

と書いてたんですが、
こうすると
PRE_BUILD: COMMAND_EXECUTION_ERROR: Error while executing command: git fetch. Reason: exit status 128というエラーが出てしまいました。

理由としてはCodeBuildにはGitHubのリポジトリに対してアクセス権限が無いということなんでしょうね。

fetchしなくても該当リポジトリのブランチの情報はデフォルトでCodeBuild内に持ってきていることが分かったので、
先ほどのビルドスペックに落ち着きました。

9
2
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
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?