傅里叶变换总结及FFT画图横坐标设置
2026/11/1 1:59:07
/var/run/docker.sock,使其拥有调用宿主机 Docker 的能力(即 Docker-in-Docker)。Dockerfile,内置 JDK 8 (用于编译旧项目) 和 Maven。这一步的目标是构建一个**“全能版”**的 Jenkins 镜像,解决官方镜像没有 Maven 和 JDK 8 的问题。
文件名:Dockerfile(位于 Jenkins 部署目录)
Dockerfile
# 基础镜像:官方最新 Jenkins LTS FROM jenkins/jenkins:lts USER root # 1. 换源并安装基础工具 (Maven, Docker CLI) # 注意:这里安装 Docker CLI 是为了在容器内能敲 docker 命令 RUN apt-get update && \ apt-get install -y maven docker.io wget tar # 2. 【关键】手动安装 JDK 8 # 原因:Jenkins 新版运行需要 JDK 11/17,但我们的项目需要 JDK 8 编译 # 方案:从 Temurin 官方源下载解压,后续在流水线中通过环境变量指定路径 RUN wget -q https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u402-b06/OpenJDK8U-jdk_x64_linux_hotspot_8u402b06.tar.gz -O /tmp/jdk8.tar.gz && \ mkdir -p /opt/jdk8 && \ tar -xzf /tmp/jdk8.tar.gz -C /opt/jdk8 --strip-components=1 && \ rm /tmp/jdk8.tar.gz # 3. 验证环境安装 RUN /opt/jdk8/bin/java -version && mvn -v && docker -v文件名:docker-compose.yml
YAML
version: '3.8' services: jenkins: # "build: ." 表示使用当前目录的 Dockerfile 构建镜像,而不是直接拉取 build: . container_name: jenkins-pro restart: always ports: - "9090:8080" # 面板端口:宿主机 9090 -> 容器 8080 - "50000:50000" # 如果有从节点连接需要此端口 volumes: - ./jenkins_data:/var/jenkins_home # 数据持久化 - /var/run/docker.sock:/var/run/docker.sock # 【核心】挂载 Docker 守护进程 - /usr/bin/docker:/usr/bin/docker # 映射 Docker 二进制文件# 构建镜像并后台启动容器(串行执行:先 build 后 up) docker compose up -d --builddocker logs -f jenkins-prohttp://<你的IP>:9090,输入密码。这一步体现了Pipeline as Code (流水线即代码)的思想,将构建逻辑存放在代码仓库中。
文件名:Dockerfile(位于项目根目录)
Dockerfile
# 运行阶段只需要 JRE,使用 alpine 版本体积最小 FROM eclipse-temurin:8-jre-alpine WORKDIR /app VOLUME /tmp # 拷贝编译后的 jar 包 (注意:这是 Jenkins 在上一阶段 maven package 生成的) COPY target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]文件名:Jenkinsfile(位于项目根目录)
Groovy
pipeline { agent any // 【环境变量】强制指定使用我们在 Jenkins 容器里装好的 JDK 8 environment { JAVA_HOME = "/opt/jdk8" PATH = "/opt/jdk8/bin:$PATH" APP_NAME = "my-boot-app" } stages { stage('1. 环境检测') { steps { sh "java -version" // 确认是 1.8 sh "mvn -v" } } stage('2. 拉取代码') { steps { // 读取 Jenkins 任务配置的 Git 地址和凭证 ,scm代替了git clone checkout scm } } stage('3. 编译打包') { steps { // 跳过测试,利用外网环境快速下载依赖并打包 sh "mvn clean package -DskipTests" } } stage('4. Docker发布') { steps { script { // 利用挂载的 docker.sock,在宿主机上构建镜像 sh "docker build -t ${APP_NAME}:latest ." // 清理旧容器 (|| true 防止首次运行报错) sh "docker rm -f ${APP_NAME} || true" // 启动新容器,映射端口到宿主机 sh "docker run -d -p 8080:8080 --name ${APP_NAME} ${APP_NAME}:latest" } } } } }实现Git Push -> 自动发布的闭环。
Pipeline script from SCM-> Git -> 填入仓库地址。Gitee webhook 触发构建,生成并复制WebHook 密码。Push。git push代码。mvn package,生成target/xxx.jar。Dockerfile,把 jar 包打成镜像。最终效果:代码提交后,喝杯水的功夫,服务器上的应用已经自动更新为最新版本。