首页 > 解决方案 > Azure DevOps(本地)| Nexus Repository 的配置构建过程和 Docker 映像创建

问题描述

我是 Azure DevOps 和 Nexus Repository 主题的新手。我的代码在 Azure DevOps On-premises 上提交。Azure DevOps 和 Azure 注册表的工作方式也很好。

但是现在我在配置 Nexus时遇到了困难,我需要这个教程吗?https://devblogs.microsoft.com/devops/nexus-build-extension-for-team-services/

如果是,我在哪里获取此属性的信息:

因为配置需要这些属性。在我与我的 Nexus 同事交谈后,他的意思是它看起来像 Maven 配置。

那么也许方式是错误的?

结论我想要达到的目标:

在 Azure DevOps On-premises 中提交代码后,我想配置一个构建过程,该过程创建一个 docker 映像,将其移动到 nexus 存储库中。

亲切的问候,

未知

标签: azure-devopsnexusazure-devops-extensions

解决方案


不,没有错。

我们已经在 Github 中打开了这个扩展的源代码,请参阅这个vsts-nexusrepos。

在进行代码分析之前,我们需要知道它的逻辑。在此扩展中,我们使用Nexus 2.x Rest API实现了将文件上传到 Nexus Repository Manager 的功能,其 URI 为:

https://local:8081/service/local/artifact/maven/content?r={xx}&g={xx}&a={xx}&v={xx}&p={xx}&c={xx}" > xxx.jar

在这个 URI 中,rrepositoryIdggroupIdaartifactIdvartifactVersioncclassifierppackaging。这就是为什么你的同事认为它看起来像 Maven 配置的原因,因为我们使用这个 API 作为扩展的逻辑。

请参阅此脚本文件:NexusTask.ts

var nexusUploadUrl = Util.addUrlSegment(serverEndpointUrl, 'service/local/artifact/maven/content');
tl.debug('nexusUploadUrl=' + nexusUploadUrl);
     ...
     ...
     ...
var formData = {
    // Pass a simple key-value pair
    r: repositoryId,
    g: groupId,
    a: artifactId,
    v: artifactVersion,
    c: classifier,
    p: packaging,
    e: extension,
    // Pass data via Streams
    my_file: fs.createReadStream(fileName)
};

var postData: any = { url: nexusUploadUrl, formData: formData, strictSSL: !trustSSL };

这是脚本的一小部分。您可以清楚地了解扩展使用的 API 及其参数。

所以,这个扩展和任务没有错,只是它的逻辑是使用 Nexus 2.x API。

但是,您需要注意此扩展目前仅支持Nexus 2.x。如果您使用的是 Nexus 3.x,您最好使用 Maven pom.xml 文件通过 Nexus 的 Maven 支持将工件上传到 Nexus。

由于您想要构建一个 docker 镜像然后将其上传到 Nexus,因此您可以使用 Docker 任务构建 docker 镜像,然后使用此任务或 Maven 将此镜像上传到 Nexus。


推荐阅读