[英]How to build on remote Docker server with Jenkins declarative pipeline?
我在 Jenkins 中編寫了一個聲明性管道。 此管道應在遠程 Docker 服務器上的 Docker 容器中運行。
我閱讀了自定義執行環境:
自定義執行環境
Pipeline 旨在輕松使用 Docker 鏡像作為單個 Stage 或整個 Pipeline 的執行環境。 這意味着用戶可以定義其流水線所需的工具,而無需手動配置代理。 實際上任何可以打包在 Docker 容器中的工具。 只需對 Jenkinsfile 進行少量編輯即可輕松使用。
pipeline { agent { docker { image 'node:7-alpine' } } stages { stage('Test') { steps { sh 'node --version' } } } }
它可以工作,但它使用 Jenkins 服務器作為 Docker 服務器。
我閱讀了使用遠程 Docker 服務器:
使用遠程 Docker 服務器
默認情況下,Docker Pipeline 插件將與本地 Docker 守護進程通信,通常通過 /var/run/docker.sock 訪問。
要選擇非默認 Docker 服務器,例如 Docker Swarm,應使用 withServer() 方法。
通過將 URI 和(可選的)在 Jenkins 中預先配置的 Docker 服務器證書身份驗證的憑據 ID 傳遞給具有以下功能的方法:
node { checkout scm docker.withServer('tcp://swarm.example.com:2376', 'swarm-certs') { docker.image('mysql:5').withRun('-p 3306:3306') { /* do things */ } } }
這有效,但它使用腳本化管道。
我還閱讀了指定 Docker 標簽:
指定 Docker 標簽
默認情況下,Pipeline 假設任何配置的代理都能夠運行基於 Docker 的 Pipelines。 對於無法運行 Docker 守護程序的 macOS、Windows 或其他代理的 Jenkins 環境,此默認設置可能有問題。 Pipeline 在 Manage Jenkins 頁面和文件夾級別提供了一個全局選項,用於指定要使用哪些代理(按標簽)來運行基於 Docker 的管道。
但是使用標簽需要一個完整的 Jenkins slave 和 sshd 並且安裝了一個 Jenkins 用戶,並且一直在線並且 Jenkins 的 master 會安裝從庫。 僅使用聲明性管道而不是腳本化管道,這聽起來有點沉重。
如何使用聲明式管道在遠程 Docker 服務器上構建?
我認為你在這里混合了一些東西。 關於代理的文檔部分,代理部分用於標識您的階段應該運行的節點,以及特殊的配置和信息。
Docker 標簽反過來給出了它應該從鏡像內部運行的信息。
這不會為您連接到外部 docker 服務器留下任何空間,除非您將其設置為帶有一些特殊標簽的 Jenkins 節點,例如“docker-special”。 然后你可以做一些簡單的事情
agent {
docker {
image 'maven:3-alpine'
label 'docker-special'
}
}
docker 標簽上的文檔部分
碼頭工人
使用給定的容器執行管道或階段,該容器將在預先配置為接受基於 Docker 的管道的節點上或在與可選定義的標簽參數匹配的節點上動態配置。
至於您的特定用例。
jenkins文檔的這一部分,提到了 sidecar 模式/高級用法,他們立即切換到腳本。
所以是的,正如我所提到的,這在聲明式中不可用。 聲明式的唯一出路是將外部服務器標記為具有特定標簽的 jenkins 節點。
你不需要一個“完整的 Jenkins slave”——你只需要一台運行 Docker 的機器,它通過 TCP/TLS 為 docker 套接字提供服務,x509 客戶端身份驗證; 不要提供未經身份驗證和未加密的服務,否則您將在安全范圍內打開一個行星大小的漏洞(這是學習 openssl 的機會!;)
對於聲明性,您可以在代理標簽內使用“節點”,並使用標簽關聯的 docker 容器(具有 Jenkins 所需的一切)配置模板。
pipeline {
agent {
node {
label 'docker-agent'
}
}
...
您需要掛載 docker 套接字(和您的代理工作區),否則您將無法從代理容器內部執行太多操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.