代码之家  ›  专栏  ›  技术社区  ›  Mladen

如何在VSTS CI上将一个命令的输出用作另一个命令的输入

  •  0
  • Mladen  · 技术社区  · 6 年前

    我正在尝试在Microsoft上设置CI Visual Studio Team Services (VSTS)包括 AWS CLI 任务我有一些构建iOS应用程序的步骤,这些步骤已成功执行。然后,我想上传生成的 .ipa 文件到 AWS Device Farm 使用AWS CLI命令。

    要将文件上载到AWS,我遵循 this documentation ,其中说明我必须运行 aws devicefarm create-upload ... 命令优先。此命令在VSTS上成功执行,并输出JSON格式的响应,如下所示:

    {
        "upload": {
            "arn": "arn:aws:devicefarm:us-west-2:123456789012:upload:070fc3ca-7ec1-4741-9c1f-d3e044efc506/dd72723a-ae9e-4087-09e6-f4cea3599514",
            "name": "MyAppiOSUITests_20180309.3.ipa",
            "created": 1520601466.978,
            "type": "IOS_APP",
            "status": "INITIALIZED",
            "url": "https://prod-us-west-2-uploads.s3-us-west-2.amazonaws.com/arn%3Aaws%3Adevicefarm%3Aus-west-2%3A123456789012%3Aproject%3A070fc3ca-c7e1-4471-91cf-d3e4efc50604/uploads/arn%3Aaws%3Adevicefarm%3Aus-west-2%3A123456789012%3Aupload%3A070fc3ca-7ec1-4741-9c1f-d3e044efc506/dd72723a-ae9e-4087-09e6-f4cea3599514/app.apk?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20170824T224008Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=AKIAEXAMPLEPBUMBC3GA%2F20170824%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=05050370c38894ef5bd09f5d009f36fc8f96fa4bb04e1bba9aca71b8dbe49a0f"
        }
    }
    

    这基本上意味着这个命令只是准备上传,要上传真正的文件,我必须在之后执行HTTP PUT(使用 curl 如建议)。

    在JSON响应中,我得到 url 对象,其值是一个URL,我必须将该URL与要上载的文件一起发送HTTP POST请求,如下所示:

    curl -T MyAppiOSUITests_20180309.3.ipa "https://prod-us-west-2-uploads.s3-us-west-2.amazonaws.com/arn%3Aaws%3Adevicefarm%3Aus-west-2%3A123456789012%3Aproject%3A070fc3ca-c7e1-4471-91cf-d3e4efc50604/uploads/arn%3Aaws%3Adevicefarm%3Aus-west-2%3A123456789012%3Aupload%3A070fc3ca-7ec1-4741-9c1f-d3e044efc506/dd72723a-ae9e-4087-09e6-f4cea3599514/app.apk?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20170824T224008Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=AKIAEXAMPLEPBUMBC3GA%2F20170824%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=05050370c38894ef5bd09f5d009f36fc8f96fa4bb04e1bba9aca71b8dbe49a0f"
    

    问题是我必须使用两个任务( aws 卷曲 )上载单个文件,其中第二个文件取决于第一个文件的输出。如何在VST构建任务之间保存输出(并对其进行解析以获得 url地址 对象)并将该输出传递给另一个任务?或者,我可以避免使用 卷曲 而且只要使用 美国焊接学会 使用单一命令将文件上载到设备场的工具?

    笔记 :我使用的是连接到VST的Mac powered agent,因此所有这些命令都是在OS X上执行的。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Scott Theriault    6 年前

    您好,我对VST不太熟悉,但我知道您使用的是mac,所以如果您想要一个完整的BASH实现,可以执行以下操作。

    var=$(cat file.txt | jq -r '.upload.url')
    curl -T TEST.ipa $var
    
        2
  •  1
  •   starian chen-MSFT    6 年前

    没有 output variable 在AWS CLI任务中,您可以在此处提交问题: https://github.com/aws/aws-vsts-tools/issues

    解决方法是您可以通过 Build Log REST API ,因此您可以调用REST API来获取任务日志(例如通过curl),然后从日志中提取数据。

        3
  •  1
  •   Giulio Vian    6 年前

    如果可以添加 echo 对于第一个脚本/命令,可以使用 ##vso[task.setvariable]value 消息详情请参见 Logging Commands