2016-10-05 12 views
1

Я как бы новичок в CI, поэтому я был бы признателен за столько деталей, сколько вы можете мне дать.Получение сообщений о фиксации репозитория с Ant для обновления Crashlytics Замечания по выпуску бета-версии для сборки с использованием VSTS или Bitrise

Я настроил два сервера сборки для разных приложений для Android, один использует Bitrise и другие VSTS (Visual Studio Team Services), я также настроил учетную запись Fabric с комплектом Crashlytics/Beta, позволяющим автоматически распространять APK в каждой сборке. Мне нужно добавить шаг сборки или некоторую конфигурацию, возможно, используя Ant или что-то еще, для обновления примечаний к выпуску для каждой сборки, загруженной в Fabric для тестирования, с использованием сообщений от коммитов в репозитории.

Заранее благодарен!


Вот скриншоты моей конфигурации VSTS

Powershell Сценарий: enter image description here

Ant скрипт: enter image description here

А скриншот как build.xml (Ant) и script_release_notes .txt (Powershell), которые находятся в корневой папке: enter image description here

+0

Майк из ткани здесь. Если во время потока сборки вы можете сохранить коммиты в файл .txt, вы можете загрузить его через команду релиза Ant Beta: -DbetaDistributionReleaseNotesFilePath = release_notes.txt –

+0

Спасибо Майку. На самом деле это одна часть, которую я делаю вручную. Мне нужно, чтобы автоматически получить данные из коммитов, чтобы я мог каким-то образом создать файл и загрузить его. –

+0

Ах, ладно! Извините, но я менее знаком с этой стороной вещей. –

ответ

2

В случае битрейза, если вы используете шаг Git Clone, который предоставляет информацию о фиксации в качестве переменных среды, которую вы можете использовать в любом месте, где хотите, как и любая другая переменная среды.

Вы можете найти полный список экспортируемых «выходов» (переменные окружения) Клонов шаг Git здесь: https://github.com/bitrise-io/steps-git-clone/blob/master/step.yml#L80

Edit: Если вы хотите, чтобы сохранить их в файл 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 
+0

Привет, Виктор очень благодарен, на самом деле ответ частично сработал. Теперь у меня есть только информация для последнего фиксации как часть примечаний к выпуску. Как я могу получить информацию от предыдущих коммитов, в идеале все фиксируются с момента последней сборки? –

+0

@AlejandroCasanovaMutis для этого сейчас нет env var. Вы можете найти связанный запрос функции с описанием, почему здесь нет тривиальной вещи: https://bitrise.uservoice.com/forums/235233-general/suggestions/6901955 -expose-previous-build-information-eg-git-commit –

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; 
} 
+0

Спасибо @Eddie - MSFT. Теперь сборка не работает с этой ошибкой FileNotFoundException: release_notes.txt (система не может найти указанный файл) Это результат для скрипта powerShell: 2016-10-12T15: 59: 48.0606069Z ## [раздел] Запуск : Сгенерировать сводку фиксации для примечаний к выпуску ## [команда]. 'C: \ a \ 1 \ s \ script_release_notes.txt' ## [раздел] Завершение: сгенерировать сводку фиксации для заметок выпуска Параметр, который я использую для файла: -DfilePath = release_notes.txt. Я обновил сценарий с этим именем файла. Любые идеи? –

+0

@AlejandroCasanovaMutis Можете ли вы поделиться своим обновленным скриптом? Я не могу воспроизвести проблему на моей стороне с именем файла, измененным на «release_notes.txt». –

+0

Сценарий точно такой же, как и вы, изменения - это только две строки: .... $ commit.id | Out-File -filepath release_notes.txt -Append; ... $ commit.message | Out-File -filepath release_notes.txt -Append; Есть ли способ вывести имя файла/путь, чтобы убедиться, что он его генерирует? –