.gitlab-ci.yml:通过 SSH 在远程服务器上执行多个命令

问题描述 投票:0回答:1

给定一个

.gitlab-ci.yml
文件,需要通过
SSH
登录到远程服务器并在那里运行命令列表。我尝试使用
here-doc
但运气不佳。根据我寻找问题根源的尝试,看起来
.gitlab-ci.yml
不接受
here-doc
。它产生了一堆错误。

以下是摘录:

deploy_to_server_job:
  stage: deploy_to_server
  tags:
    - server-runner
  image: ubuntu:22.04
  script:
    - chmod og= $ID_RSA
    - |
      ssh -tt -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP bash << EOF
        docker system prune --force
        echo "Running container with image: $FULL_IMAGE_NAME"
        docker run -p 127.0.0.1:$SERVER_PORT:$SERVER_PORT \
        --env JWT_AUTH_SECRET=$JWT_AUTH_SECRET \
        --env JWT_AUTH_EXPIRES=$JWT_AUTH_EXPIRES \
        --env JWT_REFRESH_SECRET=$JWT_REFRESH_SECRET \
        --env JWT_REFRESH_EXPIRES=$JWT_REFRESH_EXPIRES \
        --env MONGODB_URI=$MONGODB_URI \
        --env PORT=$PORT \
        -d --name admin-server $FULL_IMAGE_NAME
        exit
      EOF

然后我在一行中重写了一个

ssh
命令:

    - ssh -tt -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "whoami; echo Running container with image $FULL_IMAGE_NAME; docker system prune --force; docker run --name admin-server -d -p 127.0.0.1:$SERVER_PORT:$SERVER_PORT --env JWT_AUTH_SECRET=$JWT_AUTH_SECRET --env JWT_AUTH_EXPIRES=$JWT_AUTH_EXPIRES --env JWT_REFRESH_SECRET=$JWT_REFRESH_SECRET --env JWT_REFRESH_EXPIRES=$JWT_REFRESH_EXPIRES --env MONGODB_URI=$MONGODB_URI --env PORT=$PORT $FULL_IMAGE_NAME; exit"

除了一个错误外,所有错误都消失了:

bash: line 2: --env: command not found

我不明白为什么

docker run
--env
标志被视为单独的命令。将所有
--env
更改为
-e
时,错误变为
bash: line 2: -e: command not found
(因此,它是来自
docker run
的标志)。

问题:

.gitlab-ci.yml
中,如何正确放置将在远程服务器上运行的命令?

注意:我刚刚开始学习

GitLab
管道(我以为我会找到解决方案,但我已经在这个问题上挣扎了一个星期),也许不仅仅是
docker run
会抛出这样的错误。

ssh gitlab-ci.yml docker-run
1个回答
0
投票

Jim 的评论给了我一个想法,我设法找到了问题的根源:

MONGODB_URI
值应该被引用:

        --env MONGODB_URI="$MONGODB_URI" \
© www.soinside.com 2019 - 2024. All rights reserved.