2017-04-23 126 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 
相關問題