gpt4 book ai didi

docker - 如何从 gitlab-ci (+docker) 正确部署到主机?

转载 作者:行者123 更新时间:2023-12-02 18:15:55 27 4
gpt4 key购买 nike

情况

我有一台服务器:192.168.1.2 .此服务器有一个 gitlabdocker 一起安装在它上面链接到 gitlab-runner .请记住,我们谈论的是同一台服务器。

我在 /etc/cfupdate.py 有一个脚本,也就是一个 Python 脚本。我想通过自动部署将此文件放在我的存储库中。

注:该文件归 deploymgr 所有,为此目的而创建的用户。它有 rw使用权。

尝试#1
.gitlab-ci.yml :

image: python:latest

before_script:
- echo "Starting script exec."

after_script:
- echo "CI Script Complete."

test-run:
stage: build
script:
- echo "Setting up..."
- pip3 install requests
- python3 "cfupdate.py"

deploy:
stage: deploy
script:
- docker cp $HOSTNAME:$PWD/cfupdate.py /etc/
only:
- master

经过快速研究,docker实际上是为进程和资源隔离而制作的。这就是为什么无法访问主机的原因。

PS:docker是一个仅限主机的命令。

尝试#2

在构建完成时运行 Webhook。这是一个可能可行的解决方案,但我想要一个更好的解决方案,它可以包含在 .gitlab-ci.yml 中.

尝试#3

鉴于以下 .gitlab-ci.yml (仅部署部分):
deploy:
stage: deploy
script:
- scp 'cfupdate.py' deploymgr@192.168.1.2:/etc/
only:
- master

我尝试将自己 ssh 到主机,并使用 scp 复制文件,但没有运气,因为用户有密码。我真的不想用 sshpass -p传递密码,尽管它可以保存在 GitLab 的 Secret Variables 部分。还尝试了 ssh-keygenssh-copy-id ,仍然需要密码,而且我们知道,docker 的 SSH key ( PS 实际上包括所有其他文件)没有保存,它们在 docker 关闭后立即被销毁。

尝试#4
deploy:
stage: deploy
script:
- curl --form "fileupload=@cfupdate.py" 192.168.1.2:[port]/upload.php
only:
- master

这样,(还没有真正尝试过)它也可以工作,但我仍在寻找更好的方法。正如您所看到的,这是一种真正可行的方法,如果我们要讨论大量文件,这种方法就不能很好地发挥作用。

有任何想法吗?或者关于 GitLab 的任何建议?也许它有一个我不知道的内置部署功能?

最佳答案

我浏览了许多涉及 docker、gitlab-ci 等的文档,但它们对我没有帮助。不过,我已经成功设计了一个可行的解决方案:

deploy:
stage: deploy
before_script:
- apt-get update
- apt-get -y install rsync sshpass
script:
- echo "Deploying to staging server..."
- "sshpass -e rsync -vvvurz --progress -e 'ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' . deploymgr@192.168.1.2:/etc/cfupdate/"
only:
- master

关于docker - 如何从 gitlab-ci (+docker) 正确部署到主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43572939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com