私の問題は、作成した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"。
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
それでもうまくいかない場合はお知らせください。