作者:西瓜246 | 来源:互联网 | 2022-12-21 13:50
我的问题是bash脚本我创建了这个错误"/ bin/sh的:EVAL:行88:./deploy.sh:未找到"上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 push之后执行deploy.sh但不幸的是有关于/ bin/bash thingy的错误.
我真的需要你的帮助.如果你能解决我关于gitlab的问题,我会很感激ci bash脚本得到错误"/ bin/sh:eval:第88行: ./ deploy.sh:not found".
1> 1615903..:
docker:latest
是基于alpine linux的,非常简约,默认情况下安装不多.例如,ssh
开箱即用,所以如果你想使用ssh命令,你需要先安装它.在你的before_script
,添加:
- apk update && apk add openssh
2> 小智..:
这可能与您使用Docker-in-Docker(docker:dind)的事实有关.您的deploy.sh正在请求/ bin/bash作为该映像中不存在的脚本执行程序.
您可以使用Docker在计算机上本地测试:
docker run --rm -it docker:dind bash
它会报告错误.所以重写deploy.sh的第一行
#!/bin/sh
修复之后,您将遇到上一个答案正在解决的问题:ssh也未安装.你也需要解决这个问题!