1

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

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

提前致谢!


这是我的 VSTS 配置的屏幕截图

Powershell脚本: 在此处输入图像描述

蚂蚁脚本: 在此处输入图像描述

以及 build.xml (Ant) 和 script_release_notes.txt (Powershell) 的屏幕截图,它们位于根文件夹中: 在此处输入图像描述

4

2 回答 2

3

在 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
于 2016-10-06T08:37:48.007 回答
0

对于 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;
}
于 2016-10-07T06:58:23.433 回答