web-dev-qa-db-ja.com

./deploy.shが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 Pushの後にdeploy.shを実行することだけですが、残念ながら/ bin/bashについてこのエラーが発生しました。

私は本当にあなたの助けが必要です。 gitlab ci bashスクリプトに関する問題を解決できたら感謝します"/ bin/sh:eval:line 88:./deploy.sh:not found"

8
redwolfgang20

docker:latestは、Alpine Linuxをベースにしており、非常に最小限であり、デフォルトでは多くのものがインストールされていません。たとえば、sshはそのままでは利用できないため、sshコマンドを使用する場合は、最初にインストールする必要があります。あなたのbefore_script、 追加:

- apk update && apk add openssh
11
1615903

これはおそらく、Docker-in-Docker(docker:dind)を使用しているという事実に関連しています。 deploy.shは、そのイメージに存在しないスクリプト実行プログラムとして/ bin/bashを要求しています。

これは、Dockerを使用してコンピューター上でローカルにテストできます。

docker run --rm -it docker:dind bash

エラーが報告されます。したがって、deploy.shの最初の行を次のように書き換えます。

#!/bin/sh

それを修正した後、前の答えが対処している問題に遭遇します:sshもインストールされていません。あなたもそれを修正する必要があります!

11

ありがとう。これはbashを追加することで私にとってうまくいきました

before_script:
  - apk update && apk add bash

それでもうまくいかない場合はお知らせください。

1
Mradula Ghatiya