如何通过 UniversalPackages 将包上传到 Azure devops 管道中的外部私有 noarch 存储库
How to upload a package by UniversalPackages to an external private noarch repo in Azure devops pipline
我们将所有构建包(conda 构建)保存在我们的 jFrog artifactory 服务器中作为压缩的 tar.bz2 文件,可以通过 URL、用户名和密码访问。目前这是由如下所示的 cURLUploader 任务完成的
- task: cURLUploader@2
displayName: Upload to TTI Artifactory
inputs:
files: '$(Build.ArtifactStagingDirectory)/$(packageName)-$(Build.BuildId).tar.bz2'
authType: 'userAndPass'
username: 'admin'
password: '123'
url: 'https://artifactory.xyz.com/abc/local/'
redirectStderr: true
其中一个问题是很难控制版本控制。将某种 Major.Minor.Patch
而不是 Build.BuildId
作为压缩文件名的一部分会很好。我正在考虑使用 UniversalPakages 任务来完成这项工作。它请求将凭据保存在 serviceConnection 中。而这一步遇到了问题。
- task: UniversalPackages@0
inputs:
command: publish
feedsToUse: external
externalFeedCredentials: jfrogConnect # Errors appears when creating the service connection
publishDirectory: '$(Build.ArtifactStagingDirectory)'
feedsToUsePublish: external
feedPublishExternal: https://artifactory.xyz.com/abc/local/
packagePublishExternal: $(packageName)
versionOption: patch
packagePublishDescription: Upload Package to xyz-local artifactory
当我尝试为 jFrog artifactory repo (https://artifactory.xyz-local/noarch/
) 创建服务连接时 returns 错误
Failed to query service connection API: 'https://artifactory.xyz-local/noarch/api/plugins'. Error Message: 'An error occurred while sending the request.'
更新: 存储库位于我们的私有 vNet 中,因此服务连接无法访问此 url,我认为这就是导致此问题的原因。接下来的问题是如何创建服务连接以访问您的私有资源。管道任务在我们的私有代理中是 运行,它能够访问资源。 (由 cURLUploader 任务证明)
The question then would be how to create a service connection to access your private resources. The pipeline task is running in our private agent it is able to access the resource. (proved by the cURLUploader task)
由于你的jFrog artifactory repo在私有资源中,无法从外网验证,会导致验证失败。
要解决此问题,您可以尝试使用选项创建连接 不验证即保存:
注意:您只能在相同的私有资源中将此连接与您的私人代理一起使用。
我们将所有构建包(conda 构建)保存在我们的 jFrog artifactory 服务器中作为压缩的 tar.bz2 文件,可以通过 URL、用户名和密码访问。目前这是由如下所示的 cURLUploader 任务完成的
- task: cURLUploader@2
displayName: Upload to TTI Artifactory
inputs:
files: '$(Build.ArtifactStagingDirectory)/$(packageName)-$(Build.BuildId).tar.bz2'
authType: 'userAndPass'
username: 'admin'
password: '123'
url: 'https://artifactory.xyz.com/abc/local/'
redirectStderr: true
其中一个问题是很难控制版本控制。将某种 Major.Minor.Patch
而不是 Build.BuildId
作为压缩文件名的一部分会很好。我正在考虑使用 UniversalPakages 任务来完成这项工作。它请求将凭据保存在 serviceConnection 中。而这一步遇到了问题。
- task: UniversalPackages@0
inputs:
command: publish
feedsToUse: external
externalFeedCredentials: jfrogConnect # Errors appears when creating the service connection
publishDirectory: '$(Build.ArtifactStagingDirectory)'
feedsToUsePublish: external
feedPublishExternal: https://artifactory.xyz.com/abc/local/
packagePublishExternal: $(packageName)
versionOption: patch
packagePublishDescription: Upload Package to xyz-local artifactory
当我尝试为 jFrog artifactory repo (https://artifactory.xyz-local/noarch/
) 创建服务连接时 returns 错误
Failed to query service connection API: 'https://artifactory.xyz-local/noarch/api/plugins'. Error Message: 'An error occurred while sending the request.'
更新: 存储库位于我们的私有 vNet 中,因此服务连接无法访问此 url,我认为这就是导致此问题的原因。接下来的问题是如何创建服务连接以访问您的私有资源。管道任务在我们的私有代理中是 运行,它能够访问资源。 (由 cURLUploader 任务证明)
The question then would be how to create a service connection to access your private resources. The pipeline task is running in our private agent it is able to access the resource. (proved by the cURLUploader task)
由于你的jFrog artifactory repo在私有资源中,无法从外网验证,会导致验证失败。
要解决此问题,您可以尝试使用选项创建连接 不验证即保存:
注意:您只能在相同的私有资源中将此连接与您的私人代理一起使用。