jenkins-agent-jdk17镜像制作,且容器内部能构建镜像

该文章介绍了如何基于Debian:10容器创建JenkinsAgent镜像,包括配置下载源、安装依赖、添加agent.jar、设置JDK17环境、创建启动脚本以及安装buildkit。最后,文章提供了使用nerdctl制作和运行镜像的命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇文章我们讲到如何制作可build镜像的基础容器,这篇文章将带大家如何基于此容器制作出独一无二的jenkins-agent。

老规矩 先表明宿主机配置,除啦操作系统其他都是最新的。

  • debian:v10
  • containerd:v1.7.0
  • nerdctl:v1.3.0
  • buildkit:v0.11.5

将容器制作成镜像

nerdctl commit 723e7a7cbe7c agent:v1

image-20230407150324532

FROM debian:10

ARG AGENT_WORKDIR=/home/jenkins/agent

ARG VERSION=3107.v665000b_51092

ENV TZ=Etc/UTC

ENV LANG=C.UTF-8

USER root

# 配置下载源
RUN rm -rf /etc/apt/sources.list

COPY ./sources.list /etc/apt/sources.list

# 下载依赖
RUN mkdir -p /home/jenkins/agent && apt-get update && apt-get --yes --no-install-recommends install curl fontconfig ca-certificates git git-lfs less netbase openssh-client patch && apt-get clean && rm -rf /tmp/* /var/cache/* /usr/share/doc/* /usr/share/man/*

# 安装agent.jar slave.jar
ADD https://repo.jenkins-ci.org/public/org/jenkins-ci/main/remoting/3107.v665000b_51092/remoting-3107.v665000b_51092.jar /usr/share/jenkins/agent.jar
RUN chmod 0644 /usr/share/jenkins/agent.jar && ln -sf /usr/share/jenkins/agent.jar /usr/share/jenkins/slave.jar

# 配置JDK17
ENV JAVA_HOME=/opt/java/openjdk
COPY ./openjdk /opt/java/openjdk

# 设置环境变量
ENV PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

RUN mkdir /home/jenkins/.jenkins && mkdir -p "${AGENT_WORKDIR}"

# 声明了匿名卷
VOLUME [/home/jenkins/.jenkins]

VOLUME [/home/jenkins/agent]

WORKDIR /home/jenkins

# 配置启动脚本
COPY ./jenkins-agent /usr/local/bin/jenkins-agent

RUN chmod +x /usr/local/bin/jenkins-agent && ln -s /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-slave

# 安装 buildkit
ADD ./buildkit-v0.11.5.linux-amd64.tar.gz /usr/local/

ENTRYPOINT ["/usr/local/bin/jenkins-agent"]

制作镜像

nerdctl build -t jenkins-agent:v1.0.0 -f Dockerfile .

运行容器

nerdctl run \
-v /var/run/containerd/containerd.sock:/var/run/containerd/containerd.sock \
-v /var/lib/containerd:/var/lib/containerd \
-v /var/run/buildkit/buildkitd.sock:/var/run/buildkit/buildkitd.sock \
-v /usr/local/bin/nerdctl:/usr/local/bin/nerdctl \
-td jenkins-agent:v1.0.0 -workDir=/home/jenkins/agent

注意!此镜像没有jenkins用户,直接使用的root。

如果出现证书问题重新下载下插件就好

apt-get install -y ca-certificates
### 使用 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 编写技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值