自制构建镜像
参考:https://github.com/willzhang/docker-images/tree/master/maven
kubesphere devops使用自带maven镜像可能遇到2个问题:
- 离线环境无法拉取构建镜像,需要推送到本地镜像仓库,重新指定镜像地址
- 首次构建时从官方下载maven依赖,编译时间较慢
下面我们自行构建一个maven镜像,导入settings.xml配置文件,指示maven从阿里云镜像源或内网nexus maven私库下载依赖:
创建Dockerfile,复制settings.xml文件,并且需要安装docker命令,用于构建和推送镜像:
FROM maven:3.6.3-jdk-11-slim
ENV DOCKER_VERSION=19.03.13
COPY settings.xml /usr/share/maven/ref/
RUN curl -f https://download.docker.com/linux/static/stable/x86_64/docker-$DOCKER_VERSION.tgz | tar xvz && \
mv docker/docker /usr/bin/ && \
rm -rf docker
settings.xml需要自行配置,指定阿里云maven或内网nexus仓库,示例:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/usr/share/maven/ref/repository</localRepository>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
修改kubesphere jenkins配置,找到image地址直接替换即可:
kubectl -n kubesphere-devops-system edit cm jenkins-casc-config
kubectl -n kubesphere-devops-system delete pods -l app=ks-jenkins
另外jenkins-casc-config还需要修改maven容器启动参数,将command中的cat删除,改为args参数,因为原始的官方maven镜像指定了ENTRYPOINT用于复制settings.xml到目标配置文件路径,如果使用command会导致ENTRYPOINT被覆盖,进而导致自定义配置文件无法生效:
- name: "maven"
namespace: "kubesphere-devops-system"
label: "maven"
nodeUsageMode: "EXCLUSIVE"
idleMinutes: 0
containers:
- name: "maven"
image: "10.39.140.196:8081/library/maven:3.6.3-dev"
command: ""
args: "cat"