如何在 VSTS 上使用一个命令的输出作为另一个命令的输入 CI
How to use output of one command as an input to another on VSTS CI
我正在尝试使用 AWS CLI 命令在 Microsoft 的 Visual Studio Team Services (VSTS) that includes AWS CLI task. I have some steps for building an iOS app and those steps are successfully executed. Then, I want to upload generated .ipa
files to AWS Device Farm 上设置 CI。
要将文件上传到 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 我必须发送 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
和 curl
)来上传单个文件,其中第二个任务取决于第一个任务的输出。如何在 VSTS 构建任务之间保存输出(并解析它以获取 url
对象的值)并将该输出传递给另一个任务?或者,我是否可以避免使用 curl
并仅使用带有单个命令的 aws
工具将文件上传到 Device Farm?
注意:我正在使用连接到 VSTS 的 Mac 强力代理,因此所有这些命令都在 OS X 上执行。
没有output variable in AWS CLI task, you may submit the issue here: https://github.com/aws/aws-vsts-tools/issues
解决方法是可以通过Build Log REST API获取任务日志,因此可以调用REST API获取任务日志(例如通过curl),然后从日志中提取数据。
如果您可以将 echo
添加到第一个 script/command,则可以使用 ##vso[task.setvariable]value
消息将该值作为环境变量传递给第二个 script/command。在 Logging Commands.
查看详细信息
你好,我对 VSTS 不太熟悉,但我看到你正在使用 mac,所以如果你想要一个完整的 BASH 实现,你可以做类似的事情。
var=$(cat file.txt | jq -r '.upload.url')
curl -T TEST.ipa $var
我正在尝试使用 AWS CLI 命令在 Microsoft 的 Visual Studio Team Services (VSTS) that includes AWS CLI task. I have some steps for building an iOS app and those steps are successfully executed. Then, I want to upload generated .ipa
files to AWS Device Farm 上设置 CI。
要将文件上传到 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 我必须发送 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
和 curl
)来上传单个文件,其中第二个任务取决于第一个任务的输出。如何在 VSTS 构建任务之间保存输出(并解析它以获取 url
对象的值)并将该输出传递给另一个任务?或者,我是否可以避免使用 curl
并仅使用带有单个命令的 aws
工具将文件上传到 Device Farm?
注意:我正在使用连接到 VSTS 的 Mac 强力代理,因此所有这些命令都在 OS X 上执行。
没有output variable in AWS CLI task, you may submit the issue here: https://github.com/aws/aws-vsts-tools/issues
解决方法是可以通过Build Log REST API获取任务日志,因此可以调用REST API获取任务日志(例如通过curl),然后从日志中提取数据。
如果您可以将 echo
添加到第一个 script/command,则可以使用 ##vso[task.setvariable]value
消息将该值作为环境变量传递给第二个 script/command。在 Logging Commands.
你好,我对 VSTS 不太熟悉,但我看到你正在使用 mac,所以如果你想要一个完整的 BASH 实现,你可以做类似的事情。
var=$(cat file.txt | jq -r '.upload.url')
curl -T TEST.ipa $var