Docker
在 Jenkins 管道中,使用 Groovy DSL,如何在後台啟動 Docker 映像?
我們有一個使用 Groovy DSL 的 Jenkins 建構系統,它對我們很有效。
但後來我們最近聘請了一位應該非常優秀的新開發人員。他決定重寫我們的測試工作方式。我們現在正試圖讓我們的建構過程適應他的新想法。我們有一個 Python 應用程序。以前,我們的建構系統是這樣的:
git 拉
執行測試
如果好,則推送到 ECR
簡單的。
但是他把所有的測試都放到了一個單獨的容器中。所以現在我需要做類似的事情:
- ‘docker build’ 主應用程序
- ‘docker run’ 主應用程序
- ‘docker build’ 測試應用
- ‘docker run’ 測試應用程序(這會在主應用程序上觸發 HTTP 請求)
- 從測試應用程序獲取結果
- 關閉主應用
- 如果測試結果好,推送到 ECR
但是當我在主應用程序上呼叫“docker run”時,它會永遠執行。這是一個 Python 網路應用程序 Django,其中 Gunicorn 為網路請求提供服務。
那麼,我在這裡做什麼?我是否應該在一個單獨的執行緒中啟動主應用程序,也許有一段時間會在一段時間後自動殺死它?
您是否使用參數執行
docker run -d ...
以-d
從容器中分離?這可能是問題嗎?編輯
我想你會發現你必須執行
docker run -d
才能從容器中分離出來,否則它只會停留在第一個顯示 STDOUT 的容器上,直到 Jenkins 在停止工作時殺死容器。我只是執行它們並給它們一個名稱,然後在 Jenkins 作業結束時,停止並刪除所有具有該名稱的容器。前任:
docker run -d --name jenkins-main-app main-app docker run -d --name jenkins-test-app test-app
然後在最後:
docker stop --name jenkins-main-app docker stop --name jenkins-test-app docker rm --name jenkins-main-app docker rm --name jenkins-test-app
希望有幫助。