关于docker:基于Docker-Jenkins-Pipeline的CICD实践

基于Windows+Docker的单机版测试环境实际。
我的项目不大,开发周期不长。后期配置好,后续应用整体比拟丝滑。

0. 简介

应用SpringBoot3 + JDK17搭建的我的项目,构建工具应用Gradle 8.0

波及到的知识点

  • Docker, Dockerfile, Docker-Compose
  • Gitlab
  • Jenkins
  • IDEA (Jenkins Control plugins)

1. Docker

假如Windows环境,Docker曾经装置结束。默认已装置Docker Compose

1.1 Dockerfile

镜像形容文件,比较简单的Java SpringBoot我的项目

FROM openjdk:17-alpine

WORKDIR /home/app

ADD zhgc-web/build/libs/zhgc-web-*.jar web.jar

EXPOSE 8080

CMD java $JAVA_OPTS -jar "web.jar"

1.2 Docker Compose

应用Docker Compose的目标,次要是服务编排以及资源限度,比单纯的应用Docker不便一些。

也是比较简单的docker-conpose.yml

version: '3'
services:
  zhgc:
    image: zhgc-web:latest
    container_name: zhgc-web
    ports:
      - '18010:8080'
    environment:
      SPRING_PROFILES_ACTIVE: test
      JAVA_OPTS: '-Xmx2g -Xmx2g'
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 3G
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

2. Jenkins

想必能看到这篇文章的,对Jenkins都不会生疏。根本的部署、配置就不再叙述。

假如已搭建好环境。官方网站 https://www.jenkins.io/

2.1 举荐插件 Blue Ocean

界面简洁且直观,特地是配合Pipeline

2.2 Jenkins Pipeline

官网文档,曾经很具体。可粗读一遍,后续依据须要再细读。https://www.jenkins.io/doc/book/pipeline/

一个绝对残缺且简略的Pipeline示例

pipeline {
    agent any
    tools {
        // 指定jdk17 这个须要在Jenkins的Tools中的JDK中增加
        jdk 'jdk17'
    }
    stages {
        stage('Build-Project') {
            steps {
                //
                echo 'build'
                bat(
                        label: 'Gradle',
                        script: './gradlew build'
                )
            }
            // reports
            post {
                success {
                    // publish html 公布制品
                    publishHTML target: [
                            allowMissing: false,
                            alwaysLinkToLastBuild: false,
                            keepAll: true,
                            reportDir: 'zhgc-web/build/reports/tests/test',
                            reportFiles: 'index.html',
                            reportName: 'Test Report'
                    ]
                }
            }
        }
        stage('Build-Docker') {
            steps {
                bat(
                        label: 'Docker',
                        script: 'docker build -t zhgc-web:latest .'
                )
            }
        }
        stage('Deploy') {
            steps {
                bat(
                        label: 'Deploy docker-compose',
                        script: 'docker-compose up -d'
                )
            }
        }
    }
    // 推送 测试文档
    post {
        always {
            junit 'zhgc-web/build/test-results/**/*.xml'
        }
    }
}

2.3 参数化构建

文档地址: https://www.jenkins.io/doc/book/pipeline/syntax/#parameters-e…

parameters {
    choice(name: 'APPS', choices: ['all', 'agent', 'taskcenter'])
}

应用stage配合when来决定是否走某个构建步骤

3 IDEA 装置Jenkins插件

测试发现,明码只能应用API-TOKEN

Crumb Data的获取地址为:http://xxx.xx/crumbIssuer/api/xml?tree=crumb 返回数据为

<defaultCrumbIssuer _class='hudson.security.csrf.DefaultCrumbIssuer'>
    <crumb>6cc4228225e28cd67807a3982381ca1efda341672db606c1ca6d29da67f117d3</crumb>
</defaultCrumbIssuer>

其实这块,还能够应用Gitlab和Jenkins配合WebHook,通过被动推送代码时按规定触发主动构建。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理