02 打包jdk镜像

打包jdk镜像

prerequiste

依赖前面在k8s环境中装好的Jenkins (包含kubernetes插件,预设的podTemplate(包含dind镜像,提供隔离的Docker环境))

依赖Harbor(上传镜像地址)

依赖deploy-k8s项目 (提供Dockerfile和用到的文件)

创建Dockerfile和相关文件

需要持久化保存,并做版本记录,那么git仓库就是很好选择。

目前存到了gitee托管仓库https://gitee.com/xxxxxxxx/delopy-k8s.git,使用jtest分支。

实际上,只要是公网能访问到的git仓库都行。

$ tree delopy-k8s/java/
delopy-k8s/java/
├── Dockerfile
└── app.sh




$ cat delopy-k8s/java/Dockerfile 
FROM openjdk:8-jre-alpine

ENV TZ="Asia/Shanghai"

ADD  ./app.sh  /

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\
    apk add --update ttf-dejavu curl tzdata &&\
    rm -rf /var/cache/apk/* &&\
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/lcoaltime &&\
        echo 'Asia/Shanghai' > /etc/timezone &&\
    chmod 777  /app.sh
    




$ cat delopy-k8s/java/app.sh 
#!/usr/bin/env sh

######$1 $2 $3 分别指的是3个不同的占位符 针对的是dockerFile 文件最后一行sh  app.sh 按顺序三个位置参数
######$1 指的是"-XX:+UseContainerSupport"
######$2 指的是"-XX:MaxRAMPercentage=70.0 -XX:InitialRAMPercentage=45.0 -XX:MinRAMPercentage=45.0 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m"
######$3 指的是"-Dconfig.profile=$CONFIG_ENV -Dspring.cloud.nacos.discovery.namespace=$NACOS_NAMESPACE -Dspring.cloud.nacos.config.namespace=$NACOS_NAMESPACE -Dspring.cloud.nacos.s
erver-addr=$NACOS_SERVER"
java  -jar $1 $2 $3  /app.jar

创建Pipeline

创建job

Dashboard->New Item->item name:woyun-openjdk-8u92-jre-alpine, 选中Pipeline

指定参数

image-20230916154151358

保留两次旧build记录。

勾选此项目是 参数化的(choice参数),目前branchName参数只允许选择jtest一个值。

image-20230916154412913

不勾选触发方式,手动触发构建。

pipeline定义,选择 pipeline script,直接在此界面中编写pipeline script。

编写Jenkinsfile

script内容:

//获取所选项目名称
def projectName="delopy-k8s";
//定义镜像tag
def build_tag="woyun-openjdk-8u92-jre-alpine-"+env.BUILD_NUMBER;
//定义全局命名空间
def repoNamespace='wy_spc';
pipeline {
    agent {
        kubernetes{
        inheritFrom 'dind-agent'
        }
    }
    stages {
        stage('代码构建阶段') {
            steps {
               echo "git 拉取代码 项目名称: ${projectName}  ${build_tag}  "
               checkout([$class: 'GitSCM', branches: [[name: '$branchName']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gitee_wangjm', url: 'https://gitee.com/ole12138/delopy-k8s.git']]]);
            }
        }
        stage('docker镜像构建阶段'){
              steps {
                    echo 'docker镜像 构建'
                    withCredentials([usernamePassword(credentialsId: 'harbor', passwordVariable: 'dockerPassword', usernameVariable: 'dockerUser')]) {
                       sh "docker login -u $dockerUser  -p $dockerPassword harbor.ole12138.cn"
                       dir('java') {
                           sh "docker build  --no-cache -t harbor.ole12138.cn/wy_spc/java:${build_tag} . "
                        }
                       
                  }
              }
        }
       stage('docker镜像上传阶段'){
             steps {
               echo '自定义镜像上传阿里云'
               sh "docker push harbor.ole12138.cn/wy_spc/java:${build_tag}"
            }
          }
    }
}

这里agent指定了dind-agent这个pod模板。因为要使用docker命令。

pipeline {
    agent {
        kubernetes{
        inheritFrom 'dind-agent'
        }
    }
}

这里checkout出了delopy-k8s这个git项目的jtest分支(branchName参数的值)

在java子目录下执行docker build命令

上传到指定的私有docker镜像仓库。

应用并保存。

添加镜像仓库credential

对了这里用到了这个镜像仓库的账号密码(注意这里的withCredentials语句),需要到credentials界面保存下账号密码:

Dashboard->Manage Jenkins->Credentials->System(点击System)->Global credentials(点击) ->Add Credentials->username with password…

构建

返回到Dashboard->woyun-openjdk-8u92-jre-alpine->Build with Parameter->jest, run

点击左边正在运行的job->console output,可以看到具体的构建日志。

如果有什么问题,根据日志进一步排查即可。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注