更灵活地自定义构建 Java 应用

Maven 构建

  1. version: 1.1
  2. stages:
  3. - stage:
  4. - git-checkout:
  5. params:
  6. depth: 1
  7. - stage:
  8. - java-build:
  9. version: "1.0"
  10. params:
  11. # 执行自定义打包命令,可任意填写 linux 命令
  12. build_cmd:
  13. - mvn package
  14. - echo "build success"
  15. jdk_version: 8
  16. workdir: ${git-checkout}
  17. - stage:
  18. - release:
  19. params:
  20. dice_yml: ${git-checkout}/dice.yml
  21. services:
  22. dice.yml中的服务名:
  23. image: registry.erda.cloud/erda/terminus-openjdk:v11.0.6
  24. copys:
  25. # 拷贝 java-build 打包出来的 jar 包
  26. - ${java-build:OUTPUT:buildPath}/target/jar包的名称:/target/jar包的名称
  27. # 拷贝 erda 监控文件
  28. - ${java-build:OUTPUT:buildPath}/spot-agent:/
  29. # ${java-build:OUTPUT:JAVA_OPTS} 是对应的监控命令,本质就是 -javaagent:/xxx.jar
  30. cmd: java ${java-build:OUTPUT:JAVA_OPTS} -jar /target/jar包的名称
  31. - stage:
  32. - dice:
  33. params:
  34. release_id: ${release:OUTPUT:releaseID}

Gradle 构建

  1. version: 1.1
  2. stages:
  3. - stage:
  4. - git-checkout:
  5. params:
  6. depth: 1
  7. - stage:
  8. - java-build:
  9. version: "1.0"
  10. params:
  11. # 执行自定义打包命令,可任意填写 linux 命令
  12. build_cmd:
  13. - ./gradlew bootJar
  14. - echo "build success"
  15. jdk_version: 8
  16. workdir: ${git-checkout}
  17. - stage:
  18. - release:
  19. params:
  20. dice_yml: ${git-checkout}/dice.yml
  21. services:
  22. # 多个
  23. dice.yml中的服务名:
  24. image: registry.erda.cloud/erda/terminus-openjdk:v11.0.6
  25. copys:
  26. - ${java-build:OUTPUT:buildPath}/build/jar包的路径/jar包的名称:/target/jar包的名称
  27. - ${java-build:OUTPUT:buildPath}/spot-agent:/
  28. cmd: java ${java-build:OUTPUT:JAVA_OPTS} -jar /target/jar包的名称
  29. dice.yml中的服务名1:
  30. image: registry.erda.cloud/erda/terminus-openjdk:v11.0.6
  31. copys:
  32. - ${java-build:OUTPUT:buildPath}/build/jar包的路径/jar包的名称:/target/jar包的名称
  33. - ${java-build:OUTPUT:buildPath}/spot-agent:/
  34. cmd: java ${java-build:OUTPUT:JAVA_OPTS} -jar /target/jar包的名称
  35. - stage:
  36. - dice:
  37. params:
  38. release_id: ${release:OUTPUT:releaseID}

Tomcat 构建

  1. version: "1.1"
  2. stages:
  3. - stage:
  4. - git-checkout:
  5. params:
  6. depth: 1
  7. - stage:
  8. - java-build:
  9. version: "1.0"
  10. params:
  11. # 执行自定义打包命令,可任意填写 linux 命令
  12. build_cmd:
  13. - mvn clean package
  14. - echo "build success"
  15. jdk_version: 8
  16. workdir: ${git-checkout}
  17. - stage:
  18. - release:
  19. params:
  20. dice_yml: ${git-checkout}/dice.yml
  21. services:
  22. dice_yml中的服务名称:
  23. image: tomcat:jdk8-openjdk-slim
  24. copys:
  25. - ${java-build:OUTPUT:buildPath}/target/war包的名称.war:/usr/local/tomcat/webapps
  26. # 拷贝 erda 监控文件
  27. - ${java-build:OUTPUT:buildPath}/spot-agent:/
  28. # 声明 tomcat JAVA_OPTS, 环境变量 ${java-build:OUTPUT:JAVA_OPTS} 是对应的监控命令,值就是类似于 -javaagent:/xxx.jar
  29. cmd: export JAVA_OPTS="${java-build:OUTPUT:JAVA_OPTS}" && mv /usr/local/tomcat/webapps/war包的名称.war /usr/local/tomcat/webapps/ROOT.war && /usr/local/tomcat/bin/catalina.sh run
  30. - stage:
  31. - dice:
  32. params:
  33. release_id: ${release:OUTPUT:releaseID}

具体参数说明如下:

Java-Build 构建 JAR 包

  • params:build_cmd:声明各类构建命令或前置执行部分安装命令。
  • params:jdk_version:声明使用具体版本的 JDK 构建,目前仅支持 8 和 11。
  • params:workdir:声明构建命令在具体目录下执行。
  • java-build:本意在于使用户自定义构建命令,从而达到高度定制化,最终产出 JAR 包。

Release 配合使用

  • params:services:声明多个服务的构建过程,类似 dockerfile 文件的声明。
  • params:services[]:dice_yaml中的服务名称:对应 erda.ymlservices 服务名称,若有多个即声明多个
  • params:services[]:dice_yaml中的服务名称:image:等于 dockerfile 中的 FROM image,用户可声明自己的运行环境。
  • params:services[]:dice_yaml中的服务名称:copys[]:等于 dockerfile 中的 copy,用户可将文件拷贝至自己的运行环境。
  • params:services[]:dice_yaml中的服务名称:cmd:等于 dockerfile 中的 cmd,用户可声明自己的服务启动命令。
  • release:本意在于使用户无需在项目根目录下编写 dockerfile 文件,通过 pipeline.yml 文件完成高度定制化构建的需求。

::: tip 提示 ${java-build:OUTPUT:buildPath}java-build 构建的路径。 ${java-build:OUTPUT:JAVA_OPTS} = -javaagent:/spot-agent/spot-agent.jar :::