2

I am trying to setup notifications to my Rocket.Chat server through my .gitlab-ci.yml file. I have my test and deploy stages working, but my notify stage is erroring out. I followed the instructions from here, but I adjusted the notify scripts to work with Rocket.Chat instead of Pushbullet.

Here is my .gitlab-ci.yml:

stages:
  - test
  - deploy
  - notify

test:
  stage: test
  image: homeassistant/amd64-homeassistant
  script:
    - hass --script check_config -c .

deploy:
  stage: deploy
  only:
    - master
  before_script:
    - 'which ssh-agent || ( apk update && apk add openssh-client )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
  script:
    - ssh $DEPLOY_USER@$DEPLOY_HOST "cd '$DEPLOY_PATH'; git pull; sudo systemctl restart home-assistant@homeassistant"

notify_success:
  stage: notify
  allow_failure: true
  only:
    - master
  script: 
    - curl -X POST -H 'Content-Type: application/json' --data '{"text":"New Hass config deployed successfully!"}' https://chat.bryantgeeks.com/hooks/$ROCKET_CHAT_TOKEN

notify_fail:
  stage: notify
  allow_failure: true
  only:
    - master
  when: on_failure
  script: 
    - curl -X POST -H 'Content-Type: application/json' --data '{"text":"New Hass config failed. Please check for errors!"}' https://chat.bryantgeeks.com/hooks/$ROCKET_CHAT_TOKEN

I get this error in the CI Lint:

Status: syntax is incorrect

Error: jobs:notify_success:script config should be a string or an array of strings

If I change the notify script lines to have single quotes around it ('), I get the following error in CI Lint:

Status: syntax is incorrect

Error: (): did not find expected key while parsing a block mapping at line 33 column 7

If I try double quotes around the script line ("), I get the following error:

Status: syntax is incorrect

Error: (): did not find expected '-' indicator while parsing a block collection at line 33 column 5

I'm not sure what else to try or where to look at this point for how to correct this. Any help is appreciated.

1 Answers1

2

YAML really doesn't like :'s in strings. The culprit is the : in 'Content-Type: application/json'

Sometimes using the multiline string format helps, like this:

notify_success:
  stage: notify
  allow_failure: true
  only:
    - master
  script: |
    curl -X POST -H 'Content-Type: application/json' --data '{"text":"New Hass config deployed successfully!"}' https://chat.bryantgeeks.com/hooks/$ROCKET_CHAT_TOKEN
Mark Lapierre
  • 1,067
  • 9
  • 15
  • Thank you very much, that fixed it. I did have to add a before_script to install curl in the container for that stage. – Alan Bryant Aug 10 '18 at 22:44