簡體   English   中英

碼頭工人建在官方詹金斯集裝箱內

[英]docker build inside official jenkins container

我在docker上運行官方Jenkins容器。 我需要構建docker鏡像作為成功構建的post動作,但Jenkins容器沒有docker binary。

我看到了幾個選項,首先是從官方圖像中獲取我自己的Jenkins容器,並提供docker binary。 第二個選項是使用具有docker和其他必要運行時的專用Jenkins slave。 第三種選擇是為Jenkins服務器提供ansible。 我想在容器上運行所有東西,因為它干凈,簡單且易於重復。

你是怎么解決這個問題的? 從長遠來看哪個是更好的解決方案,為什么? 我的首要任務是能夠使用單個ansible命令配置,配置和引導整個CI基礎結構。 此外,構建的docker容器將被推送到注冊表等,因此組件之間的連接應該是最佳的,具有最小的復雜性或手動配置。

在一個容器中安裝docker不是一個好主意。

相關文章

但是,您可以通過安裝docker socket來訪問在主機上運行的docker守護程序。 它應該適用於測試目的,但不要在生產模式下運行,因為它會產生安全問題。

相關文章

您當然可以找到一個更清晰的解決方案,直接從您的主機管理您的部署/構建過程,查看Jenkins容器的退出狀態。

我們現在使用GoCD進行類似的設置,其中GoCD代理在docker容器中運行,並且必須在成功的管道上構建映像。

tl; dr仍然是一種hacky方式,但這是最好的行為選項: 使用從容器到運行Jenkins 的docker主機的TCP連接 請注意@Raphayol提到的安全隱患。

這是我們嘗試的:

1)在docker中運行docker

不是個好主意。 導致IO子系統咆哮並重新啟動的各種懸掛情況的結果是必要的。

2)建立在群上

Swarm集群或任何其他docker集群意味着運行容器不構建它們。 舊容器最新推回,因為不能保證在同一節點上執行構建和推送。

3)專用構建主機

雖然這可以勝過工作節點的目的,但自動縮放變得棘手。

4)安裝碼頭插座

工作類型但在重負載時會產生隨機IO鎖,並且需要重新啟動docker守護程序

5)通過TCP連接回來

這個選項現在可以工作幾個月,雖然如果你的jenkins構建服務器很好地隔離它並不是一個明確的解決方案,你可以忍受這個。

[root@ip-10-10-10-10 ~]# docker ps
CONTAINER ID        IMAGE                              COMMAND             CREATED             STATUS              PORTS                              NAMES
e3630d84909e        registry.backbase.com/gocd-agent   "/sbin/my_init"     2 minutes ago       Up 2 minutes        0.0.0.0:9040-9045->9040-9045/tcp   docker_agent_1
[root@ip-10-10-10-10 ~]# docker exec -it e3 env|grep DOCKER
DOCKER_TLS_VERIFY=yes
DOCKER_HOST=tcp://10.10.10.10:2376
DOCKER_CERT_PATH=/var/go/docker-certs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM