我有一台服务器:192.168.1.2
。此服务器上安装了gitlab
,并且docker
与gitlab-runner
相关联。请记住,我们正在谈论同一台服务器。
我在/etc/cfupdate.py
有一个脚本,你可以说是一个Python脚本。我希望在我的存储库中使用自动部署来存储此文件。
注意:该文件归deploymgr
所有,rw
是为此目的而创建的用户。它具有.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
经过快速研究,docker实际上是为了进程和资源隔离。这就是为什么无法访问主机的原因。
PS:而.gitlab-ci.yml
是一个仅限主机的命令。
在构建完成时运行Webhook。这是一个可行的解决方案,但我希望有一个更好的解决方案,可以包含在.gitlab-ci.yml
中。
给出以下deploy:
stage: deploy
script:
- scp 'cfupdate.py' deploymgr@192.168.1.2:/etc/
only:
- master
(仅部署部分):
sshpass -p
我试图将自己ssh给主机,并使用scp复制文件,但没有运气,因为用户有密码。我真的不想使用ssh-keygen
来传递密码,尽管它在GitLab的秘密变量部分中是可以保存的。还尝试使用ssh-copy-id
和deploy:
stage: deploy
script:
- curl --form "fileupload=@cfupdate.py" 192.168.1.2:[port]/upload.php
only:
- master
,仍需要密码,而且据我们所知,docker的SSH密钥( PS 确实包括所有其他文件)未保存,它们会立即销毁在码头工人关机时。
df_merged_1['AUM_Segment'] = \
np.where((df_merged_1['Revenue']>=0) & (df_merged_1['Revenue']<=2200), 'test1', 'test2')
这样,(还没有真正尝试过)它也可以工作,但我仍然在寻找更好的方法。正如你所看到的,这是一种真正的make-do方式,如果我们要谈论大量文件,这种方法就不会很好。
有什么想法吗?或者有关GitLab的任何建议?也许它有一个我不知道的内置部署功能?
答案 0 :(得分:2)
我已经浏览了很多涉及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
答案 1 :(得分:0)
也许您可以考虑使用shell executor而不是docker executor来处理这个特定的repo,这样你就可以像这样编写简单的sh脚本:
deploy:
stage: deploy
script:
- cp cfupdate.py /etc/cfupdate.py
only:
- master