AWS CodebuildでGitHub Actionsを利用する際に出たエラー
はじめに
先日AWS CodeBuildがGitHub Actionsをサポートしました。
AWS CodeBuild が GitHub Actions をサポート開始
MarketPlaceにあるActionsをCodeBuildでも再利用できるようになるため非常に便利です。
ただし色々試すうちにいくつかエラーにハマったので備忘として残しておきます。
YAML_FILE_ERROR Message: unsupported field “steps” in buildspec. No GitHub token has been configured for your account
使用したbuildspec
version: 0.2
phases:
build:
steps:
- name: run codebuild
uses: koh-sh/codebuild-multirunner@v0
with:
config: ".codebuild-multirunner.yaml"
polling-span: "10"
GitHub Actionsを利用する際には、ソースにGitHubを使用していなくてもGitHubと連携する必要があります。
理由としてはActionsのソースダウンロードの際にGitHubのAPI制限を回避するためだそうです。
In order to use GitHub Actions, the source must be downloaded on a build compute. Anonymous downloads will be rate limited, so by connecting to GitHub, it can help ensure consistent access.
Why do I need to connect to GitHub as a source provider in order to use GitHub Actions?
接続の仕方はこちら。
GitHub and GitHub Enterprise Server access token
ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
使用したbuildspec
version: 0.2
phases:
build:
steps:
- name: run codebuild
uses: koh-sh/codebuild-multirunner@v0
with:
config: ".codebuild-multirunner.yaml"
polling-span: "10"
CodeBuildでDockerを利用する場合Projectの設定で、特権モードに設定する必要があります。
Error: “Cannot connect to the Docker daemon” when running a build (ビルドの実行時に「Docker デーモンに接続できません」)
GitHub ActionsはDocker, JavaScript, Compositeの3種類があります。
Dockerの場合CodeBuild実行時にDocker Build or Docker pullが実行されるため、CodeBuild側でDockerの実行環境が必要になります。
Actionsの種類の確認は、Actionsのリポジトリの /action.yml
のruns.usingから確認できます。
例
# action.yml
runs:
using: 'docker'
image: 'Dockerfile'
args:
- "run"
##[error]System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter ‘‘using: node20’ is not supported, use ‘docker’, ’node12’ or ’node16’ instead.’)
使用したbuildspec
version: 0.2
phases:
build:
steps:
- uses: actions/setup-go@main
with:
go-version: '^1.13.1' # The Go version to download (if necessary) and use.
- run: go version
JavaScriptタイプのActionsはnodeのバージョンが決まっています。
例
runs:
using: 'node20'
main: 'dist/setup/index.js'
そのため指定されたnodeバージョンが実行環境にインストールされていないとエラーになります。
検証のためあえて少し古めのイメージ (aws/codebuild/standard:5.0
) でsetup-go@mainを使用した場合node20がインストールされていなく、エラーになりました。
最新のイメージを使用していなかったり、カスタムイメージを使用する場合には気をつけましょう。
CodeBuild公式イメージの場合は下記からDockerfileを確認できます。
CodeBuild に用意されている Docker イメージ
まとめ
とても便利ですがActionsのタイプによっては、実行環境の設定を気にしないとちょこちょこエラーにはまりそうです。
基本的には最新のイメージを使用しておけば問題ないと思いますが、他にもまだ見えてないハマりどころはあるかも。