Docker layer cache is smart enough to rebuild when source changes Speeds up builds significantly by reusing package installation layers
76 lines
2.5 KiB
Bash
Executable File
76 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build Jellyfin Docker image on TrueNAS
|
|
# Usage: ./build_truenas.sh <truenas-host> [tag]
|
|
# Example: ./build_truenas.sh 192.168.79.249 10.11.5-custom
|
|
|
|
set -e
|
|
|
|
TRUENAS_HOST="${1}"
|
|
IMAGE_TAG="${2:-latest}"
|
|
BUILD_DIR="/tmp/jellyfin-build-$$"
|
|
|
|
if [ -z "$TRUENAS_HOST" ]; then
|
|
echo "Usage: $0 <truenas-host> [tag]"
|
|
echo "Example: $0 192.168.79.249 10.11.5-custom"
|
|
exit 1
|
|
fi
|
|
|
|
echo "=================================================="
|
|
echo "Building Jellyfin on TrueNAS"
|
|
echo "=================================================="
|
|
echo "Host: $TRUENAS_HOST"
|
|
echo "Tag: $IMAGE_TAG"
|
|
echo "=================================================="
|
|
|
|
# Create temp build directory on TrueNAS
|
|
echo "Creating build directory on TrueNAS..."
|
|
ssh -A root@${TRUENAS_HOST} "mkdir -p ${BUILD_DIR}"
|
|
|
|
# Sync repository to TrueNAS (excluding submodules, will init on TrueNAS)
|
|
echo "Syncing repository to TrueNAS..."
|
|
rsync -avz --progress \
|
|
--exclude='node_modules' \
|
|
--exclude='bin' \
|
|
--exclude='obj' \
|
|
--exclude='jellyfin-web' \
|
|
--exclude='jellyfin-server' \
|
|
./ root@${TRUENAS_HOST}:${BUILD_DIR}/
|
|
|
|
# Update submodule URLs to use IP address and initialize on TrueNAS
|
|
echo "Initializing submodules on TrueNAS..."
|
|
ssh -A root@${TRUENAS_HOST} "cd ${BUILD_DIR} && \
|
|
git config --global --add safe.directory ${BUILD_DIR} && \
|
|
git config submodule.jellyfin-server.url ssh://git@192.168.79.249:222/admin/jellyfin.git && \
|
|
git config submodule.jellyfin-web.url ssh://git@192.168.79.249:222/admin/jellyfin-web.git && \
|
|
git submodule update --init --recursive"
|
|
|
|
# Build Docker image on TrueNAS
|
|
echo "Building Docker image on TrueNAS..."
|
|
ssh -A root@${TRUENAS_HOST} "cd ${BUILD_DIR} && docker build \
|
|
--build-arg DOTNET_VERSION=9.0 \
|
|
--build-arg PACKAGE_ARCH=amd64 \
|
|
--build-arg DOTNET_ARCH=x64 \
|
|
--build-arg IMAGE_ARCH=amd64 \
|
|
--build-arg TARGET_ARCH=amd64 \
|
|
--build-arg JELLYFIN_VERSION=${IMAGE_TAG} \
|
|
-t jellyfin:${IMAGE_TAG} \
|
|
--file docker/Dockerfile ."
|
|
|
|
# Tag image
|
|
echo "Tagging image..."
|
|
ssh -A root@${TRUENAS_HOST} "docker tag jellyfin:${IMAGE_TAG} jellyfin:latest"
|
|
|
|
# Cleanup
|
|
echo "Cleaning up build directory..."
|
|
ssh -A root@${TRUENAS_HOST} "rm -rf ${BUILD_DIR}"
|
|
|
|
echo "=================================================="
|
|
echo "✓ Build complete!"
|
|
echo "=================================================="
|
|
echo "Image: jellyfin:${IMAGE_TAG}"
|
|
echo ""
|
|
echo "To run the container:"
|
|
echo " ssh root@${TRUENAS_HOST}"
|
|
echo " docker run -d jellyfin:${IMAGE_TAG}"
|
|
echo "=================================================="
|