作者: Ju4t
pipeline {
agent none
stages {
stage('Clone Code') {
agent {
label 'master'
}
steps {
echo "1.Git Clone Code"
git url: "https://code.aliyun.com/Ju4t/helloword-springboot.git"
}
}
stage('Maven Build') {
agent {
docker {
image 'maven:3-alpine'
args '-v /Users/ju4t/.m2:/root/.m2'
}
}
steps {
echo "2.Maven Build Stage"
sh 'mvn -B clean package -Dmaven.test.skip=true'
}
}
stage('Image Build') {
agent {
label 'master'
}
steps {
echo "3.Image Build Stage"
sh 'docker build -f Dockerfile --build-arg jar_name=target/web-0.0.1-SNAPSHOT.jar -t devops-web:${BUILD_ID} . '
sh 'docker tag devops-web:${BUILD_ID} registry.cn-beijing.aliyuncs.com/ju4t/devops-web:${BUILD_ID}'
}
}
stage('Push') {
agent {
label 'master'
}
steps {
echo "4.Push Docker Image Stage"
sh "docker login --username=jingxiaobing registry.cn-beijing.aliyuncs.com -p 密码"
sh "docker push registry.cn-beijing.aliyuncs.com/ju4t/devops-web:${BUILD_ID}"
}
}
}
}
node('jenkins-slave') {
container('jnlp-kubectl') {
stage('Clone YAML') {
echo "5. Git Clone YAML To Slave"
git url: "https://code.aliyun.com/Ju4ts/devops-springboot.git"
}
stage('YAML') {
echo "6. Change YAML File Stage"
sh 'sed -i "s#{VERSION}#${BUILD_ID}#g" ./jenkins/scripts/spring-api.yaml'
}
stage('Deploy') {
echo "7. Deploy To K8s Stage"
sh 'kubectl apply -f ./jenkins/scripts/spring-api.yaml'
}
}
}
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-api-dp
spec:
replicas: 2
selector:
matchLabels:
app: spring-api
template:
metadata:
labels:
app: spring-api
spec:
containers:
- name: spring-api
image: registry.cn-beijing.aliyuncs.com/ju4t/devops-web:{VERSION}
ports:
- name: http
containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: spring-api-svc
spec:
selector:
app: spring-api
ports:
- name: http
targetPort: 8080
port: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: spring-api-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: spring-api-svc
port:
number: 8080
# - path: /abc
# pathType: Prefix
# backend:
# service:
# name: abc-svc
# port:
# number: 8080