【问题标题】:What are the equivalent maven commands and settings to upload and download azure artifacts?上传和下载天蓝色工件的等效 Maven 命令和设置是什么?
【发布时间】:2020-10-21 08:04:50
【问题描述】:

我有一个 maven 项目(在管道中),它需要消耗在另一个 azure 管道中部署(通过 mvn deploy)作为依赖项的工件。

我可以使用以下命令行将工件上传和下载到 Azure devops:

az artifacts universal publish \
    --organization https://myorg.visualstudio.com \
    --scope project \
    --project="myproject" \
    --feed myfeed \
    --name someartifact-1.99.1.jar \
    --version 1.99.1 \
    --description "snafu" \
    --debug \
    --path .

az artifacts universal download
   --organization "https://myorg.visualstudio.com/"
   --project "myproject"
   --scope project
   --feed "myfeed"   
   --name "someartifact-1.99.1.jar"   --version "1.99.1"
   --path .

等效的 maven 命令应该是这样的:

mvn deploy:deploy-file -DWHERE="AzureDevops" clean deploy

mvn -X -B -s maven-azuredevops-settings.xml 
 -DWHERE=AzureDevops
 -DrepoURL=https://myorg.pkgs.visualstudio.com/myproject/_packaging/myfeed/maven/v1   
 dependency:get 
 -Dartifact=com.foobar.blah:someartifact:1.99.1
 -Ddest=./clientartifact.jar

我在 maven-azuredevops-settings.xml 中的位置:

<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
                              https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <interactiveMode>false</interactiveMode>
  <servers>
    <server>
      <id>feedname</id>
      <username>azureusername</username>
      <password>personal access token</password>
    </server>
  </servers> 
</settings>

同样,我在 pom.xml 中有 Azure 上推荐的设置 - 尽管我没有完全理解它们。

但是我注意到一些不同之处。当 maven 在管道中部署包时,在提要中查看时,Artifact 前面有一个用于 maven 的大 M。它也被列为:

com.foobar.blah:someartifact 1.9.9

如果直接使用az artifacts 上传,则它是一个普通的通用包,而不是 maven 包。 一个关键的区别(它是唯一的吗?)是在同一个工件中也有一个 .pom 工件。我的 maven 构建创建了这个并将其放在本地存储库中,但我不清楚如何将其作为同一工件的一部分发布,而不是作为提要中的单独文件发布。

我对项目范围的提要也有问题(即使用 --scope 和 --project)。 Maven 报告 401 未经授权,而不是说缺少包。 尽管已登录,但如果我从命令行获取 repo 的 URL,我会得到 401。 这是我目前的主要问题。

显然,我对 Azure 和 Maven 的理解存在一些差距,这两者我都是新手。有人可以告诉我如何让 maven 命令正常工作,或者让 azure 命令在可能的情况下表现相同。

对于上下文,我试图通过离线执行等效命令来调试管道。 另见Azure DevOps Pipeline - Maven deploy release only if it does not exist

【问题讨论】:

  • az artifacts 命令来自通用包。您应该对 maven 包使用 mvn 命令。您在使用 mvn 命令时遇到了什么问题?

标签: maven azure-devops


【解决方案1】:

首先,对于通用包,它只是您上传到我们服务并标有名称和版本的文件的集合。您可以在构建或发布期间通过Universal Package task 下载它。

更多信息,可以参考:Getting started with Universal Packages

由于您使用的是 JAVA 包,请通过 MVN deploy 部署/发布 JAVA 包。

其次,有集合和项目级别/范围提要。对于项目级别/范围,您需要在 URL 中指定项目名称,例如https://pkgs.dev.azure.com/{org}/{project}/_packaging/{feed}/maven/v1

第三,要在另一个JAVA项目中使用JAVA包,需要在用户文件夹(${user.home}/.m2)的settings.xml中配置凭证。对于构建或发布管道,您只需添加Maven Authenticate task 进行身份验证。

然后,您需要在 pom.xml 中指定包(在 section 下)。您可以在 Connect to feed > 选择 Maven 中获取此信息。

更多信息,可以参考:Get started with Maven feeds and Artifacts

【讨论】:

    猜你喜欢
    • 2013-03-17
    • 2018-03-24
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2015-10-24
    • 1970-01-01
    相关资源
    最近更新 更多