Gitlab CI/CD 管道给出 Dockerfile 错误

aug*_*g97 10 continuous-integration node.js express gitlab docker

晚上好,我正在尝试将我的 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
Run Code Online (Sandbox Code Playgroud)

Rom*_*IER 9

如果您像我一样遵循了本教程(看起来就是这种情况),那么看起来本教程假设在受保护的主分支上运行。

我在另一个不受保护的分支上运行。所以我必须取消所有变量的保护才能在未受保护的分支上工作。工作立即成功。


小智 5

确保您的 ID_RSA 变量的 类型为:文件


Von*_*onC 4

首先检查docker 构建参数顺序是否正确:

代替:

docker build -t $TAG_COMMIT -t $TAG_LATEST .
Run Code Online (Sandbox Code Playgroud)

我会尝试:

docker build . -t $TAG_COMMIT -t $TAG_LATEST
Run Code Online (Sandbox Code Playgroud)

当您运行此构建命令时,还要检查您是否处于正确的路径中。
并且有一个名为Dockerfile( 所需的默认名称docker build)的文件。


关于错误:

docker build -t $TAG_COMMIT -t $TAG_LATEST .
Run Code Online (Sandbox Code Playgroud)

您需要应用于chmod文件,而不是文件内容
该变量ID_RSA包括密钥本身,而不是密钥文件名。

使用~/.ssh/id_rsa而不是$ID_RSA.