./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

Дайте мне знать, если это все еще не работает для вас.

Другие вопросы по тегам