乐趣区

关于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,通过被动推送代码时按规定触发主动构建。

退出移动版