You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker中借助GITHUB_TOKEN在GHA上运行Maven

解决方案

核心思路

GitHub 提供的secrets.GITHUB_TOKEN可直接用于 Maven 访问 GitHub Packages,无需依赖个人令牌。核心是在 GitHub Action 中动态将该令牌注入 Maven 认证配置,同时确保令牌拥有足够权限。

方案一:动态生成 Maven settings.xml

  1. 准备配置模板
    在仓库根目录创建settings-template.xml,预留用户名和令牌的占位符(需与 pom.xml 中仓库的id保持一致):
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <servers>
    <server>
      <id>github</id>
      <username>${GITHUB_USERNAME}</username>
      <password>${GITHUB_TOKEN}</password>
    </server>
  </servers>
</settings>
  1. 在 Action 中生成有效配置
    通过sed命令替换模板占位符,生成可直接使用的 settings.xml:
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      packages: read  # 授予GITHUB_TOKEN读取GitHub Packages的权限
      contents: read
    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 生成Maven配置文件
        run: |
          sed -e "s/\${GITHUB_USERNAME}/${{ github.actor }}/" \
              -e "s/\${GITHUB_TOKEN}/${{ secrets.GITHUB_TOKEN }}/" \
              settings-template.xml > ~/.m2/settings.xml

      # 后续执行Maven构建或Docker构建步骤

方案二:Docker 构建时传递认证参数

若在 Docker 容器内执行 Maven 构建,可通过 Build Args 直接注入认证信息,无需单独维护配置模板:

  1. 修改 Dockerfile
FROM maven:3.8.6-openjdk-17 AS build

# 接收外部传入的认证参数
ARG GITHUB_USERNAME
ARG GITHUB_TOKEN

# 动态生成Maven配置
RUN echo '<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><servers><server><id>github</id><username>'"$GITHUB_USERNAME"'</username><password>'"$GITHUB_TOKEN"'</password></server></servers></settings>' > /root/.m2/settings.xml

COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# 后续镜像打包步骤...
  1. 在 Action 中传递参数
- name: 构建并推送Docker镜像到AWS
  uses: docker/build-push-action@v4
  with:
    context: .
    push: true
    tags: <你的AWS ECR仓库地址>:latest
    build-args: |
      GITHUB_USERNAME=${{ github.actor }}
      GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}

方案三:Maven 命令行直接传递认证信息

无需修改或生成配置文件,直接通过命令行参数覆盖服务器认证配置:

mvn clean package -DskipTests \
  -Dserver.github.username=${{ github.actor }} \
  -Dserver.github.password=${{ secrets.GITHUB_TOKEN }}

注意事项

  • GITHUB_USERNAME可使用${{ github.actor }}(触发 Action 的用户),或固定填写github-actions(GitHub 官方机器人账户),两者均可配合GITHUB_TOKEN完成认证。
  • 必须在 Workflow 中声明permissions字段,确保GITHUB_TOKEN拥有packages:read权限(拉取依赖);若需推送 Packages,需添加packages:write权限。

内容的提问来源于stack exchange,提问作者patricK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:26:35