【问题标题】:Getting repository commit messages with Ant to update Crashlytics Beta release notes for builds using VSTS or Bitrise使用 Ant 获取存储库提交消息以更新使用 VSTS 或 Bitrise 构建的 Crashlytics Beta 发行说明
【发布时间】:2016-10-05 13:31:14
【问题描述】:

我对 CI 有点陌生,所以我希望你们能提供尽可能多的细节。

我为不同的原生 Android 应用程序配置了两个构建服务器,一个使用 Bitrise,另一个使用 VSTS(Visual Studio Team Services),我还配置了一个启用了 Crashlytics/Beta 工具包的 Fabric 帐户以自动分发 APK每个构建。 我需要添加一个构建步骤或一些配置,可能使用 Ant 或其他方式,以使用来自存储库中提交的消息更新上传到 Fabric 的每个构建的发行说明,以进行测试。

提前致谢!


这是我的 VSTS 配置截图

Powershell 脚本:

蚂蚁脚本:

以及根文件夹中的 build.xml (Ant) 和 script_release_notes.txt (Powershell) 的屏幕截图:

【问题讨论】:

  • 来自 Fabric 的 Mike。如果在构建流程中,您可以将提交保存到 .txt 文件,然后您可以通过 Ant Beta 发布命令上传该文件:-DbetaDistributionReleaseNotesFilePath=release_notes.txt
  • 谢谢迈克。实际上,这是我手动完成的一部分。我需要的是自动从提交中获取数据,这样我就可以以某种方式创建 de 文件并上传它。
  • 啊,好吧!抱歉,我对这方面不太熟悉。

标签: android git azure-devops crashlytics-beta bitrise


【解决方案1】:

对于 Bitrise,如果您使用 Git Clone 步骤将提交信息公开为环境变量,然后您可以在任何您想要的地方使用它,就像任何其他环境变量一样。

您可以在此处找到 Git 克隆步骤的导出“输出”(环境变量)的完整列表:https://github.com/bitrise-io/steps-git-clone/blob/master/step.yml#L80

编辑:如果您想将这些保存到 release_notes.txt 文件中,您可以简单地使用 echo "$the_env_var" >> release_notes.txt,例如使用Script 步骤。

要将完整的提交消息保存到发行说明中:

#!/bin/bash
# fail if any commands fails
set -e
# debug log
set -x

echo "$GIT_CLONE_COMMIT_MESSAGE_SUBJECT" > release_notes.txt
echo "$GIT_CLONE_COMMIT_MESSAGE_BODY" >> release_notes.txt

【讨论】:

  • 嗨 Viktor 非常感谢,实际上答案部分有效。现在我只有最后一次提交的信息作为发行说明的一部分。如何从以前的提交中获取信息,最好是自上次构建以来的所有提交?
  • @AlejandroCasanovaMutis 目前没有 env var - 您可以在此处找到相关的功能请求,并说明为什么这不是一件小事:bitrise.uservoice.com/forums/235233-general/suggestions/…
【解决方案2】:

对于 VSTS 构建,您可以添加 PowerShell 脚本任务以通过 VSTS Rest API 获取当前构建的提交消息。

以下是获取此脚本的示例 powershell 脚本,您需要在构建定义中启用“允许脚本访问 OAuth 令牌”选项才能使用此脚本。

$collectionuri = $env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
$buildid = $env:BUILD_BUILDID
$project = $env:SYSTEM_TEAMPROJECT
$token = $env:SYSTEM_ACCESSTOKEN

$basicAuth= ("{0}:{1}"-f "anys",$token)
$basicAuth=[System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth=[System.Convert]::ToBase64String($basicAuth)
$headers= @{Authorization=("Basic {0}"-f $basicAuth)}

$url= $collectionuri + $project + "/_apis/build/builds/" + $buildID + "/changes?api-version=2.0"

$getbuildchanges = Invoke-RestMethod -Uri $url -headers $headers -Method Get | select value

foreach ($commit in $getbuildchanges.value)
{
    Write-Host $commit.id;
    $commit.id | Out-File -filepath commitmessages.txt -Append;
    Write-Host $commit.message;
    $commit.message | Out-File -filepath commitmessages.txt -Append;
}

更新:请尝试以下脚本:

$collectionuri = $env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
$buildid = $env:BUILD_BUILDID
$project = $env:SYSTEM_TEAMPROJECT
$token = $env:SYSTEM_ACCESSTOKEN

$basicAuth= ("{0}:{1}"-f "anys",$token)
$basicAuth=[System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth=[System.Convert]::ToBase64String($basicAuth)
$headers= @{Authorization=("Basic {0}"-f $basicAuth)}

$url= $collectionuri + $project + "/_apis/build/builds/" + $buildID + "/changes?api-version=2.0"

$getbuildchanges = Invoke-RestMethod -Uri $url -headers $headers -Method Get;

if($getbuildchanges.count -ne 0)
{
foreach ($commit in $getbuildchanges.value)
{
    Write-Host $commit.id;
    $commit.id | Out-File -filepath release_notes.txt -Append;
    Write-Host $commit.message;
    $commit.message | Out-File -filepath release_notes.txt -Append;
}
}
else
{
    $nocommitfound = "There is no commit related to current build.";
    Write-Host $nocommitfound;
    $nocommitfound | Out-File -filepath release_notes.txt -Append;
}

【讨论】:

  • 感谢@Eddie - MSFT。现在构建失败并出现此错误 FileNotFoundException: release_notes.txt (系统找不到指定的文件) 这是 powerShell 脚本的输出:2016-10-12T15:59:48.0606069Z ##[section]Starting: Generate commit发行说明摘要##[命令]。 'C:\a\1\s\script_release_notes.txt' ##[section]Finishing: Generate commit summary for release notes 我用于文件的参数是 -DfilePath=release_notes.txt。我用这个文件名更新了脚本。有什么想法吗?
  • @AlejandroCasanovaMutis 你能分享你更新的脚本吗?将文件名更改为“release_notes.txt”后,我无法重现该问题。
  • 脚本和你的完全一样,只是这两行: .... $commit.id | Out-File -filepath release_notes.txt -Append; ... $commit.message | Out-File -filepath release_notes.txt -Append;有没有办法输出文件名/路径以确保它正在生成它?
  • @AlejandroCasanovaMutis 请尝试使用我的答案中的更新代码,看看它是否有效。
  • 我对更新后的脚本有相同的结果。找不到 release_notes.txt。来自 powershell 的日志一直说 -- ##[command]。 'C:\a\1\s\script_release_notes.txt' 我没有看到我需要的文件 (release_notes.txt) 或其位置的任何证据。我怎么知道?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2011-09-13
  • 2017-12-18
  • 2019-06-23
  • 2011-01-25
  • 1970-01-01
相关资源
最近更新 更多