Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,15 @@ ext {
postgresContainerVersionMigration = '15.8'
postgresContainerVersionCurrent = '16.9'

// Docker Variables
// All variables that start with 'dockerBuildParam+' will all be passed to the 'docker build' command
dockerBuildParam_BASEIMAGE_HUB_DOCKER_COMMON = 'blackducksoftware/hub-docker-common:1.0.7'
dockerBuildParam_BASEIMAGE_BLACKDUCK_ALERT = 'alpine:3.20'
dockerBuildParam_BASEIMAGE_BLACKDUCK_ALERT_DB_MIGRATION = 'postgres:' + postgresContainerVersionMigration + '-alpine'
dockerBuildParam_BASEIMAGE_BLACKDUCK_ALERT_DB = 'postgres:' + postgresContainerVersionCurrent + '-alpine'
dockerBuildParam_POSTGRES_MIGRATION_VERSION = postgresContainerVersionMigration
dockerBuildParam_POSTGRESIMAGEVERSION_MIGRATION = 'postgres:' + postgresContainerVersionMigration + '-alpine'
dockerBuildParam_POSTGRESIMAGEVERSION = 'postgres:' + postgresContainerVersionCurrent + '-alpine'
dockerBuildParam_BASEIMAGE_BLACKDUCK_ALERT_RABBITMQ = 'rabbitmq:3.13-alpine'

// General Docker Variables
dockerStagingDirectory = project.buildDir.toString() + '/docker-staging'
baseDockerDirectory = project.projectDir.toString() + '/docker'
dockerCleanStagingAreaDirectoryStageName = 'dockerCleanStagingAreaDirectory'
Expand Down
33 changes: 27 additions & 6 deletions buildSrc/docker.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,26 @@ String dockerPublishAllImages_DH = rootProject.ext.dockerPublishAllImages_DHStag
String dockerPublishAllImages_ART = rootProject.ext.dockerPublishAllImages_ARTStageName
String dockerPublishAllImages = rootProject.ext.dockerPublishAllImagesStageName

ext.createDockerRemoveTask = { removeTaskName, removeGroupName, removeImageName, primaryDependencyTaskName ->
project.tasks.create(name: removeTaskName, type: Exec, group: removeGroupName, description: "Docker remove tagged Artifactory image. <sub-task>") {
ext.createDockerRemoveTask = { removeTaskName, removeGroupName, removeImageNames, primaryDependencyTaskName ->
project.tasks.create(name: removeTaskName, type: Exec, group: removeGroupName, description: "Docker remove tagged Docker images. <sub-task>") {
outputs.upToDateWhen { false }

ignoreExitValue = true
errorOutput = new ByteArrayOutputStream()

commandLine 'docker', 'image', 'rm', removeImageName
def imageList = removeImageNames as List<String>
def command = ['docker', 'image', 'rm']
command.addAll(imageList)

logger.lifecycle("Pre-removing the following images: " + imageList)
commandLine command

doLast {
String stdErr = errorOutput.toString()

if (stdErr?.trim() && !stdErr.contains("Deleted: ")) {
if (stdErr.contains("No such image")) {
logger.lifecycle("Image does not exist, continuing.")
logger.lifecycle("One or more images did not need to be removed, continuing.")
} else {
throw new GradleException("${stdErr}")
}
Expand Down Expand Up @@ -102,10 +107,26 @@ dockerImagesToBuild.each { imageName ->
imageTaskNameSuffix += token.substring(0, 1).toUpperCase() + token.substring(1).toLowerCase()
}

// Identify base images that should be pre-removed
def imageNamesToRemove = []
imageNamesToRemove.add(fullDockerImageName)

def dockerfile = new File(baseDockerDirectory + '/' + imageName + '/Dockerfile')
dockerfile.eachLine { line ->
def matcher = line =~ /^FROM\s+\$\{([^}]+)\}/
if (matcher.find()) {
def gradlePropertyName = "dockerBuildParam_${matcher.group(1)}".toString()
if (!rootProject.ext.properties.containsKey(gradlePropertyName)) {
throw new GradleException("Missing Gradle property: ${gradlePropertyName}")
}
imageNamesToRemove << rootProject.ext.properties[gradlePropertyName]
}
}

String dockerImageRemoveTaskName = "dockerRemove${imageTaskNameSuffix}"
String dockerImageBuildTaskName = "dockerBuild${imageTaskNameSuffix}"

ext.createDockerRemoveTask(dockerImageRemoveTaskName, 'Docker', fullDockerImageName, dockerRemoveAllImages)
ext.createDockerRemoveTask(dockerImageRemoveTaskName, 'Docker', imageNamesToRemove, dockerRemoveAllImages)

project.tasks.create(name: dockerImageBuildTaskName, type: Exec, dependsOn: [dockerSetupStagingAreaDirectory], group: 'Docker', description: "Build docker image. <sub-task>") {
outputs.upToDateWhen { false }
Expand Down Expand Up @@ -202,5 +223,5 @@ dockerImagesToBuild.each { imageName ->
}
project.tasks.findByName(dockerPublishAllImages_ART).dependsOn project.tasks.findByName(dockerImagePublishARTTaskName)

ext.createDockerRemoveTask(dockerImageRemoveTagARTaskName, 'Docker_Artifactory', artifactoryDockerImageName, dockerRemoveAllImages)
ext.createDockerRemoveTask(dockerImageRemoveTagARTaskName, 'Docker_Artifactory', [artifactoryDockerImageName], dockerRemoveAllImages)
}
11 changes: 5 additions & 6 deletions docker/blackduck-alert-db/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
# The ARG for the FROM image comes from Gradle. It is based off of postgresContainerVersion,
# The ARG's for the FROM images come from Gradle. Base image variables are set in the root build.gradle,
# and used in buildSrc/docker.gradle
ARG POSTGRESIMAGEVERSION_MIGRATION="default"
ARG POSTGRESIMAGEVERSION="default"
ARG BASEIMAGE_BLACKDUCK_ALERT_DB_MIGRATION="default"
ARG BASEIMAGE_BLACKDUCK_ALERT_DB="default"

FROM ${POSTGRESIMAGEVERSION_MIGRATION} AS old

FROM ${POSTGRESIMAGEVERSION}
FROM ${BASEIMAGE_BLACKDUCK_ALERT_DB_MIGRATION} AS old
FROM ${BASEIMAGE_BLACKDUCK_ALERT_DB}

ARG VERSION
ARG COMMITHASH
Expand Down
9 changes: 7 additions & 2 deletions docker/blackduck-alert-rabbitmq/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
FROM blackducksoftware/hub-docker-common:1.0.7 AS docker-common
FROM rabbitmq:3.13-alpine
# The ARG's for the FROM images come from Gradle. Base image variables are set in the root build.gradle,
# and used in buildSrc/docker.gradle
ARG BASEIMAGE_HUB_DOCKER_COMMON="default"
ARG BASEIMAGE_BLACKDUCK_ALERT_RABBITMQ="default"

FROM ${BASEIMAGE_HUB_DOCKER_COMMON} AS docker-common
FROM ${BASEIMAGE_BLACKDUCK_ALERT_RABBITMQ}

ARG VERSION
ARG COMMITHASH
Expand Down
9 changes: 7 additions & 2 deletions docker/blackduck-alert/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
FROM blackducksoftware/hub-docker-common:1.0.7 AS docker-common
FROM alpine:3.20
# The ARG's for the FROM images come from Gradle. Base image variables are set in the root build.gradle,
# and used in buildSrc/docker.gradle
ARG BASEIMAGE_HUB_DOCKER_COMMON="default"
ARG BASEIMAGE_BLACKDUCK_ALERT="default"

FROM ${BASEIMAGE_HUB_DOCKER_COMMON} AS docker-common
FROM ${BASEIMAGE_BLACKDUCK_ALERT}

ARG VERSION
ARG COMMITHASH
Expand Down