我有一个库,其源代码托管在GitHub上,并配置为基于Appveyor CI(例如https://github.com/vostok/temp-library/blob/master/appveyor.yml)。
我想在不同的平台上构建和测试该库:
自然,我将配置一个构建矩阵以在不同平台上构建。但是,如果所有平台上的所有构建都成功了,我想构建并推送一个NuGet包 only 。
如何在Appveyor上配置类似的内容?
答案 0 :(得分:0)
要在Ubuntu和Windows上运行测试,还需要先进行构建。因此,您需要做的就是让Windows作业等待其他人(我不确定哪个Windows作业,因为您有两个,但我相信您知道)。
因此,要使一个矩阵作业等待其他任务,您需要执行一些脚本编写。请将此示例用作参考。
write-host "Waiting for other jobs to complete"
$headers = @{
"Authorization" = "Bearer $env:ApiKey"
"Content-type" = "application/json"
}
[datetime]$stop = ([datetime]::Now).AddMinutes($env:TimeOutMins)
[bool]$success = $false
while(!$success -and ([datetime]::Now) -lt $stop) {
$project = Invoke-RestMethod -Uri "https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG" -Headers $headers -Method GET
$success = $true
$project.build.jobs | foreach-object {if (($_.jobId -ne $env:APPVEYOR_JOB_ID) -and ($_.status -ne "success")) {$success = $false}; $_.jobId; $_.status}
if (!$success) {Start-sleep 5}
}
if (!$success) {throw "Test jobs were not finished in $env:TimeOutMins minutes"}
如果您有多个并发作业,则可以使其等待更长的时间。如果只有一个并发作业,请减少等待时间(因为上一个作业开始时有一个并发作业,而其他作业已经以一种或另一种方式完成了
要使此脚本和Nuget部署仅在特定的Windows作业中运行,specialize matrix job configuration
$env:ApiKey
,您到达https://ci.appveyor.com/api-token,并存储为secure variable。