Saturday, January 8, 2022

[SOLVED] Gitlab CI - Composer not found with ssh

Issue

When connecting with ssh to my webserver I try to install composer dependencies after git pull. But the pipeline fails saying bash: composer: command not found. But there is definitely composer installed on the server.

I can also mount my docker image and try it directly with no problem! Does anyone has an Idea why composer is not found?

Here the .gitlab-ci.yml:

stages:
  - deploy

deploy_stage:
  stage: deploy
  image: parallactic/php-node:php8.0-node14.x
  before_script:
    - 'which ssh-agent || ( apt-get install -qq openssh-client )'
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 -d)
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

  script:
    - ssh ${DEPLOY_USER}@${DEPLOY_SERVER} "cd ${DEPLOY_DIR} && git pull origin main"
    - ssh ${DEPLOY_USER}@${DEPLOY_SERVER} "cd ${DEPLOY_DIR} && composer install --no-interaction --prefer-dist --optimize-autoloader"

  only:
    - main

Thanks for any suggestions!


Solution

it may be that your DEPLOY_USER doesn't have composer in the PATH. you can check that with echo $PATH in this deploy script, and then manually connect with your user and compare the two.

but also you can specify full path to the composer (eg. /usr/local/bin/composer install ...)

btw, why separate ssh connections? you can do it in one line

ssh ${DEPLOY_USER}@${DEPLOY_SERVER} "cd ${DEPLOY_DIR} && git pull origin main && /usr/local/bin/composer install --no-interaction --prefer-dist --optimize-autoloader"


Answered By - shanginn