Docker

在 Jenkins 管道中,使用 Groovy DSL,如何在後台啟動 Docker 映像?

  • July 26, 2018

我們有一個使用 Groovy DSL 的 Jenkins 建構系統,它對我們很有效。

但後來我們最近聘請了一位應該非常優秀的新開發人員。他決定重寫我們的測試工作方式。我們現在正試圖讓我們的建構過程適應他的新想法。我們有一個 Python 應用程序。以前,我們的建構系統是這樣的:

git 拉

執行測試

如果好,則推送到 ECR

簡單的。

但是他把所有的測試都放到了一個單獨的容器中。所以現在我需要做類似的事情:

  1. ‘docker build’ 主應用程序
  2. ‘docker run’ 主應用程序
  3. ‘docker build’ 測試應用
  4. ‘docker run’ 測試應用程序(這會在主應用程序上觸發 HTTP 請求)
  5. 從測試應用程序獲取結果
  6. 關閉主應用
  7. 如果測試結果好,推送到 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

希望有幫助。

引用自:https://serverfault.com/questions/923665