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

如果仍然对您不起作用,请告诉我。