情況
我有一臺服務器: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