Node.js &引用;“docker pull”;使用Gitlab Runner部署到Digital Ocean时需要正好1个参数错误

Node.js &引用;“docker pull”;使用Gitlab Runner部署到Digital Ocean时需要正好1个参数错误,node.js,docker,express,gitlab,gitlab-ci-runner,Node.js,Docker,Express,Gitlab,Gitlab Ci Runner,晚上好,, 我正在尝试部署我的nodejs应用程序,并使用pm2和Docker运行它,但Docker抛出的“Docker pull”正好需要1个参数。 请参阅“docker拉动--帮助”。 用法:docker pull[选项]名称[:TAG |@DIGEST] “从注册表中提取图像或存储库”错误。 非常感谢您的帮助,谢谢您抽出时间 #ssh-keyscan gitlab.com>>授权密钥:使用此命令将gitlab-ssh密钥添加到服务器。在服务器终端上运行 #cat id_rsa.pub>>

晚上好,, 我正在尝试部署我的nodejs应用程序,并使用pm2和Docker运行它,但Docker抛出的“Docker pull”正好需要1个参数。 请参阅“docker拉动--帮助”。 用法:docker pull[选项]名称[:TAG |@DIGEST] “从注册表中提取图像或存储库”错误。 非常感谢您的帮助,谢谢您抽出时间

#ssh-keyscan gitlab.com>>授权密钥:使用此命令将gitlab-ssh密钥添加到服务器。在服务器终端上运行
#cat id_rsa.pub>>授权密钥在终端服务器上运行此命令。
#以上两个命令都是必需的。
阶段:
-建造
-发表
-部署
变量:
TAG_LATEST:$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:LATEST
TAG_COMMIT:$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
生成节点:
图像:节点:最新
阶段:建造
脚本:
-npm安装
-echo“ACCOUNT\u SID=$ACCOUNT\u SID”>>.env
-echo“AUTH_TOKEN=$AUTH_TOKEN”>.env
-echo“API_KEY=$API_KEY”>>.env
-echo“API_SECRET=$API_SECRET”>>.env
-echo“PHONE\u NUMBER=$PHONE\u NUMBER”>>.env
-echo“sengrid\u api=$sengrid\u api”>.env
构建Docker:
图片:docker:最新
阶段:建造
服务:
-码头工人:丁
脚本:
-docker build-t$TAG\u提交-t$TAG\u最新版本
-docker登录-u gitlab ci令牌-p$ci\u构建\u令牌$ci\u注册表
-docker推送$TAG_提交
-docker推送$TAG_最新版本
部署:
图片:ubuntu:最新版本
阶段:部署
标签:
-部署
在脚本之前:
##
##安装ssh代理如果尚未安装,Docker需要它。
##(如果使用基于RPM的映像,请更改apt get to yum)
##
-'哪个ssh代理| |(apt get update-y&&apt get install openssh client git-y)'
##
##运行ssh代理(在生成环境中)
##
-eval$(ssh代理-s)
##
##创建SSH目录并授予它正确的权限
##
-mkdir-p~/.ssh
-chmod 700~/.ssh
##
##将SSH_PRIVATE_key变量中存储的SSH密钥添加到代理存储
##我们正在使用tr来修复线端点,这使得ed25519键可以正常工作
##没有额外的base64编码。
## https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556
##
-echo“$SSH\u PRIVATE\u KEY”| tr-d'\r'>~/.SSH/id\u rsa
-echo“$SSH\u PUBLIC\u KEY”| tr-d'\r'>~/.SSH/id\u rsa.pub
-chmod 600~/.ssh/*
-chmod 644~/.ssh/*.pub
-ssh添加
##
##使用ssh密钥扫描扫描专用服务器的密钥。替换gitlab.com
##用你自己的域名。如果有,可以复制并重复该命令
##要连接到的多个服务器。
##
-ssh keyscan gitlab.com>~/.ssh/known\u主机
-chmod 644~/.ssh/known_主机
-ls-ld~/.ssh/*
-cat~/.ssh/*
##
##或者,假设您创建了SSH\u SERVER\u HOSTKEYS变量
##以前,请取消注释以下两行。
##
#-echo“$SSH\u服务器\u主机密钥”>~/.SSH/known\u主机”
#-chmod 644~/.ssh/known_主机
##
##您可以选择禁用主机密钥检查。请注意,通过添加
##你被中间人怀疑了。
##警告:如果与shell一起使用,则仅与Docker executor一起使用
##您将覆盖用户的SSH配置。
##
#-“[[-f/.dockerenv]]和&echo-e”主机*\n\t三通键检查号\n\n“>~/.ssh/config”
##
##或者,如果要使用任何Git命令,请设置用户名和
##电子邮件。
##
脚本:
-ssh-o strichostkeychecking=no$SERVER\u USER@$SERVER\u IP“docker登录-u gitlab ci令牌-p$ci\u构建令牌$ci\u注册表”
-ssh-o strichostkeychecking=no$SERVER\u USER@$SERVER\u IP'docker pull$TAG\u COMMIT'
-ssh-o strichostkeychecking=no$SERVER_USER@$SERVER_IP'docker container rm-f my app | | true'
-ssh-o strichostkeychecking=no$SERVER\u USER@$SERVER\u IP'docker run-d-p 80:3000——命名我的应用程序$TAG\u COMMIT'
-ssh-o strichostkeychecking=no$SERVER\u USER@$SERVER\u IP'/etc/简介;pm2全部重新加载'
环境:
名称:生产
网址:http://167.172.225.124
仅:
-母版
来自节点:12.18.3
#将起始目录设置为当前目录
WORKDIR/
#复制Package.json
复制包*.json/
#在应用程序中安装依赖项
运行npm安装
#安装pm2
运行npm安装pm2-g
#复制源代码
复制
#让docker容器使用端口3000,即节点应用程序设置的端口
暴露3000
#启动节点应用程序
CMD[“pm2运行时”,“/bin/www”]
错误消息:

"docker pull" requires exactly 1 argument
系指以下行:

ssh  -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP 'docker pull $TAG_COMMIT'
这是不正确的

  • $TAG\u COMMIT
    为空(因此没有参数传递给)
  • 或者
    $TAG\u COMMIT
    中有一个空格(使其成为传递给
    docker pull
  • 或者,
    $TAG\u COMMIT
    不会被其值替换,并且在
    ssh'docker pull$TAG\u COMMIT'
    会话中保持为空。
    使用双引号将有助于(
    ssh“docker pull$TAG\u COMMIT”
    ),确保shell在发送到远程shell之前能够解释
    $TAG\u COMMIT
我会(用回音)再次检查以下值:

  • TAG\u COMMIT:$CI\u REGISTRY\u IMAGE/$CI\u COMMIT\u REF\u NAME:$CI\u COMMIT\u SHORT\u SHA
  • 该变量的每个组件(
    $CI\u REGISTRY\u IMAGE
    ,…)

通过这种方式,我可以理解为什么传递给docker pull的参数不正确。

下面的注释是echo语句$echo“$TAG_COMMIT”:registry.gitlab.com/augdog97/portfolio test/master:4ae1791a$echo“$TAG_LATEST”:registry.gitlab.com/augdog97/portfolio-test/master中的值:latest@augdog97然后尝试
ssh。。。“docker pull$TAG_COMMIT”
:我怀疑单引号阻止$TAG_COMMIT被其合法值替换。部署的应用程序,