CODECAVE
Время чтения: 3 мин.

Автоматизация журнала изменений с помощью Azure DevOps и Confluence

Автоматизация журнала изменений с помощью Azure DevOps и Confluence

В динамичном мире разработки ПО крайне важно вести подробный учёт изменений. Журнал изменений (changelog) — ключевой инструмент, который фиксирует каждое обновление, исправление и новую функцию в проекте. Интеграция Azure DevOps с Confluence позволяет выстроить удобную систему ведения журналов изменений, которая делает работу прозрачнее и эффективнее. В этой статье рассказываем, как автоматизировать создание журнала изменений в Confluence с помощью скрипта PowerShell, который получает информацию о релизах из репозитория Azure DevOps.

К концу статьи у вас будет скрипт, который с помощью команд Git автоматически извлекает сведения об изменениях между последней и предыдущей версиями репозитория. Затем с помощью модуля ConfluencePS он создаёт в Confluence новую страницу с журналом изменений. Скрипт настроен на запуск в Azure Pipelines при определённых условиях, например при создании нового тега в репозитории.

Приступим!

Что нам понадобится?

  1. Получить информацию о релизе.
  2. Получить журнал изменений между предыдущей и последней версиями.
  3. Создать страницу в Confluence.
  4. Настроить интеграцию с Azure Pipelines.

Начнём с подготовки Confluence: создадим новую папку для журналов изменений. Для этого выполним следующие шаги:

Шаг 1. Создание родительской страницы:

  • Войдите в свой аккаунт Confluence.
  • Перейдите в пространство (Space), в котором хотите создать папку для журналов изменений.
  • Создайте новую страницу — она станет родительской для всех будущих страниц с журналами изменений. Для этого выберите «Create» и следуйте инструкциям по созданию страницы.

Шаг 2. Получение SpaceKey:

  • SpaceKey обычно отображается в URL, когда вы находитесь в пространстве Confluence.
  • Если ключа в URL нет, его можно найти в разделе Space tools > Overview > Space details.

Шаг 3. Получение ID родительской страницы:

  • ID родительской страницы (ParentID) можно найти в URL, открыв страницу, которая станет родительской для журналов изменений. Найдите в URL страницы параметр pageId — это и есть ParentID.

Шаг 4. URL сайта Confluence:

Теперь у вас есть всё необходимое, чтобы создавать новые страницы журналов изменений с помощью скрипта.

[⚠️ Внимание:]Убедитесь, что у вас есть права на создание и редактирование страниц в выбранном пространстве Confluence.

Шаг 5. Создание скрипта PowerShell

Создадим файл confluence.ps1 в корне репозитория.

Сначала скрипт получает список изменений между этими версиями. (Строки 1-11)

Затем с помощью модуля ConfluencePS скрипт создаёт в Confluence новую страницу с журналом изменений и передаёт её адрес в переменную окружения нашего пайплайна. (Строки 13-33)

Param ([String]$username, [String]$password) # Get username and password options from Azure Pipeline
$repoPath = "." # Set the repository path as the current directory
$currentVersion = git describe --abbrev=0 HEAD  # Get the latest version of the repository using git
# Write-Host $currentVersion
$prevVersion = git describe --abbrev=0 $currentVersion^  #Get the previous version of the repository using git
# Write-Host $prevVersion
$changelog = git log --no-merges --pretty="- %s<br />" "$prevVersion..$currentVersion"  #Get the list of changes between the two versions using git
# Write-Host $changelog
# exit -0
$confluenceUrl = "https://your.atlassian.net/wiki"  #Set the Confluence URL
$securePassword = $password | ConvertTo-SecureString -AsPlainText -Force #Convert the password to a secure string
$credentials = New-Object System.Management.Automation.PSCredential `
     -ArgumentList $username, $securePassword   #Create a credential object for Confluence
#Check if the module ConfluencePS is installed
if (-not (Get-Module -Name ConfluencePS -ListAvailable)) {
    Install-Module -Name ConfluencePS -Scope CurrentUser -Force
}
Import-Module ConfluencePS # Import the module ConfluencePS
Set-ConfluenceInfo -BaseURI $confluenceUrl -Credential $credentials   #Set the information about Confluence using the URL and credentials
$body = @"
<h2>What's new in comparison with version $prevVersion</h2>
<pre>$changelog</pre>
"@
$page = New-ConfluencePage -Title "What's new in $currentVersion" -SpaceKey YOURSPACEKEY -ParentID YOUR_PARENT_ID -Body $body  #Create a new Confluence page with the given title, space key and body
$pageObj = Get-ConfluencePage -PageID $page.ID     # Get the Confluence page object by ID
Write-Output $pageObj.URL     #Print the page URL to the screen
Write-Host "##vso[task.setvariable variable=confluenceUrl]$($pageObj.URL)"    #Set the variable confluenceUrl for Azure Pipeline using the page URL

[⚠️ Внимание:] Чтобы использовать этот скрипт, измените следующее:
> $confluenceUrl — на URL вашего сайта Confluence. (строка 13)
YOURSPACEKEY — на ключ вашего пространства в Confluence. (строка 30)
YOUR_PARENT_ID — на ID родительской страницы, под которой нужно создать новую. (строка 30)
• Убедитесь, что Git установлен и доступен в пути, из которого запускается скрипт.
• Убедитесь, что у вас есть права на создание страниц в указанном пространстве Confluence.
• Если вы не используете Azure Pipeline, удалите строки, связанные с Write-Host "##vso[task.setvariable variable=confluenceUrl]$($pageObj.URL)", или измените их под свою среду выполнения.

В скрипте можно поэкспериментировать с содержимым страницы и набором данных, которые попадают в журнал изменений.

Шаг 6. Интеграция с Azure Pipelines.

Задача настроена на запуск в Azure Pipelines и выполняется только при определённых условиях, например при создании нового тега в репозитории. Переменные $USERNAME и $PASSWORD хранятся в секретах пайплайна и передаются при его запуске. Задача запускает наш скрипт.

Azure Pipeline Task

- task: PowerShell@2
  condition: and(not(eq(variables['Build.Reason'], 'PullRequest')), BeginsWith(variables['Build.SourceBranch'], 'refs/tags/'))
  displayName: Create a changelog and create a page in Confluence.
  inputs:
    file path: .\confluence.ps1
    arguments: '-username $(USERNAME) -password $(PASSWORD)'

Добавьте эту задачу в свой пайплайн Azure. В результате у нас появилась страница с изменениями!

Итоги

Автоматизация журналов изменений с помощью Azure DevOps и Confluence упрощает документирование и поддерживает информацию в актуальном состоянии. Такой подход позволяет командам сосредоточиться на разработке и не тратить время на рутинное описание изменений.

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

Желаем вам отличного настроения и интересных задач!