feat(ci): 添加 Woodpecker CI 配置实现 Java 应用自动构建部署

- 配置了 Maven 构建步骤,支持依赖缓存加速
- 添加了 Docker 镜像构建和推送流程
- 设置了阿里云容器镜像服务仓库地址
- 创建了 Dockerfile 定义 Java 运行环境
- 配置了 JVM 参数优化和时区设置
- 添加了构建说明文档 1.txt
This commit is contained in:
gxl 2026-06-02 13:31:33 +08:00
parent f4dbb3a80e
commit f5039c0ab6
3 changed files with 67 additions and 0 deletions

43
.woodpecker.yaml Normal file
View File

@ -0,0 +1,43 @@
# .woodpecker.yaml
workflows:
build-and-deploy:
name: Java应用构建与部署
# 触发条件,仅在 main/master 分支推送时运行
when:
- event: push
branch: main
- event: push
branch: master
steps:
# 1. 使用 Maven 构建 Java 应用,并缓存依赖
- name: Java 构建
image: maven:3.9.6-eclipse-temurin-17
pull: true
commands:
- mvn clean package -DskipTests # 跳过测试以加快构建
volumes:
- /tmp/maven-cache:/root/.m2 # 缓存 Maven 依赖
# 2. 将构建好的 JAR 文件打包为 Docker 镜像
- name: Docker 构建
image: docker:latest
pull: true
commands:
- docker build -t registry.cn-zhangjiakou.aliyuncs.com/abhors/demo:latest .
volumes:
- /var/run/docker.sock:/var/run/docker.sock # ⚠️ Docker in Docker 挂载
# 3. 将打包好的镜像推送到 Docker Hub
- name: 镜像推送
image: plugins/docker
settings:
# ⚠️ 关键配置:必须准确填写
repo: registry.cn-zhangjiakou.aliyuncs.com/abhors/demo
registry: registry.cn-zhangjiakou.aliyuncs.com
tags: latest
dockerfile: ./Dockerfile
username:
from_secret: docker_hub_user # 从 Woodpecker UI 获取的 Docker Hub 用户名
password:
from_secret: docker_hub_pass # 从 Woodpecker UI 获取的 Docker Hub 密码或 Token

5
1.txt Normal file
View File

@ -0,0 +1,5 @@
your-dockerhub-username 你的 Docker Hub 用户名或组织名。 abhors
your-app-name 你的 Java 应用对应的 Docker 镜像名称。 demo
docker_username / docker_password 这是流水线中引用的密钥名称。你需要在 Woodpecker UI 的设置页面中,将你的 Docker Hub 真实凭证添加为这两个密钥,流水线才能访问它们。 在 UI 中配置
/tmp/maven-cache:/root/.m2 Maven 缓存。将宿主机目录挂载到容器内,可以复用 Maven 本地仓库,加速构建。
/var/run/docker.sock:/var/run/docker.sock Docker socket 挂载。这允许流水线在容器内直接调用宿主机的 Docker 守护进程来构建镜像。

19
Dockerfile Normal file
View File

@ -0,0 +1,19 @@
FROM ibm-semeru-runtimes:open-17-jre
COPY ./target/*.jar /opt/app.jar
#暴露端口
EXPOSE 8080
#COPY ./cert /opt/cert/
#ENV TZ=PRC
#RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#启动 如果启动时想要添加额外的配置可以通过docker run -e PARAM="-Dserver.port=8000 -Dspring.profiles.active-prod"
ENV PROFILES="dev"
ENV JVM_OPTS="-Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -Xloggc:gc/gc.log -XX:+PrintGCDateStamps -XX:+PrintGC -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -XX:NumberOfGCLogFiles=2 -XX:+UseGCLogFileRotation -XX:GCLogFileSize=100m"
# ENTRYPOINT exec java -Dspring.profiles.active=$PROFILES $JVM_OPTS -jar /opt/app.jar
ENTRYPOINT ["sh", "-c", "java -Dspring.profiles.active=$PROFILES $JVM_OPTS -jar /opt/app.jar"]
#ENTRYPOINT ["nohup","java", "-Xms256m", "-Xmx512m", "-XX:MetaspaceSize=128m", "-XX:MaxMetaspaceSize=512m","-Dfile.encoding=utf-8", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar", "$PROFILES_ACTIVE", "> /logs/lotpig-app.log 2>&1 &" ]