Gitlab CI/CD流水线出现Dockerfile错误

10

晚上好, 我尝试将我的nodeJS应用部署到我的Digital Ocean服务器上,但它显示找不到我的Dockerfile。我检查了一下,Dockerfile没有.txt扩展名。如果有任何指导,将不胜感激。 我在我的Gitlab项目中设置了变量。 管道抛出以下错误: "$ chmod og= $ID_RSA chmod: unrecognized option: ---BEGIN BusyBox v1.31.1 () multi-call binary. Usage: chmod [-Rcvf] MODE[,MODE]... FILE... Each MODE is one or more of the letters ugoa, one of the symbols +-= and one or more of the letters 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

4个回答

9
如果您按照我所做的方式遵循了这个教程(看起来是这样的),那么教程假定在受保护的主分支上运行。
我正在另一个未受保护的分支上运行。因此,我必须取消所有变量的保护以便在未受保护的分支上工作。任务会立即成功完成。

1
是的,受保护的分支也是我的环境上的关键点。但是,对于类型为“variable”的变量,它没有任何问题。 - M. Rostami
谢谢,但我更喜欢保护我正在工作的分支。 - Nathan Lima

5

3

首先检查 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,而不是在文件内容上应用。
变量ID_RSA包含密钥本身,而不是密钥文件名。

请使用~/.ssh/id_rsa代替$ID_RSA


1
我添加了它,但出现了错误,说找不到文件或目录,但由于这超出了本问题的范围,我会另外提一个问题。感谢您的所有帮助和回答所花费的时间。我是Ci/CD的新手,这些解释对我很有帮助。 - augdog97
你说过:“你需要在文件上应用chmod,而不是在文件内容上。” 但在我的情况下,$ID_RSA是一个文件。这是一个带有文件类型的CI变量。 - Romain TAILLANDIER
@RomainTAILLANDIER 好的。 对我来说不是这样,但如果它是一个文件,则确实可以工作。 - VonC
1
我有同样的问题。我将ID_RSA保存为文件并在末尾插入了换行符,但是我仍然遇到了这个错误。你是如何解决的? - ali Falahati
1
@aliFalahati,请检查您的密钥(和父文件夹)权限,就像这里一样。 - VonC
显示剩余3条评论

1
chmod og= $ID_RSA 

对我而言,它没有起作用是因为我复制了密钥但末尾没有换行符号,事实证明这很重要。尝试了许多解决方案,在我得到这个解决方法之前花费了将近一天的时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接