jenkinsfile实现镜像构建、发布

实现代码打包编译
容器镜像构建
jenkins编译采用docker构建。

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}'
                """
            }
        }
    }
}

### 回答1: JenkinsfileJenkins 持续集成工具中用于定义构建流程的文件。通常,它位于项目的版本控制系统中,例如 Git 中,并在 Jenkins 中进行构建Jenkinsfile 可以使用 Groovy 语言编写,并使用 Jenkins Pipeline DSL(Domain-Specific Language)来定义构建流程。 例如,以下是一个简单的 Jenkinsfile 示例,用于在 Jenkins构建一个 Java 项目: ``` pipeline { agent any stages { stage('Build') { steps { echo 'Building...' sh 'mvn clean install' } } } } ``` 在这个示例中,我们定义了一个流水线,其中包含一个阶段(Build)。在这个阶段中,我们使用 Jenkins Pipeline DSL 中的 `echo` 和 `sh` 步骤来执行 Maven 构建。 ### 回答2: Jenkinsfile是用于定义Jenkins流水线的一种DSL(领域特定语言)。Jenkins流水线是一种持续集成和交付的自动化工具,它允许开发团队将软件构建、测试和部署过程自动化。Jenkinsfile作为Jenkins流水线的声明式脚本,描述了构建和部署的过程以及多个阶段的顺序。 Jenkinsfile的核心部分是pipeline(流水线),它使用一系列的阶段(stage)和步骤(step)来组织和控制流程。阶段代表流水线的不同阶段,如构建、测试和部署;而步骤则表示具体的操作,如检出代码、编译、运行测试和部署到服务器。 通过在Jenkinsfile中编写流水线,可以实现将软件交付流程切分为多个可执行的步骤,并且可以将这些步骤并行执行或串行执行。例如,可以在流水线中定义构建阶段,在这个阶段中下载代码、进行编译、运行测试,并且将构建产物打包。接着,可以定义测试阶段,在这个阶段中运行各种测试,并检查是否通过了所有的测试。最后,可以定义部署阶段,在这个阶段中将构建产物部署到服务器。 Jenkinsfile具有良好的可维护性和扩展性,可以通过多种方式定义和管理。可以将Jenkinsfile存储在源代码仓库中,与代码一起版本控制,并与持续集成和交付的工作流程紧密集成。此外,还可以使用Jenkinsfile的共享库功能,将通用的构建和部署逻辑提取到一个单独的库中,以便在多个流水线中重复使用。 总之,Jenkinsfile是用于定义Jenkins流水线的一种脚本语言,它可以帮助开发团队实现持续集成和交付的自动化,并通过定义流水线的阶段和步骤来组织和控制整个软件交付过程。 ### 回答3: Jenkinsfile是一种用于定义Jenkins流水线的文本文件格式。它是一种可扩展的方式,让我们能够以代码的形式来描述和管理Jenkins构建和部署流程。 Jenkinsfile使用Groovy脚本编写,可以将其与源代码存储在同一个代码库中。这使得我们能够将构建和部署流程与我们的应用程序代码一起进行版本控制,以确保可追踪和可重现的构建过程。 Jenkinsfile提供了一种可读性强和易于维护的方式来定义流水线。我们可以定义流水线的各个阶段,包括构建、测试、发布等,并指定其顺序和依赖关系。此外,我们还可以定义在每个阶段中执行的具体操作,如编译代码、运行单元测试、构建Docker镜像等。 使用Jenkinsfile进行流水线定义的好处是可重用性和可维护性。我们可以编写一个可用于不同项目的通用Jenkinsfile,或者将其分为多个模块来组合成整个流水线。这样,我们就能够在多个项目中重复使用或共享这些模块,从而提高开发效率。 另外,通过将构建过程定义在Jenkinsfile中,我们可以实现流水线的自动化和可持续集成。一旦我们的代码库发生变化,Jenkins会自动检测到这些变化并触发流水线的执行,自动构建、测试和部署我们的应用程序。 总之,Jenkinsfile提供了一种方便、可追踪和可重现的方式来定义和管理Jenkins流水线。通过使用Jenkinsfile,我们能够实现流程自动化、可重用性和可维护性,从而提高应用程序的交付质量和开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值