Java

    平台支持 Java 1.8 和 Java 11,默认为前者。

    打包工具

    • Maven
    • Gradle

    依赖管理

    若使用平台提供的配置文件则无需改动代码。平台打包时将自动准备如下文件并自动填充占位符。

    • Maven: settings.xml
    • Gradle: init.gralde

    settings.xml 示例如下:

    init.gradle 示例如下:

    1. def NEXUS_USERNAME = "{{NEXUS_USERNAME}}"
    2. def NEXUS_PASSWORD = "{{NEXUS_PASSWORD}}"
    3. allprojects {
    4. buildscript {
    5. repositories {
    6. maven {
    7. credentials {
    8. username NEXUS_USERNAME
    9. password NEXUS_PASSWORD
    10. }
    11. url NEXUS_SERVER
    12. }
    13. }
    14. }
    15. repositories {
    16. maven {
    17. credentials {
    18. username NEXUS_USERNAME
    19. password NEXUS_PASSWORD
    20. }
    21. url NEXUS_SERVER
    22. }
    23. }
    24. }

    进入 DevOps > 我的应用 > 选择应用 > 应用设置 > 流水线 > 变量配置 > 选择环境

    点击 增加变量, 选择类型为 文件 并开启加密,将 settings.xml 上传,变量名称定义为 MAVEN_SETTING_FILE

    ::: warning 警告 因文件内含有密码等敏感信息,配置必须开启加密。 :::

    settings.xml 示例如下:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    4. <servers>
    5. <server>
    6. <id>terminus</id>
    7. <username>deployment</username>
    8. <password>******</password>
    9. </server>
    10. </servers>
    11. </settings>

    配置 pom.xml 推送地址

    请在对应项目的 pom.xml 中添加需要如下配置,否则将报错无法推送。

    1. <distributionManagement>
    2. <repository>
    3. <id>terminus</id> <!-- settings.xml 里配置的 server.id -->
    4. <name>Releases</name>
    5. </repository>
    6. <snapshotRepository>
    7. <id>terminus</id>
    8. <name>Snapshots</name>
    9. <url>http://私服地址/repository/releases</url> <!-- snapshot 私服的地址 -->
    10. </snapshotRepository>
    11. </distributionManagement>

    配置流水线实现 JAR 包上传

    MAVEN_SETTING_FILE 即上文配置的名称。

    如需自动触发构建,可增加持续集成配置。

    1. on:
    2. push:
    3. branches:
    4. - develop # 持续集成

    ::: tip 提示

    • maven 401 错误即账号密码错误。
    • maven 405 错误可能为私服地址错误,部分私服地址是无法推送的,例如 public。

    :::

    推送 JAR 包至私服(Gradle)

    进入 DevOps > 我的应用 > 选择应用 > 应用设置 > 流水线 > 变量配置 > 选择环境

    • NEXUS_USERNAME
    • NEXUS_PASSWORD

    ::: warning 警告 因文件内含有密码等敏感信息,配置必须开启加密。 :::

    配置 build.gradle 推送地址

    对应项目的 build.gradle 需增加如下配置,若未添加则会报错无法推送。更多信息请参见 build.gradle 配置方式

    1. publishing{
    2. ...
    3. repositories {
    4. maven {
    5. // change URLs to point to your repos, e.g. http://my.org/repo
    6. def releasesRepoUrl = "http://私服地址/repository/releases"
    7. def snapshotsRepoUrl = "http://私服地址/repository/snapshots"
    8. url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
    9. credentials {
    10. username = System.getenv("NEXUS_USERNAME")
    11. password = System.getenv("NEXUS_PASSWORD")
    12. }
    13. }
    14. }
    15. }

    配置流水线实现 JAR 包上传

    1. version: '1.1'
    2. stages:
    3. - stage:
    4. alias: git-checkout
    5. params:
    6. depth: 1
    7. - stage:
    8. - java-build:
    9. alias: java-build
    10. version: "1.0"
    11. params:
    12. build_cmd:
    13. - "./gradlew publish"
    14. jdk_version: 8

    如需自动触发构建,可增加持续集成配置。

    ::: tip 提示

    • maven 401 错误即账号密码错误。
    • maven 405 错误可能为私服地址错误,部分私服地址是无法推送的,例如 public。

    :::

    接入平台日志

    平台仅采集输出至控制台(Console)的日志,因此需应用程序将日志导入控制台。

    ::: warning 警告 请勿将日志写入磁盘文件,这可能导致性能下降或者磁盘资源耗尽等严重问题。 :::

    通过 Logback 配置,将日志输出至控制台:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <configuration scan="true" scanPeriod="30 seconds">
    3. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    4. <encoder>
    5. <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZZ} [%thread] %-5level %logger{5} - %msg%n</pattern>
    6. </encoder>
    7. </appender>
    8. <root level="DEBUG">
    9. <appender-ref ref="CONSOLE"/>
    10. </root>
    11. </configuration>

    若采用平台提供的运行容器,平台将自动关闭 RollingFileAppender 等非 ConsoleAppender 的 appender,以确保日志无法写入磁盘。请确保已配置 ConsoleAppender,否则将无法查看日志。

    Java 构建分为两部分:

    1. 通过指明的打包方式和上下文参数,将源代码编译为打包产物。
    2. 按照指明的运行环境和版本,选择基础镜像,将 JAR 包制作成运行镜像。

    ::: tip 提示 此处特指打包产物而非 JAR 包,原因在于很多场景下编译的结果并非是 JAR 包,例如传统的 Spring MVC 程序产出 WAR 包,gradle distribution 产出的则是 Tar 或者 ZIP 包,通过解压执行 bin/xxx 运行。 :::

    通过 Spring Boot 技术制作而成的 JAR 包称为 fat jar,因其 JAR 包中嵌入了除 Java 虚拟机以外的所有依赖,故此得名。

    由于 fat jar 是一个 all-in-one 的 JAR 包,因此仅需 Java 虚拟机环境便可通过 java -jar app.jar 直接运行。

    pipeline.yml 示例如下:

    1. version: '1.1'
    2. stages:
    3. - stage:
    4. - git-checkout:
    5. - stage:
    6. - java:
    7. params:
    8. build_type: maven
    9. workdir: ${git-checkout}
    10. options: -am -pl user
    11. target: ./user/target/user.jar
    12. container_type: openjdk

    打包加速

    Caches

    示例如下:

    1. - stage:
    2. - java:
    3. caches:
    4. - path: /root/.m2/repository
    5. params:
    6. build_type: maven
    7. workdir: ${git-checkout}
    8. options: -am -pl user
    9. target: ./user/target/user.jar
    10. container_type: openjdk

    /root/.m2/repository 目录为 Linux 中 Maven 本地仓库的地址,缓存过后即可进行加速构建。

    JVM 诊断

    Arthas

    若使用平台提供的运行容器,则已安装 Arthas。其安装路径为 /arthas-boot.jar,可在根目录通过 java -jar arthas-boot.jar 启动。

    关于 Arthas 更多信息,请参见 。

    若使用平台提供的运行容器,则已安装 Greys。

    关于 Greys 更多信息,请参见 Greys 文档

    平台提供 VPN 的方式,支持本地远程连接平台上运行的服务。

    为开启远程调试,需进入 DevOps > 我的应用 > 选择应用 > 应用设置 > 流水线 > 变量配置,添加 JAVA_OPTS 变量配置如下:

    JDK 9 及以上:

    JDK 5~8:

    1. JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

    此外,如需使用本地 IDE 进行连接,请进入 DevOps 平台 > 我的应用 > 选择应用 > 部署中心 > 部署总览 > 容器列表 中找到需调试的容器 IP,在 IDE 新建 Remote 配置如下:

    JDK 9 及以上:

    JDK 5~8: