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

时间:2018-04-08 20:00:11

标签: bash continuous-integration gitlab gitlab-ci gitlab-ci-runner

我的问题是我创建的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;

3 个答案:

答案 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

让我知道这是否仍然对您不起作用。