Iva*_* G. 5 github package-management maven github-actions github-package-registry
我想使用 GitHub 包为 GitHub 组织中的多个存储库存储 Maven 工件。目前,似乎对于每个项目,都需要一个单独的 (Maven) 存储库配置条目来指向该 (GitHub) 存储库的 Maven 存储库:
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
</repository>
Run Code Online (Sandbox Code Playgroud)
将要发布的Maven项目对应的配置是:
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
</repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
有没有办法将软件包配置为全部转到单个 REPOSITORY?将 REPOSITORY 设置为组织中不同的现有或不存在 (GitHub) 存储库会导致构建失败,完全删除 /REPOSITORY 也是如此
对于那些只是想避免<repository>多次指定标签的人:
显然,GitHub并不关心你从注册表中提取包时设置的存储库。拉取时,包索引基于组织级别,而不是存储库级别。
如果您想从同一组织内的多个存储库中提取软件包,您可以这样做:
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/Your-Orgnazation/JUST-ENTER-ANYTHING-HERE</url>
</repository>
Run Code Online (Sandbox Code Playgroud)
注意:您仍然需要个人令牌才能跨存储库提取包。您不必<repository>多次指定标签。
secrets.GITHUB_TOKEN是默认定义的,但仅足以部署到当前存储库。
要使其跨存储库工作,您需要在以下位置定义新的个人访问令牌:
Settings> Developer Settings> Personal Access Tokens.选择write:packages范围,所有repo范围都会自动为您选择。
接下来,在您的组织或您需要从中发布包的每个存储库中定义一个秘密。
为其命名(即DEPLOY_GITHUB_TOKEN)并将其值设置为在上一步中创建的个人访问令牌。
Settings存储库机密在repository >中定义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 }}
Run Code Online (Sandbox Code Playgroud)
由于我使用专用的 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>
Run Code Online (Sandbox Code Playgroud)
交叉发布自:https://dev.to/jakub_zalas/how-to-publish-maven-packages-to-a-single-github-repository-3lkc
可以在 vlingo 存储库中找到一个工作示例:https ://github.com/vlingo/vlingo-platform/packages
不久前,我通过创建一个名为 maven-packages 或类似名称的空存储库并将所有 Maven 包从组织的所有存储库发布到这个存储库来解决了这个问题。
这使得可以在本地、构建机器和部署环境中配置单个 Maven 存储库(除了 Maven 中心),以拉取 Maven 库依赖项。
我没有这段代码(在以前的工作场所,现在我使用 Python),但是,我记得使用mvn deploy命令行来实现此目的,如下所示:
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>
Run Code Online (Sandbox Code Playgroud)
我在构建期间修改了 pom.xml 以插入正确的部署存储库的详细信息,因此只能通过构建来完成发布(并将预发布详细信息添加到预发布的版本号中)。这还可以为外部稳定版本添加额外的存储库(将发布到 Maven-central)。
请参阅此处的配置。
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |