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}'
                """
            }
        }
    }
}
相关推荐
爱吃生蚝的于勒6 分钟前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森18 分钟前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
文艺理科生Owen28 分钟前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
运维·nginx
期待のcode32 分钟前
Redis的主从复制与集群
运维·服务器·redis
翼龙云_cloud34 分钟前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云
纤纡.37 分钟前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
好好学习天天向上~~1 小时前
6_Linux学习总结_自动化构建
linux·学习·自动化
冉佳驹1 小时前
Linux ——— 静态库和动态库的设计与使用
linux·动态库·静态库·fpic
陌上花开缓缓归以1 小时前
linux mtd-utils使用源码分析(ubuntu测试版)
linux·arm开发·ubuntu
wangjialelele2 小时前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发