我的问题是我创建的bash脚本在gitlab上出现此错误" / bin / sh:eval:第88行:./ deploy.sh:未找到" 。以下是我的示例脚本 .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 push之后执行 deploy.sh ,但不幸的是有关于/ bin / bash thingy的错误。
我真的需要你的帮助。如果你能解决我关于gitlab的问题,我会很感激ci bash脚本得到错误&#34; / bin / sh:eval:第88行:./ deploy.sh:not found&#34; 。
答案 0 :(得分:8)
docker:latest
基于alpine linux,非常简约,默认情况下没有安装很多。例如,ssh
无法开箱即用,因此如果您想使用ssh命令,则需要先安装它。在before_script
中,添加:
- apk update && apk add openssh
答案 1 :(得分:7)
这可能与您使用Docker-in-Docker(docker:dind)的事实有关。您的deploy.sh正在请求/ bin / bash作为该图像中不存在的脚本执行程序。
您可以使用Docker在计算机上本地测试:
docker run --rm -it docker:dind bash
它会报告错误。所以将deploy.sh的第一行重写为
#!/bin/sh
修复之后,您将遇到上一个答案正在解决的问题:ssh也未安装。你也需要解决这个问题!
答案 2 :(得分:0)
谢谢。通过添加 bash
为我工作before_script:
- apk update && apk add bash
让我知道这是否仍然对您不起作用。