jenkinsfile实现镜像构建、发布

实现代码打包编译

容器镜像构建

jenkins编译采用docker构建。

遇到问题:

1.需要限制docker 容器的内存和cpu

docker {

image 'ccr.ccs.tencentyun.com/libary/maven:3.6.3-jdk-8'

args "-v ${WORKSPACE}:/workspace --memory='2048m' --cpus='1'"

}

2.jenkins构建需要限制构建时间。避免job任务构建时间太长

timeout(time: 30, unit: 'MINUTES') { //限制30分钟的构建时间。超过30分钟自动断开

bash 复制代码
pipeline {
    agent any
    parameters {
     choice(
            name: 'GIT_BUILD_REF',
            choices: ['test', 'master'],
            description: 'Select the Git branch or commit to build'
        )
    }
    environment {
        GIT_REPO_URL = "http://192.168.1.2/djb/djb-cloud.git"
        HARBOR_REGISTRY = "192.168.2.1:5000"
        HARBOR_HOST= "example.com"
        DOCKER_BUILD_CONTEXT = './module-system/djb-module-system-biz'
        CODING_DOCKER_IMAGE_NAME = 'ops/djb-module-system'
        DOCKERFILE_PATH = './module-system/djb-module-system-biz/Dockerfile'
        HARBOR_CREDENTIALS_ID = "fd3362aa-xx"   //凭据id
        CREDENTIALS_ID = "0ee6d913-xxx"
        
		DEPLOYMENT_NAME = "djb-module-system-deploy"
		CONTAINER_NAME = "djb-module-system-deploy"
		WEBHOOK_URL ="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx123"
    }
    stages {
        stage('检出') {
            steps {
                checkout([$class: 'GitSCM',
                branches: [[name: "${params.GIT_BUILD_REF}"]],
                userRemoteConfigs: [[
                    url:  "${env.GIT_REPO_URL}",
                    credentialsId: "${env.CREDENTIALS_ID}"
                ]]])
                script {
                    // 获取当前的Git提交ID
                    env.GIT_COMMIT_ID = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
                    // 获取当前时间
                    env.CURRENT_TIME = sh(script: 'date +%Y%m%d%H%M%S', returnStdout: true).trim()
                    // 生成版本号
                    env.DOCKER_IMAGE_VERSION = "${params.GIT_BUILD_REF}-${env.GIT_COMMIT_ID}-${env.CURRENT_TIME}"
                }	
            }
        }
        stage('build') {
		     agent {
                docker {
                    image 'ccr.ccs.tencentyun.com/libary/maven:3.6.3-jdk-8'
                     args "-v ${WORKSPACE}:/workspace   --memory='2048m' --cpus='1'"
                }
            }
            steps {
                script {
                    timeout(time: 30, unit: 'MINUTES') {
                    sh "cd /workspace && ls -l"
                    sh 'pwd'
                    sh "ls -l && mvn -v"
                    sh 'cd /workspace && pwd && mvn clean package -Dmaven.test.skip=true'
                    }
                }     
            }
        }
      
        stage('构建镜像并推送到 Harbor Docker 制品库') {
            steps {
                script {
                    // 使用 withRegistry 来处理 HTTP 登录
                    
                    docker.withRegistry("https://${env.HARBOR_REGISTRY}", "${env.HARBOR_CREDENTIALS_ID}") {
                    def dockerImage = docker.build("${env.CODING_DOCKER_IMAGE_NAME}:${env.DOCKER_IMAGE_VERSION}", "-f ${env.DOCKERFILE_PATH} ${env.DOCKER_BUILD_CONTEXT}")
                    dockerImage.push()
					env.IMAGE_NAME = "${env.HARBOR_HOST}/${env.CODING_DOCKER_IMAGE_NAME}:${env.DOCKER_IMAGE_VERSION}"	
                    }
                }
            }
        }
  stage('部署到 Kubernetes') {
            when {
                expression { return params.GIT_BUILD_REF == 'test' }
            }
            steps {
                script {
                    // 使用 withKubeConfig 来处理 Kubernetes 配置
                    withKubeConfig(credentialsId: 'tke-cluster-credentials') {
                        sh "kubectl set image deployment/${env.DEPLOYMENT_NAME} ${env.CONTAINER_NAME}=${env.IMAGE_NAME} --record"
                    }
                }
            }
        }
		
		
		
    }
	   post {
        success {
            script {
                def message = """{
                    "msgtype": "text",
                    "text": {
                        "content": "Jenkins 部署成功!\\n部署镜像号: ${env.IMAGE_NAME}\\n部署状态:\\n${env.DEPLOYMENT_NAME}:成功"
                    }
                }"""
                sh """
                curl -X POST ${WEBHOOK_URL} \
                -H 'Content-Type: application/json' \
                -d '${message}'
                """
            }
        }
        failure {
            script {
                def message = """{
                    "msgtype": "text",
                    "text": {
                        "content": "Jenkins 部署失败!\\n部署镜像号: ${env.IMAGE_NAME}\\n部署状态:\\n${env.DEPLOYMENT_NAME}:失败"
                    }
                }"""
                sh """
                curl -X POST ${WEBHOOK_URL} \
                -H 'Content-Type: application/json' \
                -d '${message}'
                """
            }
        }
    }
}
相关推荐
苹果醋31 小时前
idea环境下vue2升级vue3
java·运维·spring boot·mysql·nginx
互联网资讯1 小时前
本地生活服务项目有哪些:如何利用本地生活市场,打开线下流量!
大数据·运维·人工智能·产品运营·生活
c语言中的小小白2 小时前
Linux之进程概念
linux·运维·服务器
去往火星2 小时前
ubuntu22.04取消开机输入密码(实测)
linux·运维·服务器
极客先躯2 小时前
Hadoop-HDFS-core-site.xml,hdfs-site.xml,yarn-site.xml,krb5.conf 都是做什么的?
xml·运维·hadoop·hdfs
万界星空科技3 小时前
MES系统实现制造业生产自动化、智能化与透明化
运维·经验分享·科技·5g·能源·制造·业界资讯
DuoRuaiMiFa3 小时前
Replit Agent:AI驱动的全自动化软件开发革命
运维·人工智能·自动化
SizeTheMoment3 小时前
网络原理-数据链路层
linux·服务器·网络
day3ZY3 小时前
怎么查看网站是否被谷歌收录,查看网站是否被搜索引擎收录5个方法与步骤
运维·前端·搜索引擎
Java追光着3 小时前
Linux防火墙配置绿色端口,解决无法访问java服务的问题
java·linux·运维