Files
docker-registry-aio/Jenkinsfile
T
ysj7705andClaude Opus 5.5 421e8062e6
docker-registry-aio/pipeline/head This commit looks good
Add Jenkinsfile and deploy script (build on NAS checkout, compose up -d).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 10:26:56 +09:00

78 lines
2.2 KiB
Groovy

pipeline {
agent any
environment {
SSH_CONFIG_NAME = 'SEJONG-NAS'
DEPLOY_DIR = '/volume1/docker/docker-registry-aio'
}
options {
timestamps()
disableConcurrentBuilds()
buildDiscarder(logRotator(numToKeepStr: '20'))
}
stages {
stage('Validate') {
steps {
sh '''
set -eu
# No .env in the workspace: compose falls back to defaults, enough to check syntax.
docker compose config -q
sh -n scripts/deploy.sh
'''
}
}
stage('Build') {
steps {
// Same Dockerfile the NAS builds; the agent shares the host daemon,
// so this also warms the build cache for the Deploy stage.
sh '''
set -eu
tag="registry-aio-app-ci:$(printf '%s' "$BUILD_TAG" | tr -c 'A-Za-z0-9_.-' '-' | cut -c1-128)"
trap 'docker image rm "$tag" >/dev/null 2>&1 || true' EXIT
docker build -t "$tag" app
'''
}
}
stage('Deploy') {
when {
allOf {
not { changeRequest() }
anyOf {
branch 'main'
expression {
def branch = env.GIT_BRANCH ?: env.BRANCH_NAME ?: ''
branch == 'main' || branch == 'origin/main' || branch == 'refs/heads/main'
}
}
}
}
steps {
// Keep the existing flow: the NAS checkout is the deployment.
// Fast-forward it to the built commit, then rebuild app and `compose up -d` there.
sshPublisher(
failOnError: true,
publishers: [
sshPublisherDesc(
configName: env.SSH_CONFIG_NAME,
verbose: true,
transfers: [
sshTransfer(
execTimeout: 1800000,
usePty: true,
execCommand: """
sudo -n su -c 'set -eu; export PATH=/usr/local/bin:/usr/bin:/bin; cd "${env.DEPLOY_DIR}"; git fetch -q origin main; git checkout -q main; git merge --ff-only "${env.GIT_COMMIT}"; sh scripts/deploy.sh'
""".stripIndent().trim()
)
]
)
]
)
}
}
}
}