[英]How do I set up a very simple deployment using a Gitlab CI runner?
我想自動將新工作從我的 Gitlab 存儲庫部署到在生產服務器上運行的實時網站。 實時網站是live
分支的 GIT 存儲庫克隆。
我的問題:
每次“構建”發生時,跑步者似乎都將我的 repo 重新克隆到~/builds/...
。 這是強制性行為嗎? 我認為我真正想要的是在我的生產網站目錄中的git pull
。
如果真的每次都必須克隆 repo,為什么不git reset
呢? 至少隨着時間的推移,這會節省大量帶寬,不是嗎?
如何運行位於存儲庫根目錄中的deploy.sh
? 我目前在我的 gitlab.com 構建信息中收到此錯誤: bash: line 23: deploy.sh: command not found
我的.gitlab-ci.yml
文件:
deploy_to_production:
script:
- deploy.sh
only:
- live
tags:
- prod
為此,我想在生產服務器上運行我編寫的簡單 shell 腳本 ( deploy.sh
),每當我推送到我的 repo 的特定分支(在我的情況下為live
分支)時。 這個 shell 腳本在我的 GIT 存儲庫中,與我的.gitlab-ci.yml
一起。
該腳本基本上只執行git reset
、 fetch
和pull
,使生產版本與存儲庫中的內容保持同步。
我在我的服務器上安裝了一個“shell”多運行器,並將其連接到 gitlab.com,在那里我可以看到它處於活動狀態。
總的來說,我吠錯了樹? 我是否應該更改我的deploy.sh
以便它不執行新工作的 git checkout,而是使用cp
或rsync
將新代碼從~/builds/...
到生產網站?
問:克隆是強制性行為嗎?
據我所知,這是因為假設是在構建過程中您使用代碼。
如果這不是您的情況,並且您只想“告訴生產服務器”從您的存儲庫中提取代碼,那么也許您可以采用不同的方法並使用webhook 。 GitLab 會向您的服務器發出 HTTP 請求,並以 JSON 格式傳遞有關事件(推送、合並等)的信息。 然后接收腳本將解析它並決定是否執行 git pull。
如果您在部署之前的構建過程中確實有其他任務要對代碼執行,那么是的,請更改策略並使用運行程序已經為您檢出的代碼。 我可能會嘗試以某種方式使更改原子化(rsyncing 到實時目錄會使您的應用程序在運行時處於某種不確定狀態,如果由於某種原因失敗,則會陷入混亂),例如通過將實時代碼放在一個符號鏈接的目錄。 然后部署腳本會將新的代碼目錄復制到其最終目的地,進行任何必要的調整並將符號鏈接的目標從舊的活動目錄更改為新的目錄。
Q:如果真的每次都要克隆repo,為什么不git reset呢?
這對開發者來說更像是一個問題。 任何其他人的答案都只是猜測。
問:如何運行位於存儲庫根目錄中的 deploy.sh?
如果deploy.sh腳本設置了可執行位,則使用./deploy.sh
,否則使用bash deploy.sh
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.