情况
我有一台服务器:192.168.1.2
。该服务器上安装有gitlab
,docker
链接到gitlab-runner
。请记住,我们正在讨论同一台服务器。如何从gitlab-ci(+ docker)正确部署到主机?
我有一个脚本在/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
快速研究后,搬运工实际上是对流程和资源隔离制造。这就是为什么无法访问主机。
PS:而docker
是主机专用命令。
尝试#2
在构建完成运行一个网络挂接。这是一个可能的工作解决方案,但我想有一个更好的解决方案,它可以包含在.gitlab-ci.yml
中。
尝试3
鉴于以下.gitlab-ci.yml
(只部署部分):
deploy:
stage: deploy
script:
- scp 'cfupdate.py' [email protected]:/etc/
only:
- master
我试着自己ssh到主机,使用scp,复制文件,但没有运气,因为用户有密码。我真的不希望使用sshpass -p
传递密码,虽然它在GitLab的秘密变量部分转存。另外随着ssh-keygen
和ssh-copy-id
试过了,仍然需要密码,因为我们知道,码头工人的SSH密钥(PS的确包括所有其他文件)不会被保存,他们在码头工人停机立即销毁。
尝试#4
deploy:
stage: deploy
script:
- curl --form "[email protected]" 192.168.1.2:[port]/upload.php
only:
- master
这样,(还没有真正尝试过),它也可以工作,但我仍然在寻找一种更好的方式。正如你所看到的,这是一个真正的make-do的方式,如果我们要讨论大量的文件,这种方法将不会很好。
任何想法?或者有关GitLab的建议?也许它有一个我不知道的内置部署功能?
关于尝试#3,我认为这可以解决您的问题:http://stackoverflow.com/a/41494370/6654146 – Jawad