![](/img/trans.png)
[英]Jenkins build Docker daemon not running on kubernetes cluster
[英]Kubernetes cluster pods as Jenkins Build Agents
我已經在我們的 Jenkins 中安裝了Kube.netes plugin - 1.23.3
,並且能夠在 kube.netes pod(動態 Jenkins 從站)上執行 shell 命令。 這是使用默認的jnlp & jenkins/jnlp-slave:latest
假設如果我更改下面的“名稱”和“Docker 映像”部分以使用我們的私有注冊表和映像
Manage Jenkins --> Configure System--> Cloud --> Pod Template --> Container Template
Name: sonatype
Docker image:sonatype:4546/ubuntu-16.04
它不使用我們的私有 docker 圖像,甚至不在 pod 容器上運行 shell 命令。 這個想法是在 Kube.netes 集群 pod 上使用我們自己的 docker 圖像作為動態 Jenkins 構建代理來執行build + static analysis
。
如何使用我們私有的 docker 注冊表映像並將它們作為 kube.netes 集群中的 Jenkins slave 執行? 我有下面的腳本管道代碼。 K8S 工作節點的第 1 階段“SCM 代碼檢出”正在運行,接下來的第 2 階段構建將從template Kube.netes Pod Template
啟動 pod 代理。 但如果失敗docker: not found
。 它似乎試圖在 pod 中拉取我們的注冊表映像。 我們的工作節點系統的代碼需要安裝在動態的 Jenkins 從 pod 中並執行構建和下一階段。 任何實現的方向都會有所幫助。
node ("kubupods") {
stage('Code Compile') {
sh 'hostname'
}
stage('Code Analysis') {
sh 'hostname'
}
}
Jenkins 默認會從 dockerhub 拉取鏡像。 在您的情況下,圖像 sonatype:4546/ubuntu-16.04。 如果您正在管道中構建,則為了使用私有注冊表,您需要提供私有注冊表及其憑據。 您可以在 UI 上提供它,也可以通過代碼來提供它。 參考這里
之后,您還需要告訴 kube.netes YAML 以及私有注冊表。 為此,您可以在此處參考。 這基本上是兩個步驟 a) 創建一個 kube.netes 秘密 b) 使用imagepullsecret
字段告訴您的部署有關秘密。
確保將圖像引用為<username or registry URL/<image_name>:<tag(maybe $BUILD_NUMBER)>
=============== 添加問題后編輯 1 =====
使用 Jenkins 配置插件以安裝包。
如果你已經安裝在你的機器上,那么更新 Jenkins 中的 PATH 變量到 Docker 的位置。
上面 Tarun 的回答假設您正在管道中構建圖像。
我在我們的管道中做了類似的事情,但我們在管道外構建了一個自定義的 jnlp-slave 圖像(加載了我們需要的 CI/CD 工具),並在 kube.netes 插件 yaml 中引用它。
構建自定義 jnlp-slave 圖像。 (下面的 Dockerfile)
FROM jenkins/jnlp-slave:latest
# Download/install tools
ENTRYPOINT ["jenkins-slave"]
將自定義 jnlp-slave 鏡像推送到您的私有注冊表
docker build -t my-private-registry/jnlp-slave:custom .
docker push my-private-registry/jnlp-slave:custom
定義您的 Jenkinsfile,以便 pod 使用您在上一步中構建的圖像。
pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
metadata:
label:
jenkins: slave
spec:
containers:
- name: jnlp
image: my-private-registry/jnlp-slave:custom
}}}
stages {
stage("Test") {
sh("hostname")
}
}
我們的注冊表不需要身份驗證,但如果需要,您需要向 jenkins 提供秘密(如 Tarun 所述),以讓它在您的注冊表中進行身份驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.