pipeline { agent any tools { jdk "Temurin 21" } environment { GITEA_API_URL = "https://di9.ru/git/api/v1/repos/Voomra/ss14-launcher-extractor/releases" GITEA_TOKEN = credentials("JENKINS_GITEA_ACCESS_TOKEN") } stages { stage("Сборка") { steps { sh "./gradlew clean shadowJar" } } stage("Создание релиза") { steps { script { def version = sh(script: './gradlew properties -q | grep "version:" | awk \'{print $2}\'', returnStdout: true).trim() def releaseData = """ { "tag_name": "v${version}-test", "name": "Release v${version}", "body": "Jenkins автоматически создал релиз", "draft": false, "prerelease": false } """ def responseApi = httpRequest( url: env.GITEA_API_URL, httpMode: 'POST', acceptType: 'application/json', contentType: 'application/json' customHeaders: [[name: 'Authorization', value: "token ${env.GITEA_TOKEN}"]] requestBody: releaseData) def responseCode = responseApi.status def responseBody = responseApi.content if (responseCode != 201) { error """ ❌ Ошибка: Gitea вернул HTTP код ${responseCode}. Ожидался 201. Тело ответа: ${responseBody} """ } def releaseId = new groovy.json.JsonSlurper().parseText(responseBody).id env.RELEASE_ID = releaseId } } } stage("Загрузка файлов в релиз") { steps { script { if (!env.RELEASE_ID) { error "❌ ID релиза не определен. Пропускаем загрузку артефактов." } def files = findFiles(glob: 'build/libs/*.jar') if (files.isEmpty()) { echo "⚠️ Нет артефактов для загрузки." return } files.each { file -> def fileName = file.name echo "Загружаем файл: ${fileName}" def responseApi = httpRequest( url: "${env.GITEA_API_URL}/${env.RELEASE_ID}/assets?name=${fileName}", httpMode: 'POST', acceptType: 'application/json', contentType: 'application/octet-stream' customHeaders: [[name: 'Authorization', value: "token ${env.GITEA_TOKEN}"]] uploadFile: "build/libs/${fileName}") def responseCode = responseApi.status if (responseCode != 201) { echo """ ⚠️ Ошибка загрузки ${fileName}: статус ${responseCode} Тело ответа: ${responseApi.content} """ } } } } } } }