2017-04-23 112 views
1

情况

我有一台服务器:192.168.1.2。该服务器上安装有gitlabdocker链接到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-keygenssh-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的建议?也许它有一个我不知道的内置部署功能?

+0

关于尝试#3,我认为这可以解决您的问题:http://stackoverflow.com/a/41494370/6654146 – Jawad

回答

1

我已经通过涉及泊坞窗,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' . [email protected]:/etc/cfupdate/" 
only: 
    - master 
0

也许你可以考虑使用shell executor而不是搬运工执行人这个特殊的回购所以你可以写简单的sh脚本是这样的:

deploy: 
    stage: deploy 
    script: 
     - cp cfupdate.py /etc/cfupdate.py 
    only: 
     - master 
相关问题