Автоматическое создание задач в Jira очень легко реализовать с помощью PowerShell. Это может быть крайне полезно в сценариях обработки событий или для алертов систем мониторинга, которые будут автоматически создавать задачи в таск трекере при появлении особенно важных инцидентов.
Разработчики постарались для нас с вами – админов – и даже создали отдельный модуль PSJira, а потому вам не придется возиться с REST API напрямую. В этой статье рассмотрим простейшую логику для создания задач.
Создание задач в Jira
Внимательно изучите официальную документацию по модулю PSJira 1, открывайте PowerShell ISE и приступайте к работе. Если хотите сразу посмотреть исходники, заходите на GitHub.
Подготовка
Если у вас установлен PowerShell 5.0 (по умолчанию на Windows 10 или Windows Server 2016), то просто выполните команду 2 в консоли, запущенной с правами администратора:
1 |
Install-Module PSJira |
Если версия поша у вас ниже, то придется сначала подгрузить модуль PowerShellGet 3:
1 |
Install-Module -Name PowerShellGet -Force |
Если вдруг вылезла ошибка как внизу:
То сначала установите модуль PackageManagement 4. После этого возвращайтесь к самой первой команде в этой главе.
Теперь вы смело можете использовать все командлеты PSJira, которые вам необходимы.
Подключение
К этому моменту у вас уже должна быть создана учетная запись на Jira с необходимыми разрешениями. Это может быть доменный аккаунт. Для подключения используйте рабочий кусок кода ниже:
1 2 3 4 5 6 7 8 9 10 |
Set-JiraConfigServer -Server 'https://jira.domain.tld/' $Username = "username" $Password = ConvertTo-SecureString -String "password" ` -AsPlainText ` -Force $Cred = New-Object -TypeName System.Management.Automation.PSCredential ` -ArgumentList $Username, $Password New-JiraSession -Credential $Cred |
После этого можете выполнять любые команды для управления задачами. Например попробуем вытащить атрибуты любой задачи, чтобы посмотреть их содержимое. Для этого выполните команду:
1 |
Get-JiraIssue 'CI-275' | fl |
Где CI-275 – имя задачи, каким вы его видите в веб-интерфейсе.
Особенности работы
Если скрипт будет нормально запускаться из консоли Powershell, то это ещё не значит, что все будет хорошо при запуске через планировщик или другие приложения. Если вдруг столкнулись с проблемами, сделайте следующее:
1. Посмотрите какие директории у вас определены в системной переменной (просто выполните команду ниже в Powershell):
1 |
$Env:PSModulePath |
2. Скопируйте папку с установленным модулем в каждую директорию, которую вы увидели на предыдущем шаге. Сам модуль найдете тут:
1 |
C:\Program Files\WindowsPowerShell\Modules |
Кроме этого вам надо установить полные права на модуль в каждом каталоге для учетной записи, из под которой будет осуществлен запуск скрипта (если это системные приложения, то для учетки System права обычно уже есть)
3. И затем изнутри скрипта выполните команду:
1 |
Import-module -name PSJira |
На этом с самим скриптом разобрались. Кроме чисто технических проблем, могут встретиться некоторые особенности работы самой Jira.
Первая из них – это обязательные для заполнения поля (при том для каждого проекта часто разные). Вам надо изначально определить какие свойства вы должны заполнить в любом случае, иначе задача не будет создана. Вы либо получите окно для ввода недостающих данных (если запускаете скрипт вручную), например:
1 2 3 |
cmdlet New-JiraIssue at command pipeline position 1 Supply values for the following parameters: Project: |
Либо он у вас вывалится с ошибкой с требованием заполнить недостающее поле (Please, set original estimate time):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Resolve-JiraError : Jira encountered an error: [Please, set original estimate time] At C:\Program Files\WindowsPowerShell\Modules\PSJira\1.2.5.251\Internal\Invoke-JiraMethod.ps1:111 char:13 + Resolve-JiraError $result -WriteError + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Resolve-JiraError Set-JiraIssue : Cannot bind argument to parameter 'Issue' because it is null. At line:68 char:15 + Set-JiraIssue $OutputNewJiraIssue.ID @EditNewIssueParameters + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Set-JiraIssue], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Set-JiraIssue |
Вторая – заполнение дополнительных атрибутов. Дело в том, что на этапе создания задачи вы сможете заполнить далеко не все атрибуты, которые могут потребоваться. Например попытка присвоить значение всем знакомому свойству Asignee неминуемо вызовет ошибку:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
New-JiraIssue : A parameter cannot be found that matches parameter name 'Assignee'. At line:63 char:37 + $OutputNewJiraIssue = New-JiraIssue @NewIssueParameters + ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [New-JiraIssue], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,New-JiraIssue Set-JiraIssue : Cannot bind argument to parameter 'Issue' because it is null. At line:69 char:15 + Set-JiraIssue $OutputNewJiraIssue.ID @EditNewIssueParameters + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Set-JiraIssue], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Set-JiraIssue |
Решение – создавать задачу с запоминанием её идентификатора и устанавливать для этой задачи требуемые поля на следующем этапе, что и реализовано в скрипте.