Сообщение YAML_FILE_ERROR: ожидается, что команды [0] будут строкового типа:

Я пытаюсь построить свой проект на AWS, используя CodeBuild. Я поместил этот файл спецификации сборки в корневой каталог. 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)

person Branden Counder    schedule 19.05.2020    source источник
comment
Я думаю, это потому, что двоеточие в phase : $build. Yaml не любит двоеточия с пробелами в тексте foo   -  person Marcin    schedule 19.05.2020
comment
да, это сделало работу. двоеточие было проблемой. Я думал, что внутри комментария/строки это не будет иметь значения. В любом случае, спасибо @Marcin   -  person Branden Counder    schedule 20.05.2020
comment
Прохладный. Я сделаю ответ для дальнейшего использования, если вы не возражаете.   -  person Marcin    schedule 20.05.2020


Ответы (3)


Судя по комментарию, проблема заключалась в использовании двоеточия в phase : $build.

yaml имеет некоторые проблемы, когда сталкивается с пробелом и :, как указано в следующей проблеме GitHub:

person Marcin    schedule 20.05.2020

У меня была эта ошибка, когда я поместил оператор echo в свои команды yml, которые пытались напечатать серию символов -, просто чтобы немного оформить мой вывод `- echo '--- добрались сюда ---'

пришлось убрать это и поставить подчеркивание _

person adowdy    schedule 01.04.2021

Ошибка была из-за : в 30-й строке внутри эха. Как упомянул @Marcin, YAML не любит двоеточия с пробелами в тексте.

person Branden Counder    schedule 20.05.2020