run.sh (3033B)
1 #!/bin/bash 2 set -euo pipefail 3 4 # Jaypore CI run script 5 # --------------------- 6 # This script is executed by Jaypore CI. 7 # 8 # Available environment variables: 9 # JCI_COMMIT - The git commit being tested 10 # JCI_REPO_ROOT - Absolute path to the repository root 11 # JCI_OUTPUT_DIR - Directory for CI artifacts (cwd at start) 12 # 13 # Optional environment variables: 14 # DOCKER_REGISTRY - Registry to push to (e.g. registry.example.com) 15 # DOCKER_USERNAME - Registry login username 16 # DOCKER_PASSWORD - Registry login password 17 # 18 # Any files written to JCI_OUTPUT_DIR become CI artifacts. 19 20 echo "=== Jaypore CI: Build & Publish Docker Image ===" 21 echo "Commit : $JCI_COMMIT" 22 echo "Repo : $JCI_REPO_ROOT" 23 echo "Output : $JCI_OUTPUT_DIR" 24 echo 25 26 cd "$JCI_REPO_ROOT" 27 28 IMAGE_NAME="mysite" 29 SHORT_SHA=$(echo "$JCI_COMMIT" | cut -c1-12) 30 TAG_COMMIT="${IMAGE_NAME}:${SHORT_SHA}" 31 TAG_LATEST="${IMAGE_NAME}:latest" 32 33 # If a registry is configured, prefix the image name 34 if [ -n "${DOCKER_REGISTRY:-}" ]; then 35 TAG_COMMIT="${DOCKER_REGISTRY}/${TAG_COMMIT}" 36 TAG_LATEST="${DOCKER_REGISTRY}/${TAG_LATEST}" 37 fi 38 39 echo "Image tags:" 40 echo " $TAG_COMMIT" 41 echo " $TAG_LATEST" 42 echo 43 44 # ---- 1. Build the Docker image ---- 45 echo "--- Building Docker image ---" 46 docker build \ 47 -f 10-build-publish-docker/Dockerfile \ 48 -t "$TAG_COMMIT" \ 49 -t "$TAG_LATEST" \ 50 . \ 51 2>&1 | tee "$JCI_OUTPUT_DIR/docker-build.log" 52 53 echo 54 echo "Build complete." 55 echo 56 57 # ---- 2. Run tests inside the container ---- 58 echo "--- Running tests inside the container ---" 59 docker run --rm "$TAG_COMMIT" \ 60 python3 manage.py test core --verbosity=2 \ 61 2>&1 | tee "$JCI_OUTPUT_DIR/docker-test.log" 62 63 echo 64 echo "Tests passed." 65 echo 66 67 # ---- 3. Save image metadata ---- 68 echo "--- Saving image info ---" 69 docker inspect "$TAG_COMMIT" > "$JCI_OUTPUT_DIR/image-inspect.json" 70 docker images --filter "reference=${IMAGE_NAME}" \ 71 --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}' \ 72 | tee "$JCI_OUTPUT_DIR/image-info.txt" 73 echo 74 75 # ---- 4. Push to registry (if configured) ---- 76 if [ -n "${DOCKER_REGISTRY:-}" ]; then 77 echo "--- Pushing to $DOCKER_REGISTRY ---" 78 79 if [ -n "${DOCKER_USERNAME:-}" ] && [ -n "${DOCKER_PASSWORD:-}" ]; then 80 echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" \ 81 -u "$DOCKER_USERNAME" --password-stdin \ 82 2>&1 | tee -a "$JCI_OUTPUT_DIR/docker-push.log" 83 fi 84 85 docker push "$TAG_COMMIT" 2>&1 | tee -a "$JCI_OUTPUT_DIR/docker-push.log" 86 docker push "$TAG_LATEST" 2>&1 | tee -a "$JCI_OUTPUT_DIR/docker-push.log" 87 88 echo 89 echo "Push complete." 90 else 91 echo "--- DOCKER_REGISTRY not set, skipping push ---" 92 fi 93 94 echo 95 96 # ---- 5. Summary ---- 97 echo "=== Summary ===" 98 echo "Image : $TAG_COMMIT" 99 echo "Build log : docker-build.log" 100 echo "Test log : docker-test.log" 101 echo "Image metadata : image-inspect.json" 102 echo "Image info : image-info.txt" 103 [ -n "${DOCKER_REGISTRY:-}" ] && echo "Push log : docker-push.log" 104 echo "All artifacts are in $JCI_OUTPUT_DIR"