【Gitlab测试项目】

提示:本项目提供用于 DevOps 验证的简易服务程序,程序启动后访问 localhost:8080,即可展示 devops v1.0

文章目录

拉取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%原创,转载请务必标注原创作者,尊重劳动成果。

求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~

相关推荐
deepseek234 小时前
Dependabot匿名私有仓库开放后仍更新失败?组织级镜像的访问边界与排查实战
python·github·devops·软件供应链·dependabot
7177776 小时前
支持私有部署的 DevOps 平台推荐:Gitee 专业版与主流开源方案对比
gitee·开源·devops
杜子不疼.1 天前
第06篇:扩展不是堆机器——基于 A2A 协议的 openJiuwen 异构 Agent 通信架构设计
ai·机器人·devops
_可乐无糖2 天前
GitLab CI 脚本之 CI_COMMIT_AUTHOR
ci/cd·gitlab
7177773 天前
支持混合云的 DevOps 平台有哪些:主流方案对比与选型指南
运维·devops
_可乐无糖3 天前
GitLab CI 脚本之 dependencies 和 needs
ci/cd·gitlab
蒸鱼Yuzheng3 天前
Android 构建可复现性:APK 指纹、文件级差异与供应链审计
android·apk·devops·软件供应链·可复现构建
Fan_5584 天前
4核8G云服务器部署GitLab内存耗尽解决方案
gitlab