./deploy.sh не работает на gitlab ci
Моя проблема заключается в том, что созданный мной bash-скрипт получил эту ошибку "/bin/sh: eval: строка 88: ./deploy.sh: not found" на gitlab. Ниже приведен мой пример сценария .gitlab-ci.yml.
Я подозреваю, что gitlab ci не поддерживает bash-скрипт.
image: docker:latest
variables:
IMAGE_NAME: registry.gitlab.com/$PROJECT_OWNER/$PROJECT_NAME
DOCKER_DRIVER: overlay
services:
- docker:dind
stages:
- deploy
before_script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
- docker pull $IMAGE_NAME:$CI_BUILD_REF_NAME || true
production-deploy:
stage: deploy
only:
- master@$PROJECT_OWNER/$PROJECT_NAME
script:
- echo "$PRODUCTION_DOCKER_FILE" > Dockerfile
- docker build --cache-from $IMAGE_NAME:$CI_BUILD_REF_NAME -t $IMAGE_NAME:$CI_BUILD_REF_NAME .
- docker push $IMAGE_NAME:$CI_BUILD_REF_NAME
- echo "$PEM_FILE" > deploy.pem
- echo "$PRODUCTION_DEPLOY" > deploy.sh
- chmod 600 deploy.pem
- chmod 700 deploy.sh
- ./deploy.sh
environment:
name: production
url: https://www.example.com
И это тоже мой deploy.sh.
#!/bin/bash
ssh -o StrictHostKeyChecking=no -i deploy.pem ec2-user@targetIPAddress << 'ENDSSH'
// command goes here
ENDSSH
Все, что я хочу, это выполнить deploy.sh после отправки в Docker, но, к сожалению, получил эту ошибку о / bin / bash thingy.
Мне очень нужна ваша помощь, ребята. Я буду благодарен, если вы сможете решить мою проблему о том, что скрипт gitlab ci bash получил ошибку "/bin/sh: eval: строка 88: ./deploy.sh: not found".
2 ответа
docker:latest
основан на альпийском Linux, который очень минималистичен и не имеет много установленных по умолчанию. Например, ssh
не доступен из коробки, поэтому, если вы хотите использовать команды ssh, вам нужно сначала установить его. В вашем before_script
, добавлять:
- apk update && apk add openssh
Вероятно, это связано с тем, что вы используете Docker-in-Docker (docker:dind). Ваш deploy.sh запрашивает /bin/bash в качестве исполнителя скрипта, которого нет в этом образе.
Вы можете проверить это локально на вашем компьютере с помощью Docker:
docker run --rm -it docker:dind bash
Это сообщит об ошибке. Поэтому перепишите первую строку deploy.sh для
#!/bin/sh
После исправления этой проблемы вы столкнетесь с проблемой, к которой относится предыдущий ответ: ssh также не установлен. Вам тоже нужно это исправить!
Спасибо. Это сработало для меня, добавив bash
before_script:
- apk update && apk add bash
Дайте мне знать, если это все еще не работает для вас.