-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build: Add Dockerfile and wrapper script for dev environment
- Add Dockerfile - Add runDevEnvironment.sh for building Docker image and executing build in the container - Allow to provide --no-build and --no-run options to the wrapper script - Enable caching of gradle dependencies in the host - Auto cleanup dangling images Resolves #4, #5, #9
- Loading branch information
1 parent
0d4b9ac
commit ab3d2f3
Showing
2 changed files
with
137 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# syntax=docker/dockerfile:1 | ||
|
||
# hadolint global ignore=DL3006 | ||
ARG IMAGE_VERSION=python:3.12.1-alpine3.19 | ||
FROM ${IMAGE_VERSION} | ||
|
||
ARG GRADLE_VERSION=8.5 | ||
RUN apk add --no-cache \ | ||
gradle=~$GRADLE_VERSION \ | ||
openjdk11-jdk \ | ||
shadow | ||
|
||
# Add user with the same UID/GID as the user who invokes the build | ||
ARG USER_NAME=appuser | ||
ARG UID=1000 | ||
ARG GID=1000 | ||
RUN groupadd --non-unique --gid $GID $USER_NAME && \ | ||
useradd --non-unique --gid $GID --uid $UID --create-home --shell /bin/sh $USER_NAME | ||
USER $USER_NAME | ||
|
||
WORKDIR /app | ||
|
||
CMD ["./gradlew", "--info", "--no-daemon", "clean", "test"] | ||
|
||
# Metadata | ||
ARG BUILD_DATE | ||
ARG IMAGE_NAME | ||
ARG IMAGE_PATCH_VER=0 | ||
ARG VCS_REF=none | ||
LABEL \ | ||
org.label-schema.build-date="$BUILD_DATE" \ | ||
org.label-schema.docker.cmd="docker run --rm -it -v \"\$PWD\":/app --env GRADLE_USER_HOME=/app/.gradle turbobasic/jenkins-library" \ | ||
org.label-schema.description="Build image, Gradle $GRADLE_VERSION" \ | ||
org.label-schema.name="$IMAGE_NAME" \ | ||
org.label-schema.schema-version="1.0" \ | ||
org.label-schema.url="https://github.com/turboBasic/JenkinsLibrary/blob/main/Dockerfile" \ | ||
org.label-schema.vcs-ref="$VCS_REF" \ | ||
org.label-schema.vcs-url="https://github.com/turboBasic/JenkinsLibrary" \ | ||
org.label-schema.vendor="turboBasic" \ | ||
org.label-schema.version="$IMAGE_PATCH_VER" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
#!/bin/sh | ||
|
||
main() { | ||
cd "$(dirname "$0")" || exit | ||
setDefaults | ||
[ $# -eq 0 ] && set -- help | ||
|
||
case "$1" in | ||
docker) | ||
shift | ||
buildDocker "$@" | ||
;; | ||
help) | ||
shift | ||
help "$@" | ||
;; | ||
sh) | ||
shift | ||
runShell "$@" | ||
;; | ||
test) | ||
shift | ||
buildDocker | ||
runDocker "$@" | ||
;; | ||
*) | ||
echo "Error: unknown command $1" | ||
help | ||
exit 1 | ||
esac | ||
} | ||
|
||
buildDocker() { | ||
warnIfIgnoredArguments "$@" | ||
|
||
docker build --rm --tag "$IMAGE_NAME":latest \ | ||
--build-arg UID="$(id -u)" --build-arg GID="$(id -g)" \ | ||
--build-arg VCS_REF="$VCS_REF" \ | ||
--build-arg IMAGE_NAME="$IMAGE_NAME" \ | ||
--build-arg BUILD_DATE="$(date -u "+%Y-%m-%d %H:%M")" \ | ||
. | ||
docker image prune --force --filter "label=org.label-schema.name=$IMAGE_NAME" | ||
} | ||
|
||
runDocker() { | ||
# shellcheck disable=SC2086 | ||
docker run --rm $DOCKER_OPTIONS \ | ||
--volume "$PWD:/app" \ | ||
--env GRADLE_USER_HOME=/app/.gradle \ | ||
"$IMAGE_NAME" $DOCKER_COMMAND "$@" | ||
|
||
if [ "$CI" != true ] && [ $# = 0 ]; then | ||
echo "Tests execution report: file://$PWD/build/reports/tests/test/index.html" | ||
fi | ||
} | ||
|
||
runShell() { | ||
warnIfIgnoredArguments "$@" | ||
|
||
DOCKER_COMMAND="/bin/sh" | ||
buildDocker | ||
runDocker | ||
} | ||
|
||
help() { | ||
warnIfIgnoredArguments "$@" | ||
|
||
awk '$0 == "<!-- begin of help -->", $0 == "<!-- end of help -->"' README.md \ | ||
| grep -vF '<!--' | ||
} | ||
|
||
warnIfIgnoredArguments() { | ||
[ $# -gt 0 ] && echo "Warning: command arguments < $* > are ignored" | ||
true | ||
} | ||
|
||
setDefaults() { | ||
IMAGE_NAME=turbobasic/jenkins-library | ||
DOCKER_OPTIONS= | ||
DOCKER_COMMAND="./gradlew --info --no-daemon clean test" | ||
|
||
VCS_REF="$(git rev-parse --abbrev-ref HEAD 2>/dev/null)/$(git rev-parse --short HEAD 2>/dev/null)" | ||
if [ "$VCS_REF" = "/" ]; then | ||
VCS_REF="not-in-version-control" | ||
fi | ||
if [ "$CI" != true ]; then | ||
DOCKER_OPTIONS="--interactive --tty" | ||
fi | ||
true | ||
} | ||
|
||
|
||
# Start body of script | ||
set -o errexit | ||
[ "$CI" = "true" ] && set -o xtrace | ||
|
||
main "$@" |