提示:本项目提供用于 DevOps 验证的简易服务程序,程序启动后访问
localhost:8080,即可展示devops v1.0
文章目录
- 拉取gitlab仓库
- pom.xml
- 启动类DevopsApplication.java
- 页面控制器HelloController.java
- application.yml
- 推送文件类型
- [多阶段 Dockerfile](#多阶段 Dockerfile)
拉取gitlab仓库
我在gitlab上创建了一个私人仓库myapp

yaml
root@develop:~# git clone http://192.168.13.136/root/myapp.git
root@develop:~# cd myapp
root@develop:~/myapp# ls
README.md
pom.xml
yaml
root@develop:~/myapp# mkdir -p src/main/java/com/example/devops/
root@develop:~/myapp# mkdir -p src/main/resources
root@develop:~/myapp# vim pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>devops</artifactId>
<version>1.0</version>
<name>devops</name>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<!-- 构建出 target/myapp.jar,跟 Dockerfile 里的 COPY 路径对应 -->
<finalName>myapp</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
启动类DevopsApplication.java
yaml
root@develop:~/myapp# vim src/main/java/com/example/devops/DevopsApplication.java
package com.example.devops;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DevopsApplication {
public static void main(String[] args) {
SpringApplication.run(DevopsApplication.class, args);
}
}
页面控制器HelloController.java
yaml
root@develop:~/myapp# vim src/main/java/com/example/devops/HelloController.java
package com.example.devops;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/")
public String index() {
return "<!DOCTYPE html>"
+ "<html lang='zh-CN'>"
+ "<head>"
+ "<meta charset='UTF-8'>"
+ "<title>devops v1.0</title>"
+ "</head>"
+ "<body style='font-family:sans-serif;text-align:center;margin-top:120px'>"
+ "<h1>devops v1.0</h1>"
+ "</body>"
+ "</html>";
}
}
application.yml
yaml
root@develop:~/myapp# vim src/main/resources/application.yml
server:
port: 8080
推送文件类型
.dockerignore ------ 给 Docker 看的,执行 docker build 时,告诉 Docker 哪些文件不要发送到 Docker 守护进程
yaml
root@develop:~/myapp# vim .dockerignore
.git
.gitignore
target/
.idea/
*.iml
.vscode/
README.md
gitignore ------ 给 Git 看的,指定哪些文件不提交到 GitLab
yaml
root@develop:~/myapp# vim .gitignore
target/
*.class
*.jar
!.mvn/wrapper/maven-wrapper.jar
.idea/
*.iml
.vscode/
*.swp
*.log
.DS_Store
多阶段 Dockerfile
把 Maven 构建和运行都放进 Dockerfile,Jenkins 里就不用再单独跑 mvn package 了,直接 docker build 一步到位
maven:3.9 + JDK17 里编译 → 产出 myapp.jar → 放进只有 JRE17 的镜像里运行
yaml
root@develop:~/myapp# vim Dockerfile
# ========== 阶段 1:Maven 构建 ==========
FROM maven:3.9-eclipse-temurin-17 AS build
WORKDIR /build
# 先只拷 pom.xml,利用 Docker 层缓存,依赖不变就不重复下载
COPY pom.xml .
RUN mvn -B dependency:go-offline
# 再拷源码
COPY src ./src
# 执行打包,产物在 /build/target/myapp.jar
RUN mvn -B clean package -DskipTests
# ========== 阶段 2:运行 ==========
FROM eclipse-temurin:17-jre
WORKDIR /app
# 从 build 阶段拷贝构建产物
COPY --from=build /build/target/myapp.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
大家可以mvn clean package,然后java -jar运行jar包,访问localhost:8080看看能不能访问到页面

确认程序无误之后就可以推送到gitlab上
yaml
root@develop:~# tree myapp
myapp
├── Dockerfile
├── pom.xml
├── README.md
└── src
└── main
├── java
│ └── com
│ └── example
│ └── devops
│ ├── DevopsApplication.java
│ └── HelloController.java
└── resources
└── application.yml
root@develop:~/myapp# ls -a
. .. Dockerfile .dockerignore .git .gitignore pom.xml README.md src
root@develop:~/myapp# git add .
root@develop:~/myapp# git commit -m "v1.0"
root@develop:~/myapp# git push -u origin main # 推送到远程仓库

注:
文中若有疏漏,欢迎大家指正赐教。
本文为100%原创,转载请务必标注原创作者,尊重劳动成果。
求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~