buildscript { repositories { gradlePluginPortal() } dependencies { classpath 'com.bmuschko:gradle-docker-plugin:6.4.0' } } apply plugin: com.bmuschko.gradle.docker.DockerRemoteApiPlugin import com.bmuschko.gradle.docker.tasks.container.DockerCreateContainer import com.bmuschko.gradle.docker.tasks.container.DockerStartContainer import com.bmuschko.gradle.docker.tasks.container.DockerRemoveContainer import com.bmuschko.gradle.docker.tasks.container.DockerRestartContainer import com.bmuschko.gradle.docker.tasks.container.DockerStopContainer import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage import com.bmuschko.gradle.docker.tasks.image.DockerPushImage import com.bmuschko.gradle.docker.tasks.image.DockerRemoveImage import com.bmuschko.gradle.docker.tasks.image.Dockerfile import com.github.dockerjava.api.exception.NotFoundException if (!project.hasProperty('dockerBaseImage')) ext.dockerBaseImage = 'node:latest' if (!project.hasProperty('dockerImageId')) ext.dockerImageId = 'doczilla/doczilla-js-docs:latest' if (!project.hasProperty('dockerContainerId')) ext.dockerContainerId = 'js-docs-doczilla-pro' if (!project.hasProperty('dockerContainerNodeOptions')) ext.dockerContainerNodeOptions = '' if (!project.hasProperty('dockerRegistryUsername')) ext.dockerRegistryUsername = 'doczillapro' if (!project.hasProperty('dockerRegistryPassword')) ext.dockerRegistryPassword = '' if (!project.hasProperty('dnsContainerId')) ext.dnsContainerId = 'dns' def dockerBuildDir = "${buildDir}/docker" task clearDockerFiles(type: Delete) { delete fileTree("${dockerBuildDir}/files").matching { include(['**/*']) } } task prepareDockerFiles(type: Copy) { dependsOn clearDockerFiles dependsOn installDist from("${buildDir}/install/${project.name}") into "${dockerBuildDir}/files" } task createDockerfile(type: Dockerfile) { destFile = project.file("${dockerBuildDir}/Dockerfile") from dockerBaseImage copyFile "./files", '/opt/pro.doczilla.js-docs/' workingDir '/opt/pro.doczilla.js-docs/' defaultCommand 'index.js' exposePort 3000 } task containerStop(type: DockerStopContainer) { targetContainerId dockerContainerId onError { e -> if (e.message != null && !(e instanceof NotFoundException) && !e.message.contains('NotModifiedException')) throw new RuntimeException(e) } } task containerRemove(type: DockerRemoveContainer) { dependsOn containerStop targetContainerId dockerContainerId onError { e -> if (e.message != null && !(e instanceof NotFoundException) && !e.message.contains('NotModifiedException')) throw new RuntimeException(e) } } task imageRemove(type: DockerRemoveImage) { dependsOn containerRemove targetImageId dockerImageId onError { e -> if (e.message != null && !(e instanceof NotFoundException) && !e.message.contains('NotModifiedException')) throw new RuntimeException(e) } } task imageCreate(type: DockerBuildImage) { dependsOn createDockerfile, prepareDockerFiles, imageRemove inputDir = project.file(dockerBuildDir) images.add dockerImageId } task imagePush(type: DockerPushImage) { dependsOn imageCreate images.add dockerImageId registryCredentials { username = dockerRegistryUsername password = dockerRegistryPassword } } task containerCreate(type: DockerCreateContainer) { dependsOn imageCreate targetImageId dockerImageId containerId = dockerContainerId containerName = dockerContainerId hostConfig.network = 'doczilla' hostConfig.autoRemove = false hostConfig.restartPolicy = 'always' } task containerStart(type: DockerStartContainer) { dependsOn containerCreate targetContainerId dockerContainerId } task dnsRestart(type: DockerRestartContainer) { targetContainerId dnsContainerId }