zoukankan      html  css  js  c++  java
  • DevOps之docker自动化部署java应用

    /**docker images|grep “none” |awk ‘{print $3}’|xargs docker rmi --force **/
    java后端服务 build.gradle添加task脚本完成docker镜像的生成、上传镜像文件到harbor仓库等。
    依赖的开发环境:jdk,gradle,harbor,docker-daemon,kubernetes(可选)
    添加的各个task可以单独写成插件,见DevOps-docker-build插件开发
    部署时序图
    1、需要发布的部署单元根目录
    添加Dockerfile文件,据此文件解析部署单元
    检查build.gradle文件是否包含名为pushImage的task

    2、项目根目录settings.gradle添加以下内容,各个部署单元覆写该值

    ext{
    	//优先级低,各模块docker-build时会覆写该参数
    	dockerTag = "dev"
    	dockerGroup = "devops"//与harbor控制台【项目】对应。
    }
    

    3、部署单元build.gradle文件添加以下内容,pushImage名称不能修改,代码中有调用这个task:

    buildscript {
    	dependencies {
    	    //新增以下行....
    		classpath "com.bmuschko:gradle-docker-plugin:3.2.1"
    	}
    }
    //新增以下行....
    apply plugin: 'com.bmuschko.docker-java-application'
    dependencies {
        //新增以下行....
        compile group: 'org.gradle', name: 'gradle-tooling-api', version: '4.3'
    }
    //追加以下内容,docker构建相关task:
    task cleanDocker(type: Delete) {
    	delete fileTree("${buildDir}/docker") {
    		include '**/*'
    	}
    }
    task copyDockerJar(type: Copy, dependsOn: build) {
    	group = "docker"
    	dependsOn cleanDocker
    	from "Dockerfile",jar.archivePath.path
    	into "${project.buildDir}/docker"
    	rename {
    		String fileName -> fileName.replace("-${project.version}", "")
    	}
    }
    docker{
    	registryCredentials {
    		url = 'http://{docker-damon-ip}:5678'
    		username = 'harbor-user'
    		password = 'harbor-user-passwd'
    	}
    }
    import com.bmuschko.gradle.docker.tasks.image.*
    task buildImage(type: DockerBuildImage,dependsOn: copyDockerJar) {
    	def destFile = file("Dockerfile")
    	group = "docker"
    	//inputDir = destFile.parentFile
    	inputDir = file("${project.buildDir}/docker")
    	tags = [
    			"harbor.anji-allways.com/${dockerGroup}/${project.name}:${dockerTag}".toString()
    	]
    }
    task tagImage(type: DockerTagImage,dependsOn: buildImage){
    	imageId = ''
    	repository = "harbor.anji-allways.com/${dockerGroup}/${project.name}"
    	tag = "${dockerTag}"
    	doFirst{
    		imageId = buildImage.getImageId()
    	}
    }
    task pushImage(type: DockerPushImage,dependsOn: tagImage){
    	imageName = tagImage.repository
    	tag =  tagImage.tag
    	doLast{
            delete fileTree("${buildDir}/docker") {
                include '**/*'
            }
        }
    }
    

    手工执行docker任务,测试:

    /*gradle ops-api-feign:pushImage -xTest -PdockerTag=dev1.0.3 -PdockerGroup=devops*/
    /*执行 gradle [subproject]:pushImage -xTest 打包上传镜像,dockerTag,dockerGroup不要修改*/
    
  • 相关阅读:
    炒鸡简单的视频站
    wpf 禁用启用webbroswer右键菜单
    微信小程序怎么获取当前页面的url
    wpf获取webbroswer的两个方法
    WPF使用Webbrowser操作网页的主要代码
    wpf获取目录路径
    c:if标签--判断不为空和其他的值判断
    Mybatis自动生成Xml文件,针对字段类型为text等会默认产生XXXXWithBlobs的方法问题
    Java集合系列之HashMap
    html自动刷新
  • 原文地址:https://www.cnblogs.com/coding-now/p/14660604.html
Copyright © 2011-2022 走看看