Jira на Github Actions#cicd
Я тут последние несколько дней активно вникаю в тему настройки CI на Github Actions, и был удивлён, что в Jira
нельзя передвинуть несколько задач одновременно, если вы каким-то образом получили этот список из вашего PR.
Ребята из Attlassian
молчат, а таски двигать хочется, поэтому делюсь с вами кастомным решением.
Если посмотреть, что делается под капотом этого Action, то по сути — это вызов API и совершение парочки запросов для того, чтобы передвигуть задачку. Свой Action писать не хотелось, поэтому решил написать свою gradle таску, которая сделает всё за нас.
1️⃣ Для начала, выполните запрос:
GET https://domain.atlassian.net/rest/api/3/issue/TASK-123/transitions
,
чтобы получить идентификатор колонки, в которую вам надо перекинуть задачу. Нам надо поле id, а чтобы выполнить запрос — необходимо создать пароль в настройках и авторизоваться в Headers через Base Auth.
2️⃣ Создаём таску в gradle, а в неё передаём список задач и токен для авторизации будущих запросов, например так:
def taskNumbers = project.properties['items'].split(',').toUnique()
def jiraToken = project.properties['jira_token’]
.
Лучше передать сразу base64 от нашей базовой авторизации, а сам токен хранить в secrets на вашем CI.
3️⃣ Выполняем запрос:
for(taskNumber in taskNumbers) {
def body = "{ \"transition\": { \"id\": \"$transactionId\" } }"
def req = new URL("https://domain.atlassian.net/rest/api/3/issue/TASK-$taskNumber/transitions").openConnection()
req.setRequestMethod("POST")
req.setRequestProperty("Content-Type", "application/json; charset=UTF-8")
req.setRequestProperty("Authorization", "Basic $jiraToken")
req.setDoOutput(true)
req.getOutputStream().write(body.getBytes("UTF-8"))
println "Status code: ${req.getResponseCode()} for task $taskNumber"
}
Если вы всё сделали правильно, то вы получите 204 код и ваша задача перейдёт в нужную вам колонку. 😌
Дальше можно выполнить эту таску на CI:
./gradlew moveJiraTasks -Pitems=123,456 -Pjira_token=token
Полный текст таски можно взять
тут.