本镜像用于kubesphere中devops使用的替换基础镜像,升级docker版本,安装docker buildx,增加jdk maven node环境等。
一、用于构建docker镜像的Dockerfile
# 使用 Ubuntu 作为基础镜像
FROM ubuntu:latest
# 设置环境变量,避免交互式配置
ENV DEBIAN_FRONTEND=noninteractive
# 安装基本工具和依赖
RUN apt-get update -y \
&& apt-get install -y \
coreutils \
apt-transport-https \
ca-certificates \
curl \
software-properties-common \
git \
gawk
# 卸载默认的 OpenJDK 11
RUN apt-get remove --purge openjdk-11-jre-headless openjdk-11-jdk-headless -y \
&& apt-get autoremove -y \
&& apt-get clean
# 添加 OpenJDK 8 源并安装
RUN add-apt-repository ppa:openjdk-r/ppa \
&& apt-get update -y \
&& apt-get install -y openjdk-8-jdk
RUN apt-get update -y \
&& apt-get install -y maven
# 安装 Docker
RUN curl -fsSL https://get.docker.com -o get-docker.sh \
&& sh get-docker.sh
# 安装 Docker Buildx
RUN mkdir -p ~/.docker/cli-plugins \
&& curl -L https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx \
&& chmod a+x ~/.docker/cli-plugins/docker-buildx
# 清理安装缓存和无用文件
RUN apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /get-docker.sh
# 设置 Java 环境变量
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ENV PATH=$PATH:$JAVA_HOME/bin
# 安装 NVM
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
# 设置nvm的环境变量
ENV NVM_DIR=/root/.nvm
ENV NODE_VERSION=16
# 在新Shell环境中激活nvm并安装Node.js
RUN /bin/bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use $NODE_VERSION && npm install -g npm@8.5.0"
ENV PATH=$PATH:/root/.nvm/versions/node/v$NODE_VERSION/bin
# 设置工作目录
WORKDIR /app
# 运行一个命令(示例)
CMD ["dockerd"]
二、构建命令 build.sh
docker buildx build --platform linux/amd64 --push -t venbill/builder:1.0.0 --progress=plain .
三、devops流水线配置
pipeline {
agent {
kubernetes {
defaultContainer 'nodejs16'
inheritFrom 'nodejs nodejs16 base maven'
containerTemplate {
name 'base'
image 'venbill/builder:1.0.0'
}
yaml """
apiVersion: v1
kind: Pod
metadata:
labels:
some-label: some-label-value
spec:
containers:
- name: nodejs16
image: node:16.14.2
command:
- 'sleep'
args:
- '99d'
- name: nodejs11
image: node:11.0.0
command:
- 'sleep'
args:
- '99d'
"""
}
}
stages {
stage('Use Docker client') {
agent none
steps {
container('base') {
// sh 'docker version'
}
}
}
stage('Clone repository') {
agent none
steps {
container('base') {
sh 'pwd'
}
}
}
stage('build') {
agent none
steps {
container('base') {
sh 'docker version'
sh 'docker buildx version'
sh 'java -version'
sh 'mvn -v'
sh 'split --version'
sh '/bin/bash -c "source /root/.nvm/nvm.sh &&node -v"'
sh '/bin/bash -c "source /root/.nvm/nvm.sh &&npm -v"'
}
container('nodejs11') {
sh 'pwd'
sh 'node --version'
sh 'npm -v'
}
container('nodejs16') {
sh 'pwd'
sh 'node --version'
sh 'npm -v'
}
container('maven') {
sh 'mvn --version'
}
}
}
}
}
备注:
1.通过containerTemplate替换base中的镜像为刚才构建的镜像。
containerTemplate {
name 'base'
image 'venbill/builder:1.0.0'
}
2.yml中可自定义增加的container。