运维开发网

k8s使用jenkins发布jar包

运维开发网 https://www.qedev.com 2020-12-10 12:51 出处:51CTO 作者:草根追逐
1、编写jar包的DockerfileFROMjava:8-jre-alpineCOPYlucky-basicservices-0.0.1-SNAPSHOT.jar/home/lucky-basicservices-0.0.1-SNAPSHOT.jarCOPYstartup.sh/home/startup.shRUNchmod+x/home/startup.shWORKDIR/homeENTRYP

1、编写jar包的Dockerfile

FROM java:8-jre-alpine
COPY lucky-basicservices-0.0.1-SNAPSHOT.jar /home/lucky-basicservices-0.0.1-SNAPSHOT.jar
COPY startup.sh /home/startup.sh
RUN chmod +x /home/startup.sh
WORKDIR /home
ENTRYPOINT ["/bin/sh", "-c", "/home/startup.sh"]

这里面我试过直接用jar命令启动会报错,所以干脆jar包使用start.sh脚本启动

2、准备好存放docker镜像的harbor仓库,具体安装详见前面文章

3、使用docker build构建看会不会报错,如果没有报错,则使用docker push上传到harbor仓库

将startup.sh,jar包拷贝到项目目录,然后构建

docker build -t xxx.xxx.com:10443/library/fis-pc-dist:latest .
 docker push xxx.xxx.com:10443/library/lucky-basicservices:latest

4、使用jenkins发布,具体安装jenkins步骤查看前面文档

参数化构建,由于我这边是将项目都拷到k8s节点上,所以就定义host为固定的字符串参数,另外,定义项目project和发布状态Status为可选择参数

k8s使用jenkins发布jar包

5、编写发布脚本

k8s使用jenkins发布jar包

url="xxx.xxx.com:10443/library"
opt="/opt/kubernetes/bin/kubectl"
value=`ssh $host "$opt -n wehgc get deploy $project" |tail -1|awk '{print \$1}'
cat > Dockerfile << EOF
FROM java:8-jre-alpine
COPY _project_-0.0.1-SNAPSHOT.jar /home/_project_-0.0.1-SNAPSHOT.jar
COPY startup.sh /home/startup.sh
COPY file.conf /home/file.conf
COPY bootstrap.yml /home/bootstrap.yml
RUN chmod +x /home/startup.sh
ENV TZ=Asia/Shanghai 
RUN set -eux; \ 
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
    echo $TZ > /etc/timezone
WORKDIR /home
ENTRYPOINT ["/bin/sh", "-c", "/home/startup.sh"]
EOF

cat > startup.sh << EOF
#!/bin/sh
 /usr/bin/java -jar /home/_project_-0.0.1-SNAPSHOT.jar 
EOF`

update(){

    if [ $host == "10.1.6.99" ];then
#    scp -r $project/target/$project-0.0.1-SNAPSHOT.jar $host:/home/lucky-midplatform/$project/
    scp Dockerfile $host:/home/lucky-midplatform/$project/
    scp startup.sh $host:/home/lucky-midplatform/$project/

    fi
    ssh $host "cd /home/lucky-midplatform/$project; sed -i 's#latest#$BUILD_ID#g' $project.yaml"
    ssh $host "cd /home/lucky-midplatform/$project;sed -i 's#_project_#$project#g' Dockerfile"
    ssh $host "cd /home/lucky-midplatform/$project;sed -i 's#_project_#$project#g' startup.sh"
    ssh $host "cd /home/lucky-midplatform/$project; docker build -t $url/$project:$BUILD_ID ."
    ssh $host "docker login -u "admin" -p "GJ9JwGl0jL" xxx.xxx.com:10443"
    ssh $host "docker push $url/$project:$BUILD_ID"
    [ -n "$value" ] && ssh $host "$opt -n wehgc set image deployment $project $project=$url/$project:$BUILD_ID" || ssh $host "cd /home/lucky-midplatform/$project;$opt apply -f $project.yaml"
    ssh $host "cd /home/lucky-midplatform/$project; sed -i 's#$BUILD_ID#latest#g' $project.yaml"
  }

case $Status  in
  Deploy)
    echo "Status:$Status"           
    update
    ;;
  Rollback)
      echo "Status:$Status"
      ssh $host "kubectl -n wehgc rollout history deploy $project"
      ssh $host "kubectl -n wehgc rollout undo deploy $project"

      ;;
  *)
  exit
      ;;
esac

编写完应用保存,就可以发布了

k8s使用jenkins发布jar包

这里面稍微解释一下,前面两个cat eof是分别编辑Dockerfile和startup.sh,由于项目比较多,所以直接用cat eof比较方便,另外,将项目名称做一个变量,创建别的项目的时候直接jenkins复制 一份,改下变量就可以了

具体的发布思路是这样的:

1、编写Dockerfile文件,编写startup.sh文件,将jar包上传到项目目录

2、使用变量分别替换项目名称,使用jenkins内置变量BUILD_ID加在docker镜像后面以区分包的版本号

3、构建docker镜像并上传到harbor仓库

4、使用 set image更新镜像的版本号以达到更新的目的,更新完后再把版本号替换回latest以便下次更新可以继续更改

0

精彩评论

暂无评论...
验证码 换一张
取 消