本镜像用于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。