将 nuget 包从 JFrog artifactory 推送到 Azure DevOps Artifactory

问题描述 投票:0回答:1

我使用这个天蓝色的管道,它对我来说工作得很好:

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:///" --interactive=false -- user='**' --basic-auth-only --password-stdin 执行 JFrog CLI 命令: /opt/azdevops/agent-02/_work/_tool/jf/2.56.1/x64/jf c 使用“test-nuget_20240523.26_jfrog_cli_cmd_1716472614658” 13:57:06 [信息] 使用服务器 ID 'test-nuget_20240523.26_jfrog_cli_cmd_1716472614658' (https:///) 执行 JFrog CLI 命令: /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 --格式化 json 13:57:06 [错误] 参数数量错误 (3)。您可以在 https://jfrog.com/help/r/jfrog-cli

阅读文档

姓名: 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。

你能帮我解决这个问题吗?

azure-devops yaml nuget-package jfrog-cli jfrog-pipelines
1个回答
0
投票

据我测试,运行相同的 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

© www.soinside.com 2019 - 2024. All rights reserved.