我正在尝试使用CodeBuild在AWS上构建项目。我已将此buildspec文件放在根目录中。 CodeBuild能够读取文件,但无法继续进行。但是我在CodeBuild上收到以下错误。
CodeBuild日志错误:
> [Container] 2020/05/19 08:56:07 Waiting for agent ping
> [Container] 2020/05/19 08:56:09 Waiting for DOWNLOAD_SOURCE
> [Container] 2020/05/1908:56:14 Phase is DOWNLOAD_SOURCE [Container] 2020/05/19 08:56:14 YAML location is myRepoPath/buildspec.yml [Container] 2020/05/19 08:56:14 Phase complete: DOWNLOAD_SOURCE State: FAILED
> [Container] 2020/05/19 08:56:14 Phase context status code: YAML_FILE_ERROR Message: Expected Commands[0] to be of string type: found subkeys instead at line 30, value of the key tag on line 29 might be empty
我的buildspec.yaml文件:
version: 0.2
phases:
install:
runtime-versions:
java: openjdk11
commands:
- apt-get update -y
- apt-get install -y maven
- pip3 install --upgrade awscli
pre_build:
commands:
- sonar_host_url=""
- sonar_project_key="$REPOSITORY_NAME"
- sonar_username=$(aws secretsmanager get-secret-value --secret-id $SONARQUBE_USER_CREDENTIAL_SECRET | jq -r '.SecretString' | jq -r '.username')
- sonar_password=$(aws secretsmanager get-secret-value --secret-id $SONARQUBE_USER_CREDENTIAL_SECRET | jq -r '.SecretString' | jq -r '.password')
- git checkout $SOURCE_COMMIT
build:
commands:
- builStatus=$(mvn install)
- result=$(mvn clean sonar:sonar -Dsonar.projectKey=$sonar_project_key -Dsonar.host.url=$sonar_host_url -Dsonar.login=$sonar_username -Dsonar.password=$sonar_password)
- echo $result
post_build:
commands:
- echo $buildStatus
- buildComment=$(echo "Status of project build phase : $buildStatus")
- aws codecommit post-comment-for-pull-request --pull-request-id $PULL_REQUEST_ID --repository-name $REPOSITORY_NAME --before-commit-id $DESTINATION_COMMIT --after-commit-id $SOURCE_COMMIT --content "$buildComment"
- sonar_link=$(echo $result | egrep -o "you can browse http://[^, ]+")
- sonar_task_id=$(echo $result | egrep -o "task\?id=[^ ]+" | cut -d'=' -f2)
基于评论,问题是在phase : $build
中使用了olon。
yaml
在遇到冒号和:
时遇到一些问题,如以下GitHub问题所示:
错误是由于回声内第30行中的:
。正如@Marcin所述,YAML不喜欢文本中带有空格的冒号。