我使用这个天蓝色的管道,它对我来说工作得很好:
trigger: none
schedules:
- cron: "0/10 * * * *"
displayName: Nuget JFrog to Azure DevOps Artifacts
branches:
include:
- main
always: true
jobs:
- job: SyncArtifactory
pool:
name: 'Ubuntu-latest'
steps:
- task: JfrogCliV2@1
inputs:
jfrogPlatformConnection: 'JFrog Artifactory'
command: 'jf rt dl randomPath/Random.Nuget.Package.1.0.1.nupkg'
- task: NuGetCommand@2
inputs:
command: 'push'
packagesToPush: '$(System.DefaultWorkingDirectory)/Random.Nuget.Package.1.0.1.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: '<Azure_Devops_Feed>'
现在我想修改此管道以动态部署 nuget。我的意思是这样的:
trigger: none
schedules:
- cron: "0/10 * * * *"
displayName: Nuget JFrog to Azure DevOps Artifacts
branches:
include:
- main
always: true
parameters:
- name: packages
type: object
default:
- name: "Random.Nuget.Package.1"
version: "latest"
- name: "Random.Nuget.Package.2"
version: "latest"
- name: "Random.Nuget.Package.3"
version: "latest"
jobs:
- job: SyncArtifactory
pool:
name: 'Ubuntu-latest'
steps:
- ${{ each package in parameters.packages }}:
- task: JfrogCliV2@1
inputs:
jfrogPlatformConnection: 'JFrog Artifactory'
command: 'jf rt s "randomPath/Random.Nuget.Package/*" --limit 1 --sort-by created --sort-order desc --format json'
displayName: 'Search for Latest Package ${{ package.name }}'
name: ${{ format('SearchPackage_{0}', replace(package.name, '.', '_')) }}
- script: |
latest_version=$(jq -r '.[].name' $(System.DefaultWorkingDirectory)/${{ format('SearchPackage_{0}', replace(package.name, '.', '_')) }}.json)
echo "##vso[task.setvariable variable=LATEST_VERSION]$latest_version"
displayName: 'Set Latest Version Variable'
- task: JfrogCliV2@1
inputs:
jfrogPlatformConnection: 'JFrog Artifactory'
command: |
jf rt dl randomPath/${{ package.name }}/${{ variables.LATEST_VERSION }}.nupkg
displayName: 'Download Latest Package ${{ package.name }}'
- task: NuGetCommand@2
inputs:
command: 'push'
packagesToPush: '$(System.DefaultWorkingDirectory)/${{ package.name }}.${{ variables.LATEST_VERSION }}.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: '<Azure_Devops_Feed>'
displayName: 'Push Package to Azure Artifacts'
如果我使用修改后的脚本,则会出现此错误:
`在缓存中找到工具:jf 2.56.1 x64
从 /opt/azdevops/agent-02/_work/_tool/jf/2.56.1/x64/jf 运行 jfrog-cli
JFrog CLI版本:2.56.1
执行 JFrog CLI 命令:
/opt/azdevops/agent-02/_work/_tool/jf/2.56.1/x64/jf c 添加“test-nuget_20240523.26_jfrog_cli_cmd_1716472614658” --url="https://
姓名: jf rt search - 在 Artifactory 中搜索文件。
--server-id [可选] 使用 config 命令配置的服务器 ID。 --sort-by [可选] 用于排序的分号分隔 (;) 字段列表。这些字段必须是“items”AQL 域的一部分。有关更多信息,请参阅https://jfrog.com/help/r/jfrog-artifactory-documentation/artifactory-query-language --sort-order [默认值:asc] “sort-by”选项中字段的排序顺序。接受“asc”或“desc”。 --spec [可选] 文件规范的路径。 --spec-vars [可选] 要在文件规范中替换的以分号分隔的 (;) 变量列表,格式为“key1=value1;key2=value2;...”(用引号引起来)。在文件规范中,变量应按如下方式使用:${key1}。 --ssh-key-path [可选] SSH 密钥文件路径。 --ssh-passphrase [可选] SSH 密钥密码。 --transitive [默认值: false] 设置为 true 可在远程存储库中查找工件。搜索将在虚拟存储库中的前五个远程存储库上运行。适用于 Artifactory 版本 7.17.0 或更高版本。 --url [可选] JFrog Artifactory URL。 --user [可选] JFrog 用户名。
环境变量: JFROG_CLI_FAIL_NO_OP [默认值:假] 如果您希望命令在没有文件受到影响的情况下返回退出代码 2,请设置为 true。 支持以下命令:复制、删除、delete-props、set-props、下载、移动、搜索和上传
##[错误]错误:命令失败:/opt/azdevops/agent-02/_work/_tool/jf/2.56.1/x64/jf rt s“randomPath/Random.Nuget.Package/*”--limit 1 --sort-by 创建 --sort-order desc --format json 执行 JFrog CLI 命令: /opt/azdevops/agent-02/_work/_tool/jf/2.56.1/x64/jf c 删除“test-nuget_20240523.26_jfrog_cli_cmd_1716472614658”--quiet `
所以我想第一步检查一下 JFrog 中是否有最新版本,如果有,我将开始下载最新版本 .nupkg 并将其推送到 Azure Devops Artifacts。
你能帮我解决这个问题吗?
据我测试,运行相同的 JFrog CLI 命令
jf rt s "randomPath/Random.Nuget.Package/*" --limit 1 --sort-by created --sort-order desc --format json
失败,并出现与 --fortmat json
相同的错误,不是有效的参数。
此外,第3方扩展任务``不支持
jf
以外的命令。
如果您期望使用 JFrog CLI 在 JFrog Artifactory 中搜索最新版本的包,下载该 NuGet 包并推送到 Azure Artifact feed,恐怕您无法通过该扩展任务执行此操作。
但是,进一步了解 JFrog 命令后,您可以使用脚本来执行此操作。这是一个示例管道供您参考。
trigger: none
pool:
vmImage: ubuntu-latest
steps:
- script: |
echo "================ 1. Install JFrog CLI on Ubuntu Microsoft-hosted agent ================"
curl -fL https://install-cli.jfrog.io | sh
jf -version
echo "================ 2. Establish access to JFrog with authentication against APIKey ================"
jf config add --password "$(APIKey)" --url "https://$(JFrogHost).jfrog.io/" --interactive=false
jf config show
echo "================ 3. Search for the latest version of JFrog package and download ================"
latestPackage=$(jf rt s "jfrog-nuget/Random.Nuget.Package/*" --limit 1 --sort-by created --sort-order desc)
echo -e Package info:\n"$latestPackage"
packagePath=$(echo "$latestPackage" | jq -r '.[0].path')
echo Path is "$packagePath"
jf rt dl $packagePath
echo "================ 4. Check the files in System.DefaultWorkingDirectory ================"
tree $(System.DefaultWorkingDirectory)
- task: NuGetCommand@2
inputs:
command: 'push'
packagesToPush: '$(System.DefaultWorkingDirectory)/Random.Nuget.Package/*.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: '$(System.TeamProject)/AzureArtifactFeed-FromJFrog'
allowPackageConflicts: true