我想使用GitHub程序包在GitHub组织中存储多个存储库的Maven工件。 Currently,对于每个项目,似乎需要一个单独的(Maven)存储库配置条目来指向该(GitHub)存储库的Maven存储库:
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
</repository>
将要发布的Maven项目的相应配置是:
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
</repository>
</distributionManagement>
是否可以将所有程序包都配置到单个存储库中?将REPOSITORY设置为组织中其他现有或不存在的(GitHub)存储库会使构建失败,就像完全删除/ REPOSITORY一样
答案 0 :(得分:1)
secrets.GITHUB_TOKEN
是默认定义的,但它仅足以部署到当前存储库。
要使其跨存储库工作,您需要在以下位置定义新的个人访问令牌:
Settings
> Developer Settings
> Personal Access Tokens
。为范围选择 write:packages
,系统会自动为您选择所有 repo
范围。
接下来,在您的组织或您需要从中发布包的每个存储库中定义一个秘密。
为其命名(即 DEPLOY_GITHUB_TOKEN
)并将其值设置为在上一步中创建的个人访问令牌。
存储库机密在存储库 Settings
> Secrets
中定义。该组织也有类似的部分。
最后,确保将您的个人访问令牌作为名为 GITHUB_TOKEN
的环境变量传递给部署步骤。
在下面的示例中,它设置为上一步中定义的 DEPLOY_GITHUB_TOKEN
机密的值。
name: Build
on:
release:
types: [created]
jobs:
build:
name: Build & Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Maven
run: mvn --batch-mode --update-snapshots install
- name: Deploy to GitHub
run: mvn --batch-mode -DskipTests -DuseGitHubPackages=true deploy
env:
GITHUB_TOKEN: ${{ secrets.DEPLOY_GITHUB_TOKEN }}
由于我使用专用的 Maven 配置文件进行 GitHub 包存储库分发管理,因此我也使用 -DuseGitHubPackages=true
激活了它。
在下面的配置文件示例中,我将分发管理配置为使用外部/共享存储库 vlingo/vlingo-platform
,就像@Danny Varod 的回答中所建议的那样。
<!-- pom.xml -->
<project>
<!-- ... -->
<profiles>
<profile>
<id>github</id>
<activation>
<property>
<name>useGitHubPackages</name>
<value>true</value>
</property>
</activation>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/vlingo/vlingo-platform</url>
</repository>
</distributionManagement>
</profile>
</profiles>
</project>
交叉发布于:https://dev.to/jakub_zalas/how-to-publish-maven-packages-to-a-single-github-repository-3lkc
可以在 vlingo 存储库中找到一个工作示例:https://github.com/vlingo/vlingo-platform/packages
答案 1 :(得分:0)
我不久前通过创建一个名为 maven-packages 或类似名称的空存储库并将所有 Maven 包从组织的所有存储库发布到这个存储库来解决这个问题。
这允许在本地、构建机器和部署环境中配置单个 Maven 存储库(除了 Maven-central),用于拉取 Maven 库依赖项。
我没有这个代码(在以前的工作场所,现在我使用 Python),但是,我记得使用 mvn deploy
命令行作为 documented here:
mvn deploy:deploy-file -DpomFile=<path-to-pom> \
-Dfile=<path-to-file> \
-DrepositoryId=<id-to-map-on-server-section-of-settings.xml> \
-Durl=<url-of-the-repository-to-deploy>
并且我在构建期间修改了 pom.xml 以插入正确的部署存储库的详细信息,因此发布只能通过构建完成(并将预发布详细信息添加到预发布的版本号)。这还允许为外部稳定版本添加额外的存储库(将发布到 Maven-central)。
查看配置 here。