【问题标题】:Can you pass a file to an azure pipeline?您可以将文件传递到天蓝色管道吗?
【发布时间】:2021-01-03 10:30:51
【问题描述】:

我有一个用 Typescript 编写的网站,该网站有一个按钮,可以触发 azure 管道运行。我想将网站中的某些内容作为参数传递给管道,我看到 here 可以将 .yaml 结构作为 object 传递给管道。

是否可以将从 .xlsx 文件转换的 .yaml 传递到管道,如何处理?清除:该网站有一个文件上传,我需要用户在管道中的一个步骤中传递的 .xlsx 文件的内容。没有后端,只有网站。

如果不可能,我该怎么做?

【问题讨论】:

    标签: typescript yaml azure-pipelines


    【解决方案1】:

    因为您可以将 .yaml 结构作为对象传递给管道。您可以尝试以下解决方法。

    在您的管道中定义 Runtime parameters 以保存 .xlsx 文件的值内容。见下文:

    parameters:
    - name: contentKey
      displayName: Pool Image
      default: contentDefaultValue
    

    然后您可以在您的网站中使用pipeline run rest api 并在请求正文中提供templateParameters 以使用.xlsx 文件的内容覆盖您的管道中定义的运行时参数。见下文:

    {
      "templateParameters":{
         "contentKey": "contentValue"
      }
    }
    

    如果你必须在管道中传递 yaml 文件。您可以尝试将 yaml 文件上传到 azure devops。然后在您的管道中下载 yaml 文件。以便管道步骤可以访问 yaml 文件。

    以下是将 yaml 文件上传到 azure devops 的可能方法。

    1,您可以在 azure devops 项目中创建一个存储库来保存 yaml 文件。并通过您网站中的 api 将文件上传到存储库。请在此处查看example。参见rest apihere。

    然后您可以在脚本任务中运行git clone command 以下载管道中的文件。

    2,您可以使用上传文件到工作项附件。请在此处查看rest api。

    并在运行管道时将附件 id 传递给管道(您可以参考上面的解决方法并定义一个运行时参数来保存 id 值)。

    然后您需要调用rest api 来获取管道中脚本任务中的yaml 文件。

    3、将yaml文件上传到azure devops安全文件。见this thread。

    然后使用 download secure file 任务下载管道中的 yaml 文件。

    希望以上有所帮助!

    更新:

    在 yaml 管道文件中。你可以定义你的参数如下:

    parameters:
      - name: paramname
        type: object
        displayName: 'configure path'
        default: 
          param1: '[{\"a\":\"x\",\"b\":\"y\"},{\"a\":\"x\",\"b\":\"y\"}]'
          param2: 'string1'
          param3: 'string2'
    

    在其余的 api 中。您可以按如下方式传递请求正文:

    {
      "templateParameters":{
            "paramname": "{\"param1\":\"'[{\\'a\\':\\'x\\',\\'b\\':\\'y\\'},{\\'a\\':\\'x\\',\\'b\\':\\'y\\'}]'\",\"param2\":\"string11\", \"param3\":\"string22\"}"
          }
    }
    

    然后你可以像下面这样访问bash任务中的参数:

     echo "${{parameters.paramname.param1}}"
     echo "${{parameters.paramname.param2}}"
    

    【讨论】:

    • 非常感谢您的详尽回答!第一种方法看起来像我需要的。但我对这种方法有疑问:displayName: Pool Image 是做什么的? Pool Image 是我需要替换的占位符吗?
    • 是你在排队管道时在ui页面看到的参数的显示名称。您可以替换它或根本不指定显示名称。
    • 感谢displayName 的信息!我会在尝试后立即接受答案!我必须在网站上处理其他一些内容,今天或明天将完成这部分。
    • 您能帮我弄清楚如何正确访问对象的值吗?我似乎做错了。我的对象具有这样的结构:[param1:[{a:'x',b:'y',c:'z'},{a:'x1',b:'y1',c:'z1'}...], param2:'string', param3:'string']。当我尝试运行我将此任务放入作业的管道时:- bash: echo ${{parameters.paramname.param1}} 或- bash: echo ${{parameters.paramname[0][0]}} 我在输出中看不到任何内容。它似乎能够读取结构,因为在第二个示例中,如果我留下一个[0],它会说“无法将对象转换为字符串”
    • 啊,这一定很混乱。由于我必须在网站上进行一些更改,因此我认为我需要将另外两个参数发送到我试图通过将这些变量添加到一个包含原始数据/ xlsx 数据的大型 JSON 对象中来实现的参数,和两个字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    相关资源
    最近更新 更多