./deploy.sh 不在 gitlab 上工作 ci
./deploy.sh not working on gitlab ci
我的问题是我创建的 bash 脚本出现此错误 ""/bin/sh: eval: line 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
我只想在 docker 推送后执行 deploy.sh 但不幸的是我遇到了关于 /bin/bash 的错误。
我真的需要你们的帮助。如果你能解决我关于 gitlab ci bash script got error "/bin/sh: eval: line 88: ./deploy.sh 的问题,我将不胜感激未找到.
docker:latest
基于 alpine 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
如果仍然对您不起作用,请告诉我。
我的问题是我创建的 bash 脚本出现此错误 ""/bin/sh: eval: line 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
我只想在 docker 推送后执行 deploy.sh 但不幸的是我遇到了关于 /bin/bash 的错误。
我真的需要你们的帮助。如果你能解决我关于 gitlab ci bash script got error "/bin/sh: eval: line 88: ./deploy.sh 的问题,我将不胜感激未找到.
docker:latest
基于 alpine 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
如果仍然对您不起作用,请告诉我。