Files

73 lines
1.9 KiB
Groovy

pipeline {
agent {
kubernetes {
yaml '''
apiVersion: v1
kind: Pod
spec:
serviceAccountName: jenkins-deployer
containers:
- name: gradle
image: eclipse-temurin:21-jdk
command: ["sleep"]
args: ["99d"]
- name: kaniko
image: gcr.io/kaniko-project/executor:debug
command: ["sleep"]
args: ["99d"]
volumeMounts:
- name: docker-config
mountPath: /kaniko/.docker
- name: kubectl
image: alpine/k8s:1.31.0
command: ["sleep"]
args: ["99d"]
volumes:
- name: docker-config
secret:
secretName: harbor-registry-cred
items:
- key: .dockerconfigjson
path: config.json
'''
}
}
environment {
IMAGE = "harbor.led.ectech.co.kr/cstest/cstest:${env.BUILD_NUMBER}"
}
stages {
stage('Build') {
steps {
container('gradle') {
sh 'chmod +x gradlew && ./gradlew build --console=plain -x test'
}
}
}
stage('Image') {
steps {
container('kaniko') {
sh '''
/kaniko/executor \
--context `pwd` \
--dockerfile Dockerfile \
--destination ${IMAGE}
'''
}
}
}
stage('Deploy') {
steps {
container('kubectl') {
sh '''
sed "s#IMAGE_PLACEHOLDER#${IMAGE}#" k8s/deployment.yaml > /tmp/deployment.yaml
kubectl apply -f /tmp/deployment.yaml
kubectl apply -f k8s/service.yaml
kubectl apply -f k8s/ingress.yaml
kubectl -n apps rollout status deployment/cstest --timeout=90s
'''
}
}
}
}
}