[英]docker build inside official jenkins container
我在docker上運行官方Jenkins容器。 我需要構建docker鏡像作為成功構建的post動作,但Jenkins容器沒有docker binary。
我看到了幾個選項,首先是從官方圖像中獲取我自己的Jenkins容器,並提供docker binary。 第二個選項是使用具有docker和其他必要運行時的專用Jenkins slave。 第三種選擇是為Jenkins服務器提供ansible。 我想在容器上運行所有東西,因為它干凈,簡單且易於重復。
你是怎么解決這個問題的? 從長遠來看哪個是更好的解決方案,為什么? 我的首要任務是能夠使用單個ansible命令配置,配置和引導整個CI基礎結構。 此外,構建的docker容器將被推送到注冊表等,因此組件之間的連接應該是最佳的,具有最小的復雜性或手動配置。
我們現在使用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.