描述:
这是一个完整的 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 发送构建结果邮件。请根据实际情况和需求进行修改