Contents
打包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
指定参数

保留两次旧build记录。
勾选此项目是 参数化的(choice参数),目前branchName参数只允许选择jtest一个值。

不勾选触发方式,手动触发构建。
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,可以看到具体的构建日志。
如果有什么问题,根据日志进一步排查即可。
发表回复