gradle-docker
gradle-docker copied to clipboard
How to set buildArgs from the task
Use case: I'm building a docker image where I install packages from AWS CodeArtifact repository. Authentication to CodeArtifact is based on the token that expires every X minutes.
Dockerfile:
FROM python:3.9.10-slim
ARG CODEARTIFACT_PIP_URL
COPY python/ ./
RUN apt-get update \
&& apt-get install -y gcc python3-dev libev-dev
RUN python -m pip install --upgrade pip
RUN pip install -r requirements.txt --extra-index-url=${CODEARTIFACT_PIP_URL}
EXPOSE 8080
CMD [ "python", "./run.py" ]
So I must pass codeArtifact url (that contains token) as a buildArg to Dockerfile. I have a task that generates a url as below:
task buildArgsOverride {
group docker
description "Set buildArgs of docker from task instead of project configuration phase"
doLast {
println("${docker.buildArgs}")
String token = "aws codeartifact get-authorization-token --domain ${image.codeArtifactDomain} --domain-owner 123456 --query authorizationToken --output text".execute().text
String url = "https://aws:${token}@domain-123456.d.codeartifact.eu-central-1.amazonaws.com/pypi/store/simple"
def newBuildArgs = [:]
docker.getBuildArgs().each { newBuildArgs.put("$it.key","$it.value")}
newBuildArgs.put("CODEARTIFACT_PIP_URL",url)
docker.buildArgs(newBuildArgs)
println("${docker.buildArgs}")
}
}
tasks.getByName("docker").dependsOn("buildArgsOverride")
Running a task returns correct result however issuing 'gradle docker' doesn't pass buildArgs to docker build command. Any idea how to solve this? I don't want to set it up in configuration block docker { } because it will run on every gradle run.