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:alpine' if (!project.hasProperty('dockerImageId')) ext.dockerImageId = 'crazydoctor/crazydoctor-dzjsdocs:latest' if (!project.hasProperty('dockerContainerId')) ext.dockerContainerId = 'dzjsdocs-crazydoctor-org' 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" def dockerVolumesDir = '/opt/docker/volumes' def contBinds = [ "${dockerVolumesDir}/${dockerContainerId}/.doczilla_js_docs": '/root/.doczilla_js_docs' ] task clearDockerFiles(type: Delete) { delete fileTree("${dockerBuildDir}/files").matching { include(['**/*']) } } task copyGitCredentials(type: Copy) { dependsOn installDist from("${buildDir}") include ".git*" into "${buildDir}/install/${project.name}" } task copyPackageJson(type: Copy) { from("${buildDir}") include "package.json" into "${buildDir}/install/${project.name}" } task prepareDockerFiles(type: Copy) { dependsOn clearDockerFiles dependsOn copyGitCredentials dependsOn copyPackageJson from("${buildDir}/install/${project.name}") exclude "**/node_modules/**" into "${dockerBuildDir}/files" } task createDockerfile(type: Dockerfile) { destFile = project.file("${dockerBuildDir}/Dockerfile") from dockerBaseImage runCommand "apk update" runCommand "apk add git" runCommand "apk add --no-cache sqlite-libs" runCommand "mkdir -p /root/.doczilla_js_docs" copyFile './files/.gitconfig', '/root/' copyFile './files/.git-credentials', '/root/' copyFile "./files", '/opt/org.crazydoctor.dzjsdocs/' workingDir '/opt/org.crazydoctor.dzjsdocs/' runCommand "npm install" defaultCommand 'node', 'index.js' exposePort 9080 } 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.binds = contBinds hostConfig.network = 'doczilla' hostConfig.autoRemove = false hostConfig.restartPolicy = 'always' } task containerStart(type: DockerStartContainer) { dependsOn containerCreate targetContainerId dockerContainerId } task dnsRestart(type: DockerRestartContainer) { targetContainerId dnsContainerId }