Jenkins可伸缩2-做流水线maven发布项目

参考链接:
https://blog.51cto.com/wzlinux/2467307

一、自己构建一个jenkins-agent
我们修改下,让其支持 git、maven以及jdk11
1、先用maven3.5.4和jdk11
还参考了:https://gitlab.com/feiweihy/centos-git-java-maven/-/blob/main/Dockerfile
在服务器
wget https://dlcdn.apache.org/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

FROM jenkins/jnlp-slave:4.9-1-jdk11

MAINTAINER 529486618@qq.com

LABEL Description="This is a extend image base from jenkins/jnlp-slave which install maven and git in it."

USER root

#install maven
ADD apache-maven-3.5.4-bin.tar.gz /usr/lib/
ENV M2_HOME /usr/lib/apache-maven-3.5.4
ENV PATH $JAVA_HOME/bin:$JRE_HOME/bin:$M2_HOME/bin:$PATH
RUN ln -s /usr/lib/apache-maven-3.5.4/bin/mvn /usr/bin/mvn

USER jenkins

docker build --rm --tag 192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4 .
docker run --name=maven -it -v /data/mavenrepo:/home/jenkins/.m2 192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4 /bin/bash
看到里面竟然还带了git的
在这里插入图片描述

git clone -b dev http://xxx/jieyi-saas/dep.git
cd dep
mvn clean compile package -Dmaven.test.skip=true -pl dep-admin -am -f pom.xml

那就把这个包上传,基于这个镜像来做
docker push 192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4

podTemplate(containers: [
    containerTemplate(
        name: 'jnlp', 
        image: '192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4', 
        alwaysPullImage: false, 
        args: '${computer.jnlpmac} ${computer.name}'),
  ]) {

    node(POD_LABEL) {
        stage('git pull') {
           echo "hello git"
           sh 'git clone -b dev http://xxx/jieyi-saas/dep.git'
        }
        stage('build') {
           sh 'mvn -version'
        }
        stage('test') {
            echo "hello test"
        }
        stage('deploy') {
            echo "hello deploy"
            sleep 10
        }
    }
}

可以了:
在这里插入图片描述

2、开始解决存储问题,需要在NFS里面有一个路径给jenkins的/home/jenkins/.m2使用,以便存储各种maven所需要的包
新建一个存储卷:
在这里插入图片描述

podTemplate(containers: [
    containerTemplate(
        name: 'jnlp', 
        image: '192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4', 
        alwaysPullImage: false, 
        args: '${computer.jnlpmac} ${computer.name}'),
  ],
  volumes: [
    persistentVolumeClaim(mountPath: '/home/jenkins/.m2/', claimName: 'jenkins-mavenrepo')
  ]) {
    node(POD_LABEL) {
        stage('git pull') {
           echo "hello git"
           sh 'git clone -b dev http://xxx/jieyi-saas/dep.git'
        	 sh '''
           cd dep
           mvn clean compile package -Dmaven.test.skip=true -pl dep-admin -am -f pom.xml
           '''
        }
        stage('build') {
           sh 'mvn -version'
        }
        stage('test') {
            echo "hello test"
        }
        stage('deploy') {
            echo "hello deploy"
            sleep 10
        }
    }
}

构建在不断下载资源包
在这里插入图片描述

同时可以看到NFS服务器的这个路径下有maven下载的资源包了
在这里插入图片描述

第一次构建了
在这里插入图片描述

在这里插入图片描述

再次构建,因为maven的资源包都下载过了,所以明显变短了
在这里插入图片描述

在这里插入图片描述

二、基于前面一节的内容继续扩展发布部分
docker run --name=maven -it -v /data/mavenrepo:/home/jenkins/.m2 192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4 /bin/bash

设置免密登录
cd
ssh-keygen -t rsa
cd .ssh
cat id_rsa.pub

然后把内容拷贝到docker服务器的~/.ssh/authorized_keys中(备注,目标服务器的设置在jenkins配置的时候已经有说明,此处不赘述)

在宿主机执行
docker commit maven 192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4-20220319

测试这个镜像是否可以用
docker run --name=maven -it -v /data/mavenrepo:/home/jenkins/.m2 192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4-20220319 /bin/bash

git clone -b dev http://xxx/jieyi-saas/dep.git

cd dep

mvn clean compile package -Dmaven.test.skip=true -pl dep-admin -am -f pom.xml

ssh root@192.168.1.197

cd /root/dockerbuild/dep/target

rm -rf *

exit

scp dep-admin/target/dep-admin.jar

root@192.168.1.197:/root/dockerbuild/dep/target/

ssh root@192.168.1.197

cd /root/dockerbuild/dep/

verno=date +%Y%m%d

docker build --rm --tag 192.168.1.169:80/jyyun/dep:$verno .

docker push 192.168.1.169:80/jyyun/dep:$verno

执行下来没问题

那就把这个包上传,基于这个镜像来做
docker push 192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4-20220319

修改流水线:

podTemplate(containers: [
    containerTemplate(
        name: 'jnlp', 
        image: '192.168.1.169:80/jyyun/jenkins-agent:maven-3.5.4-20220319', 
        alwaysPullImage: false, 
        args: '${computer.jnlpmac} ${computer.name}'),
  ],
  volumes: [
    persistentVolumeClaim(mountPath: '/home/jenkins/.m2/', claimName: 'jenkins-mavenrepo')
  ]) {
    node(POD_LABEL) {
        stage('git pull') {
           echo "prepare to pull"
           sh 'git clone -b dev http://xxx/jieyi-saas/dep.git'
        	 echo "pull completely"
        }
        stage('build') {
           sh '''
           cd dep
           mvn clean compile package -Dmaven.test.skip=true -pl dep-admin -am -f pom.xml
           '''
        }
        stage('test') {
            echo "hello test"
        }
        stage('deploy') {
            echo "remote 1 start"
            sh '''
            ssh -o StrictHostKeyChecking=no root@192.168.1.197 << remotessh
            cd /root/dockerbuild/dep/target
			rm -rf *
			exit
            remotessh
            '''
            echo "remote 1 end"
            echo "remote 2 start"
            sh '''
            cd
            scp -o StrictHostKeyChecking=no agent/workspace/test_pipline/dep/dep-admin/target/dep-admin.jar root@192.168.1.197:/root/dockerbuild/dep/target/
            '''
            echo "remote 2 end"
            echo "remote 3 start"
            sh '''
			ssh -o StrictHostKeyChecking=no root@192.168.1.197 << remotessh
			cd /root/dockerbuild/dep/
			docker build --rm --tag 192.168.1.169:80/jyyun/dep:`date +%Y%m%d` .
			docker push 192.168.1.169:80/jyyun/dep:`date +%Y%m%d`
            exit
            remotessh
            '''
            echo "remote 3 end"
        }
    }
}

终于成功了:
在这里插入图片描述

镜像仓库也有对应的镜像了:
在这里插入图片描述

四、其它
这里其实就是流水线拉取git、在Pod的容器里面编译、传包到一个docker构建的服务器、在docker构建服务器上构建并且推送到镜像仓库的过程
像其它的,如果你想直接部署等,可以按照上面的配置做变化即可

欢迎关注公众号一起探讨:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值