自动化发布到k8s的Jenkinsfile 模板

描述:

        这是一个完整的 Jenkinsfile 自动化部署模板,实现从 GitLab 拉取 Java 项目代码构建,打包成 Docker 镜像并发布到 K8s,同时通过邮件通知各阶段结果:

pipeline {
    agent any
    environment {
        // GitLab Credentials
        GITLAB_CRED = credentials('GITLAB_CRED')
        // Docker Registry Credentials
        DOCKER_REGISTRY_CRED = credentials('DOCKER_REGISTRY_CRED')
        // Kubernetes Credentials
        K8S_KUBECONFIG_CRED = credentials('K8S_KUBECONFIG_CRED')
        
        // GitLab Repository
        REPO_NAME = 'example-repo'
        REPO_URL = 'https://gitlab.com/username/example-repo.git'
        BRANCH_NAME = 'main'
        
        // Docker Image
        DOCKER_REGISTRY_URL = 'https://example-registry.com'
        DOCKER_IMAGE_NAME = 'example-image'
        DOCKER_IMAGE_TAG = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
        
        // Kubernetes Deployment
        K8S_NAMESPACE = 'default'
        K8S_DEPLOYMENT_NAME = 'example-deployment'
        K8S_CONTAINER_NAME = 'example-container'
    }
    stages {
        stage('Checkout') {
            steps {
                git branch: "${BRANCH_NAME}",
                    credentialsId: "${GITLAB_CRED}",
                    url: "${REPO_URL}"
            }
        }
        stage('Build Java Project') {
            steps {
                sh 'mvn clean install'
            }
        }
        stage('Build Docker Image') {
            steps {
                sh "docker build -t ${DOCKER_REGISTRY_URL}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} ."
            }
        }
        stage('Push Docker Image to Registry') {
            steps {
                withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: "${DOCKER_REGISTRY_CRED}",
                                   usernameVariable: 'DOCKER_REGISTRY_USERNAME', passwordVariable: 'DOCKER_REGISTRY_PASSWORD']]) {
                    sh "docker login --username ${DOCKER_REGISTRY_USERNAME} --password ${DOCKER_REGISTRY_PASSWORD} ${DOCKER_REGISTRY_URL}"
                    sh "docker push ${DOCKER_REGISTRY_URL}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}"
                }
            }
        } 
        stage('Deploy to K8s Cluster') {
            steps {
                withCredentials([[$class: 'KubernetesConfiguration', credentialsId: "${K8S_KUBECONFIG_CRED}",
                                   defaultNamespace: "${K8S_NAMESPACE}", serverUrl: '']]) {
                    sh "kubectl set image deployment/${K8S_DEPLOYMENT_NAME} ${K8S_CONTAINER_NAME}=${DOCKER_REGISTRY_URL}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}"
                }
            }
        } 
    }
    post {
        always {
            emailext (
                subject: "Jenkins Pipeline Build ${currentBuild.result}: ${JOB_NAME}",
                body: "Build ${currentBuild.result}: ${BUILD_URL}",
                recipientProviders: [[$class: 'DevelopersRecipientProvider']],
                to: "admin@qq.com",
                from: "jenkins@mycompany.com"
            )
        }
    }
}

说明:

GITLAB_CRED:GitLab 凭据 ID,用于从 GitLab 仓库拉取代码。
DOCKER_REGISTRY_CRED:Docker Hub 凭据 ID,用于推送 Docker 镜像到 Registry。
K8S_KUBECONFIG_CRED:Kubernetes 凭据 ID,用于将 Docker 镜像部署到 K8s 集群。
REPO_NAME、REPO_URL、BRANCH_NAME:GitLab 仓库名称、URL、分支名称。
DOCKER_REGISTRY_URL、DOCKER_IMAGE_NAME、DOCKER_IMAGE_TAG:Docker 镜像仓库 URL、镜像名称、镜像标签。
K8S_NAMESPACE、K8S_DEPLOYMENT_NAME、K8S_CONTAINER_NAME:K8s 中部署的 Namespace、Deployment 名称、Pod 中容器名称。


以上代码实现了从 GitLab 拉取代码、构建 Java 项目、打包成 Docker 镜像并上传到注册表、以及将 Docker 镜像部署到 K8s。在每个构建阶段结束之后,都会向管理员邮箱 admin@qq.com 发送构建结果邮件。请根据实际情况和需求进行修改

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值