Gitlab CI/CD 管道给出 Dockerfile 错误
Gitlab CI/CD pipeline giving Dockerfile error
晚上好,
我正在尝试将我的 nodeJS 应用程序部署到我的 Digital Ocean Server,但它说找不到我的 Dockerfile。我检查了一下,Dockerfile 没有 .txt 扩展名。任何指导表示赞赏。我在我的 Gitlab 项目中设置了变量。
管道抛出以下错误:
"$ chmod og= $ID_RSA
chmod:无法识别的选项:---BEGIN
BusyBox v1.31.1() 多调用二进制。
用法:chmod [-Rcvf] MODE[MODE]... FILE...
每个 MODE 是一个或多个字母 ugoa,其中一个
符号 +-= 和一个或多个字母 rwxst
-R递归
-c 列出改变的文件
-v 列出所有文件
-f 隐藏错误
stages:
- build
- publish
- deploy
variables:
TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
build:
image: node:latest
stage: build
script:
- npm install
- echo "ACCOUNT_SID=$ACCOUNT_SID" >> .env
- echo "AUTH_TOKEN=$AUTH_TOKEN" >> .env
- echo "API_KEY=$API_KEY" >> .env
- echo "API_SECRET=$API_SECRET" >> .env
- echo "PHONE_NUMBER=$PHONE_NUMBER" >> .env
- echo "sengrid_api=$sengrid_api" >> .env
publish:
image: docker:latest
stage: publish
services:
- docker:dind
script:
- docker build . -t $TAG_COMMIT -t $TAG_LATEST
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker push $TAG_COMMIT
- docker push $TAG_LATEST
deploy:
image: alpine:latest
stage: deploy
tags:
- deployment
script:
- chmod og= $ID_RSA
- apk update && apk add openssh-client
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker pull $TAG_COMMIT"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker container rm -f my-app || true"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker run -d -p 80:3000 --name my-app $TAG_COMMIT"
environment:
name: production
url: http://167.172.225.124
only:
- master
首先检查 docker build 参数顺序是否正确:
而不是:
docker build -t $TAG_COMMIT -t $TAG_LATEST .
我会尝试:
docker build . -t $TAG_COMMIT -t $TAG_LATEST
当您使用 运行 这个构建命令时,还要检查您是否在正确的路径中。
并且有一个名为 Dockerfile
的文件(docker build
需要的默认名称)。
关于错误:
chmod og= $ID_RSA
chmod: unrecognized option: ---BEGIN
您需要对文件应用 chmod
,而不是对文件 content。
变量 ID_RSA
包括密钥本身,而不是密钥文件名。
使用 ~/.ssh/id_rsa
而不是 $ID_RSA
。
如果您像我一样遵循 this tutorial(看起来是这样),看起来本教程假定 运行 在 master 分支上,受保护。
我 运行正在另一个不受保护的分支上。所以我必须取消保护所有变量才能在未受保护的分支上工作。作业立即成功。
chmod og= $ID_RSA
对我来说它不起作用,因为我最后复制了没有断线符号的密钥,事实证明这很重要。
尝试了很多解决方案,花了将近一天的时间才得到这个 /.
确保您的 ID_RSA 变量是
Type: file
晚上好, 我正在尝试将我的 nodeJS 应用程序部署到我的 Digital Ocean Server,但它说找不到我的 Dockerfile。我检查了一下,Dockerfile 没有 .txt 扩展名。任何指导表示赞赏。我在我的 Gitlab 项目中设置了变量。 管道抛出以下错误: "$ chmod og= $ID_RSA chmod:无法识别的选项:---BEGIN BusyBox v1.31.1() 多调用二进制。 用法:chmod [-Rcvf] MODE[MODE]... FILE... 每个 MODE 是一个或多个字母 ugoa,其中一个 符号 +-= 和一个或多个字母 rwxst -R递归 -c 列出改变的文件 -v 列出所有文件 -f 隐藏错误
stages:
- build
- publish
- deploy
variables:
TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
build:
image: node:latest
stage: build
script:
- npm install
- echo "ACCOUNT_SID=$ACCOUNT_SID" >> .env
- echo "AUTH_TOKEN=$AUTH_TOKEN" >> .env
- echo "API_KEY=$API_KEY" >> .env
- echo "API_SECRET=$API_SECRET" >> .env
- echo "PHONE_NUMBER=$PHONE_NUMBER" >> .env
- echo "sengrid_api=$sengrid_api" >> .env
publish:
image: docker:latest
stage: publish
services:
- docker:dind
script:
- docker build . -t $TAG_COMMIT -t $TAG_LATEST
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker push $TAG_COMMIT
- docker push $TAG_LATEST
deploy:
image: alpine:latest
stage: deploy
tags:
- deployment
script:
- chmod og= $ID_RSA
- apk update && apk add openssh-client
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker pull $TAG_COMMIT"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker container rm -f my-app || true"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker run -d -p 80:3000 --name my-app $TAG_COMMIT"
environment:
name: production
url: http://167.172.225.124
only:
- master
首先检查 docker build 参数顺序是否正确:
而不是:
docker build -t $TAG_COMMIT -t $TAG_LATEST .
我会尝试:
docker build . -t $TAG_COMMIT -t $TAG_LATEST
当您使用 运行 这个构建命令时,还要检查您是否在正确的路径中。
并且有一个名为 Dockerfile
的文件(docker build
需要的默认名称)。
关于错误:
chmod og= $ID_RSA
chmod: unrecognized option: ---BEGIN
您需要对文件应用 chmod
,而不是对文件 content。
变量 ID_RSA
包括密钥本身,而不是密钥文件名。
使用 ~/.ssh/id_rsa
而不是 $ID_RSA
。
如果您像我一样遵循 this tutorial(看起来是这样),看起来本教程假定 运行 在 master 分支上,受保护。
我 运行正在另一个不受保护的分支上。所以我必须取消保护所有变量才能在未受保护的分支上工作。作业立即成功。
chmod og= $ID_RSA
对我来说它不起作用,因为我最后复制了没有断线符号的密钥,事实证明这很重要。 尝试了很多解决方案,花了将近一天的时间才得到这个 /.
确保您的 ID_RSA 变量是 Type: file