-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJenkinsfile
More file actions
86 lines (79 loc) · 3.53 KB
/
Copy pathJenkinsfile
File metadata and controls
86 lines (79 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
pipeline {
agent any
options {
timestamps()
disableConcurrentBuilds()
}
environment {
SERVER_HOST = 'taehyung@host.docker.internal'
SERVER_BASE = '/home/taehyung/apps/msa-server'
COMPOSE_SERVICE = 'user-service'
REGISTRY_HOST = 'registry.erp007.xyz'
HARBOR_PROJECT = 'erp007'
HEALTH_URL = 'https://erp007.xyz/api/users/health'
}
stages {
stage('Build Check') {
when {
not { branch 'main' }
}
steps {
sh '''
set -eu
docker build -f "$SERVER_BASE/infra/docker/server-service.Dockerfile" .
'''
}
}
stage('Build and Push Image') {
when { branch 'main' }
steps {
withCredentials([usernamePassword(credentialsId: 'harbor-robot-erp007', usernameVariable: 'HARBOR_USERNAME', passwordVariable: 'HARBOR_PASSWORD')]) {
sh '''
set -eu
git_sha="$(git rev-parse --short=12 HEAD)"
image_repo="${REGISTRY_HOST}/${HARBOR_PROJECT}/${COMPOSE_SERVICE}"
image_sha="${image_repo}:${git_sha}"
image_main="${image_repo}:main"
docker_config="$(mktemp -d)"
export DOCKER_CONFIG="$docker_config"
trap 'docker logout "$REGISTRY_HOST" >/dev/null 2>&1 || true; rm -rf "$docker_config"' EXIT
printf '%s' "$HARBOR_PASSWORD" | docker login "$REGISTRY_HOST" -u "$HARBOR_USERNAME" --password-stdin
docker build -f "$SERVER_BASE/infra/docker/server-service.Dockerfile" -t "$image_sha" -t "$image_main" .
docker push "$image_sha"
docker push "$image_main"
'''
}
}
}
stage('Deploy') {
when { branch 'main' }
steps {
withCredentials([usernamePassword(credentialsId: 'harbor-robot-erp007', usernameVariable: 'HARBOR_USERNAME', passwordVariable: 'HARBOR_PASSWORD')]) {
sshagent(credentials: ['erp007-server-ssh']) {
sh '''
set -eu
printf '%s' "$HARBOR_PASSWORD" | ssh -o StrictHostKeyChecking=no "$SERVER_HOST" "docker login '$REGISTRY_HOST' -u '$HARBOR_USERNAME' --password-stdin"
ssh -o StrictHostKeyChecking=no "$SERVER_HOST" "
set -eu
cd '$SERVER_BASE/infra'
git pull --ff-only origin main
./scripts/init-server-secrets.sh
docker compose -f docker-compose.yml -p msa-server config >/tmp/msa-server-compose.yml
docker compose -f docker-compose.yml -p msa-server pull '$COMPOSE_SERVICE'
docker compose -f docker-compose.yml -p msa-server up -d --no-deps '$COMPOSE_SERVICE'
"
'''
}
}
}
}
stage('Health Check') {
when { branch 'main' }
steps {
sh '''
curl -fsS --retry 10 --retry-all-errors --retry-delay 3 --connect-timeout 5 --max-time 10 "$HEALTH_URL" >/dev/null
'''
}
}
}
}