如何将Java jar包发布到Azure DevOps的Artifacts板块
解决方案
你目前使用的PublishBuildArtifacts@1任务的作用是将构件上传到当前流水线运行的关联构件存储区,仅和本次流水线绑定,不会同步到全局Artifacts板块的制品源中,要实现目标可以按以下步骤操作:
1. 前置准备:创建Maven制品源
进入项目的Artifacts板块,点击「创建源」,类型选择Maven,配置好源的名称、可见范围后保存。
2. 配置流水线发布构件到制品源
推荐两种常用实现方式:
方式一:通过Gradle maven-publish插件发布(推荐)
第一步:修改项目的build.gradle配置
添加maven-publish插件,配置发布信息:
plugins { id 'java' id 'maven-publish' } publishing { publications { mavenJava(MavenPublication) { // 替换为实际的构件坐标 groupId = 'com.yourcompany.commons' artifactId = 'commons' version = '1.0.0' // 指向构建生成的jar包 artifact jar } } repositories { maven { // 该地址可在你创建的Maven源中点击「连接到源」选择Gradle获取 url = 'https://pkgs.dev.azure.com/你的组织名/_packaging/你的制品源名称/maven/v1' credentials { username = "azdevops" // 从流水线环境变量读取令牌,无需硬编码 password = System.getenv("AZURE_ARTIFACTS_TOKEN") } } } }
第二步:修改流水线配置
替换原来的PublishBuildArtifacts@1任务,添加Maven认证和发布任务:
steps: - checkout: self path: 'my-repo/' # 新增:Azure Artifacts Maven认证任务,自动注入访问令牌 - task: MavenAuthenticate@0 inputs: artifactsFeeds: '你创建的制品源名称' - task: Gradle@2 displayName: Test and build jar & publish inputs: gradleWrapperFile: 'gradlew' # 新增publish任务 tasks: 'build publish' publishJUnitResults: false javaHomeOption: 'JDKVersion' # 将认证拿到的令牌传递给Gradle options: '-DAZURE_ARTIFACTS_TOKEN=$(System.AccessToken)'
方式二:通过Azure官方MavenPublish任务发布
如果不想修改项目的build.gradle配置,可以直接用官方任务上传:
steps: - checkout: self path: 'my-repo/' - task: Gradle@2 displayName: Test and build jar inputs: gradleWrapperFile: 'gradlew' tasks: 'build' publishJUnitResults: false javaHomeOption: 'JDKVersion' - task: MavenPublish@1 inputs: # 直接指定jar包信息,无需额外配置pom文件 jarFile: '$(System.DefaultWorkingDirectory)/build/libs/commons.jar' groupId: 'com.yourcompany.commons' artifactId: 'commons' version: '1.0.0' artifactsFeed: '你创建的制品源名称'
3. 权限校验
若发布时出现401无权限报错,可检查两个配置:
- 流水线当前作业的设置中已开启「允许脚本访问OAuth令牌」选项
- 制品源权限设置中,已给「项目集合构建服务(你的组织名)」账号分配了「贡献者」权限
配置完成后运行流水线,构建成功后即可在Artifacts板块的对应源中找到发布的jar包,后续本地Gradle添加对应源配置即可直接拉取依赖。
内容的提问来源于stack exchange,提问作者slipperypete
相关产品推荐
相关产品推荐

