jenkins slave镜像制作描述

本文介绍如何基于银河麒麟V10制作适用于ARM64架构的Jenkins Slave Docker镜像,涵盖所需环境和工具的准备,如Java、Maven等,并详细说明Dockerfile的配置步骤。

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

描述

前提准备

根据情况准备好Slave镜像要用到的环境和工具,以此次为例:

1.基础构建镜像
2.java环境
3.git工具
4.npm工具
5.maven工具
6.maven连接nexus的配置文件
7.jenkins的slave端
8.slave端连接master的脚本文件

关于Slave镜像的制作,可以查看jenkins在github上发布的docker slave制作项目,网址:https://github.com/jenkinsci/docker-inbound-agent

镜像说明

此镜像基于银河麒麟V10的基础镜像制作,为ARM64架构,但制作过程同理,且软件包均为二进制包,若要使用,直接将基础镜像改为自己环境的镜像即可,换汤不换药。

Dockerfile说明

我基于kylin10-sp1-aarch64:v10-b4-20200711镜像,将所有软件包放到Dockerfile所在的目录下,直接执行Dockerfile即可。

FROM kylin10-sp1-aarch64:v10-b4-20200711          #基于镜像构建
USER root                                         #使用哪个用户构建
ADD jdk-8u281-linux-aarch64.tar.gz /usr/local/    #拷贝解压jdk8
ADD apache-maven-3.6.3-bin.tar.gz /usr/local/     #拷贝解压maven
ADD node-v14.16.0-linux-arm64.tar.xz /usr/local/  #拷贝解压node,其中包括npm工具
ENV JAVA_HOME=/usr/local/jdk1.8.0_281             #定义java home
ENV M3_HOME=/usr/local/apache-maven-3.6.3         #定义maven home
ENV NPM_HOME=/usr/local/node-v14.16.0-linux-arm64 #定义node home
ENV PATH=${PATH}:${JAVA_HOME}/bin:${M3_HOME}/bin:${NPM_HOME}/bin  #将定义的变量添加到PATH
RUN mkdir -p /usr/share/jenkins/             #创建slave文件的存放目录
COPY agent.jar /usr/share/jenkins/agent.jar  #拷贝jenkins的agent端
COPY jenkins-slave /usr/bin/jenkins-slave    #拷贝agent连接jenkins的脚本文件
COPY settings.xml /usr/local/apache-maven-3.6.3/conf/settings.xml #拷贝maven连接nexus的配置文件
ADD kylin_aarch64_1.repo /etc/kylin_aarch64_1.repo#拷贝构建环境的yum源文件  
RUN mkdir /yum \
    && mv /etc/yum.repos.d/* /yum/ \
    && mv /etc/kylin_aarch64_1.repo /etc/yum.repos.d/ \
    && yum install -y git \                       #安装git工具
    && git --version \ 
    && chmod +x /usr/bin/jenkins-slave \          #脚本添加执行权限
    && chmod 755 /usr/share/jenkins/agent.jar     #agent文件赋权
WORKDIR /home/jenkins/agent                       #定义工作目录
ENTRYPOINT ["/usr/bin/jenkins-slave"]             #定义启动时执行脚本文件

制作流程很简单,但有个地方需要注意一下,就是RUN mkdir -p /usr/share/jenkins/COPY agent.jar /usr/share/jenkins/agent.jar,这个不能乱放,因为在jenkins-slave连接脚本中已经声明了,这个agent端就在这个目录(/usr/share/jenkins/)下,如果要变更位置,需要将jenkins-slave的里面的agent路径也修改一下。
在这里插入图片描述

以上就是jenkins-slave中定义的位置。

### 如何使用 Jenkins Slave Docker 镜像构建 CI/CD 流水线 #### 准备工作 为了确保能够顺利运行 Jenkins 和其 Slave 节点,在开始之前需要确认 Kubernetes 集群已经配置好,并且可以正常访问。另外,还需要安装 `kubectl` 工具以便于管理集群资源。 #### 创建持久卷声明 (Persistent Volume Claim, PVC) 对于生产环境来说,保存构建历史记录非常重要。因此建议先创建一个 PersistentVolumeClaim 来为 Jenkins 主节点提供稳定的数据存储位置[^4]: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: jenkins-home-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi ``` 可以通过如下命令应用此 YAML 文件来创建 PVC 对象: ```bash kubectl apply -f path/to/pvc-definition.yaml ``` #### 构建并推送自定义 Jenkins Slave 镜像至 Harbor 私有仓库 如果想要定制化自己的 Jenkins Slave 环境,则可以根据项目需求制作专属的基础镜像文件(Dockerfile),之后将其推送到内部使用的私有 Harbor 注册表中去[^2]: ```dockerfile FROM jenkins/inbound-agent:latest-alpine AS base USER root RUN apk add --no-cache git openssh-client python3 py3-pip && \ pip install --upgrade pip setuptools wheel WORKDIR /home/jenkins/ COPY . . CMD ["jenkins-agent"] ``` 完成上述操作后就可以利用下面这条指令把新构建出来的镜像上传给 Harbor 了: ```bash docker build -t harbor.yourdomain.com/project/my-jenkins-slave:vX.X . docker login harbor.yourdomain.com docker push harbor.yourdomain.com/project/my-jenkins-slave:vX.X ``` 请注意替换其中的域名、版本号以及路径参数以匹配实际场景下的设置情况。 #### 定义 Pod Template 并集成到 Pipeline 中 为了让 Jenkins 可以动态分配任务给不同的 Slave 实例执行,可以在 Declarative Pipeline 或 Scripted Pipeline 的配置里指定相应的 podTemplate() 方法调用来描述所需的工作空间规格。这里给出一段简单的 Groovy 代码片段用于说明如何实现这一点: ```groovy podTemplate( label: 'mypod', containers: [ containerTemplate(name: 'maven', image: 'harbor.yourdomain.com/project/maven:jdk8', ttyEnabled: true), containerTemplate(name: 'golang', image: 'harbor.yourdomain.com/project/golang:alpine') ], volumes: [ persistentVolumeClaim(claimName: 'jenkins-home-pvc', mountPath: '/var/jenkins_home') ] ){ node('mypod') { stage('Run Maven Build'){ container('maven'){ sh 'mvn clean package' } } stage('Build Go Application'){ container('golang'){ sh ''' go version go build main.go ''' } } } } ``` 这段脚本会告诉 Jenkins 在每次触发该流水线作业时都自动拉取最新的镜像实例作为临时计算单元参与进来;同时也会挂载先前准备好的数据卷使得不同次之间产生的中间产物得以保留下来供后续分析查阅之用。 #### 总结 综上所述,通过合理规划和设计基于Kubernetes平台上的Jenkins Master-Slave架构体系结构,不仅有助于提高持续交付过程中的灵活性与效率,而且还可以有效降低运维成本开销。以上就是关于怎样运用 Jenkins Slave Docker Image 进行 CI/CD 自动化的全部介绍内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚伪的空想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值