-
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.
- 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 - Manually create Gradle home dir before starting Docker container to avoid creation of new directory owned by root - Auto cleanup dangling images Resolves #4, #5, #9
- Loading branch information
1 parent
56a7b72
commit c7a108b
Showing
2 changed files
with
112 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,42 @@ | ||
# syntax=docker/dockerfile:1 | ||
|
||
# hadolint global ignore=DL3006 | ||
ARG IMAGE_VERSION=python:3.12.1-alpine3.19 | ||
# hadolint ignore=DL3006 | ||
FROM ${IMAGE_VERSION} | ||
|
||
ARG GRADLE_VERSION=8.5 | ||
RUN apk add --no-cache --progress \ | ||
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 | ||
|
||
VOLUME /home/$USER_NAME/.gradle | ||
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 -v \$HOME/.gradle:/home/$USER_NAME/.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/README.md" \ | ||
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,70 @@ | ||
#!/bin/sh | ||
|
||
main() { | ||
cd "$(dirname "$0")" || exit | ||
setDefaults | ||
IMAGE_NAME=turbobasic/jenkins-library | ||
USER_NAME=appuser | ||
|
||
END_OF_OPTIONS= | ||
while [ -z "$END_OF_OPTIONS" ] && [ -n "$1" ]; do | ||
case "$1" in | ||
--no-build) | ||
NO_BUILD=true | ||
shift;; | ||
--no-run) | ||
NO_RUN=true | ||
shift;; | ||
*) | ||
END_OF_OPTIONS=true | ||
esac | ||
done | ||
|
||
if [ -z "$NO_BUILD" ]; then | ||
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 USER_NAME="$USER_NAME" \ | ||
--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" | ||
fi | ||
|
||
if [ -z "$NO_RUN" ]; then | ||
mkdir --parents "$GRADLE_HOME_DIR" | ||
# shellcheck disable=SC2086 | ||
docker run --rm $DOCKER_OPTIONS \ | ||
--volume "$PWD:/app" \ | ||
--volume "$GRADLE_HOME_DIR:/home/$USER_NAME/.gradle" \ | ||
"$IMAGE_NAME" "$@" | ||
if [ "$CI" != true ] && [ $# = 0 ]; then | ||
echo "Tests execution report: file://$PWD/build/reports/tests/test/index.html" | ||
fi | ||
fi | ||
} | ||
|
||
setDefaults() { | ||
NO_BUILD= | ||
NO_RUN= | ||
DOCKER_OPTIONS= | ||
GRADLE_HOME_DIR="$PWD/.gradle" | ||
|
||
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" | ||
GRADLE_HOME_DIR="$HOME/.gradle" | ||
true | ||
fi | ||
} | ||
|
||
|
||
# Start body of script | ||
set -o errexit | ||
[ "$CI" = "true" ] && set -o xtrace | ||
|
||
main "$@" |