Jenkins 与 Kubernetes 协同工作实战指南
一 架构与优势
二 快速落地步骤
三 示例流水线
pipeline {
agent {
kubernetes {
label 'jenkins-agent'
yaml '''
apiVersion: v1
kind: Pod
spec:
containers:
- name: maven
image: maven:3.8.1-jdk-8
command: ['cat']
tty: true
- name: docker
image: docker:24-dind
securityContext:
privileged: true
volumeMounts:
- name: docker-sock
mountPath: /var/run/docker.sock
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock
'''
}
}
environment {
IMAGE_REPO = 'your-registry/your-namespace/app'
IMAGE_TAG = "${env.BUILD_NUMBER}-${env.GIT_COMMIT.take(7)}"
K8S_NS = 'dev'
}
stages {
stage('Build') {
steps {
container('maven') {
sh 'mvn -B -DskipTests clean package'
}
}
}
stage('Unit Test') {
steps {
container('maven') {
sh 'mvn test'
}
}
post {
always {
junit '**/target/surefire-reports/*.xml'
}
}
}
stage('Build & Push Image') {
steps {
withCredentials([usernamePassword(credentialsId: 'dockerhub-creds', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) {
container('docker') {
sh '''
docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
docker build -t $IMAGE_REPO:$IMAGE_TAG .
docker push $IMAGE_REPO:$IMAGE_TAG
'''
}
}
}
}
stage('Deploy to K8s') {
steps {
container('docker') {
// 方式A:kubectl 直接替换镜像(示例)
sh '''
kubectl set image deployment/app app=$IMAGE_REPO:$IMAGE_TAG -n $K8S_NS
kubectl rollout status deployment/app -n $K8S_NS
'''
// 方式B:Helm(取消注释并按需调整)
// sh 'helm upgrade --install app ./charts/app -n $K8S_NS --set image.repository=$IMAGE_REPO --set image.tag=$IMAGE_TAG --wait'
}
}
}
}
post {
success {
echo "Deployed $IMAGE_REPO:$IMAGE_TAG to $K8S_NS"
}
failure {
echo "Pipeline failed. Check logs for details."
}
}
}
四 多环境与发布策略
五 安全与最佳实践
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。