./deploy.sh没有在gitlab ci上工作

red*_*g20 6 bash continuous-integration gitlab gitlab-ci gitlab-ci-runner

我的问题是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
Run Code Online (Sandbox Code Playgroud)

这也是我的deploy.sh.

#!/bin/bash

ssh -o StrictHostKeyChecking=no -i deploy.pem ec2-user@targetIPAddress << 'ENDSSH'
 // command goes here
ENDSSH
Run Code Online (Sandbox Code Playgroud)

我想要的是在docker push之后执行deploy.sh但不幸的是有关于/ bin/bash thingy的错误.

我真的需要你的帮助.如果你能解决我关于gitlab的问题,我会很感激ci bash脚本得到错误"/ bin/sh:eval:第88行: ./ deploy.sh:not found".

161*_*903 10

docker:latest是基于alpine linux的,非常简约,默认情况下安装不多.例如,ssh开箱即用,所以如果你想使用ssh命令,你需要先安装它.在你的before_script,添加:

- apk update && apk add openssh
Run Code Online (Sandbox Code Playgroud)


小智 10

这可能与您使用Docker-in-Docker(docker:dind)的事实有关.您的deploy.sh正在请求/ bin/bash作为该映像中不存在的脚本执行程序.

您可以使用Docker在计算机上本地测试:

docker run --rm -it docker:dind bash
Run Code Online (Sandbox Code Playgroud)

它会报告错误.所以重写deploy.sh的第一行

#!/bin/sh
Run Code Online (Sandbox Code Playgroud)

修复之后,您将遇到上一个答案正在解决的问题:ssh也未安装.你也需要解决这个问题!


小智 8

谢谢。这通过添加bash对我有用

before_script:
  - apk update && apk add bash
Run Code Online (Sandbox Code Playgroud)

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