containerd k8s jenkins pod中jenkins 构建镜像方法
时间: 2025-06-07 19:09:23 浏览: 58
### 使用 Containerd 和 K8s 在 Jenkins Pod 中构建镜像的方法
在 Kubernetes (K8s) 环境下,通过 Jenkins 构建容器镜像是常见的 CI/CD 流程之一。以下是实现这一目标的具体方法:
#### 1. 准备工作
为了确保 Jenkins 能够成功构建镜像并推送到镜像仓库,需要满足以下条件:
- **Jenkins Master 安装**:部署 Jenkins 主节点到 CentOS 或其他支持的操作系统中[^1]。
- **Container Runtime 替代 Docker**:由于使用的是 `containerd`,需确认 Kubernetes 集群已切换至 `containerd` 作为其容器运行时[^3]。
#### 2. 创建自定义 Jenkins Slave 镜像
如果默认的 Jenkins Slave 镜像无法满足需求,则可以创建一个包含必要工具的定制化镜像。例如,在引用中的 Dockerfile 基础上扩展功能[^4]:
```dockerfile
FROM centos:7
LABEL maintainer="[email protected]"
RUN yum install -y \
wget \
build-essential \
gcc \
curl \
git \
libtool-ltdl-devel && \
yum clean all && \
rm -rf /var/cache/yum/*
# 下载必要的依赖项
ADD ./jdk1.8.0_191.tar.gz /root/
ADD ./node-v12.18.3-linux-x64.tar.gz /root/
ADD ./apache-maven-3.6.3.tar.gz /root/
ENV JAVA_HOME=/root/jdk1.8.0_191/
ENV NODE_HOME=/root/node-v12.18.3-linux-x64/
ENV M2_HOME=/root/apache-maven-3.6.3/
ENV PATH=$JAVA_HOME/bin:$NODE_HOME/bin:$M2_HOME/bin:$PATH
COPY slave.jar /usr/share/jenkins/slave.jar
COPY jenkins-slave /usr/bin/jenkins-slave
COPY settings.xml /etc/maven/settings.xml
ENTRYPOINT ["jenkins-slave"]
```
此镜像包含了 Java、Node.js 和 Maven 工具链,适用于大多数应用程序开发场景。
#### 3. 配置 Jenkins Pipeline
编写一个 Jenkins Pipeline 文件 (`Jenkinsfile`) 来描述整个构建流程。下面是一个简单的例子,展示如何利用 `containerd` 构建镜像并将它推送至 Harbor 私有镜像库:
```groovy
pipeline {
agent {
kubernetes {
label 'my-jnlp-container'
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: maven-builder
image: your-repo/custom-jenkins-slave:latest
command:
- cat
tty: true
"""
}
}
stages {
stage('Checkout') {
steps {
echo 'Cloning Git Repository...'
git url: 'https://github.com/example/repo.git', branch: 'main'
}
}
stage('Build Image with containerd') {
steps {
script {
sh '''
# Build the application and create a new container image.
cd project-directory
mvn package
# Use ctr to interact directly with containerd.
sudo ctr images pull alpine:latest
sudo ctr images tag alpine:latest my-image:v1.0
sudo ctr images export my-image.tar my-image:v1.0
'''
}
}
}
stage('Push Image to Registry') {
steps {
script {
withCredentials([usernamePassword(credentialsId: 'harbor-credentials', usernameVariable: 'HARBOR_USER', passwordVariable: 'HARBOR_PASS')]) {
sh '''
docker login -u "$HARBOR_USER" -p "$HARBOR_PASS" harbor.example.com
docker push harbor.example.com/my-project/my-image:v1.0
'''
}
}
}
}
}
}
```
在此脚本中,`ctr` 是用于管理 `containerd` 的命令行工具。可以通过该工具拉取基础镜像、标记新镜像以及导出为 tarball 格式文件[^3]。
#### 4. 设置免密 SSH 访问
为了让多台机器之间能够无缝协作,建议设置无密码 SSH 登录方式。具体操作可参考相关文档说明。
---
### 总结
以上介绍了如何在一个基于 `containerd` 的 Kubernetes 环境中配置 Jenkins 并执行镜像构建任务的过程。这不仅涉及到了基本组件的选择与搭建,还涵盖了实际使用的 pipeline 编写技巧。
阅读全文
相关推荐



















