refs TG-2: test Jenkins comment
This commit is contained in:
Vendored
+88
-37
@@ -1,15 +1,17 @@
|
|||||||
pipeline {
|
pipeline {
|
||||||
agent any
|
agent any
|
||||||
|
|
||||||
|
environment {
|
||||||
|
JAVA_HOME = '/usr/lib/jvm/java-21-openjdk-amd64'
|
||||||
|
ANDROID_HOME = '/opt/android-sdk'
|
||||||
|
ANDROID_SDK_ROOT = '/opt/android-sdk'
|
||||||
|
PATH = "/usr/lib/jvm/java-21-openjdk-amd64/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:${env.PATH}"
|
||||||
|
TAIGA_PROJECT_ID = '2'
|
||||||
|
TAIGA_URL = 'https://taiga.grigowashere.ru'
|
||||||
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
stage('Build Android APK') {
|
stage('Build Android APK') {
|
||||||
environment {
|
|
||||||
JAVA_HOME = '/usr/lib/jvm/java-21-openjdk-amd64'
|
|
||||||
ANDROID_HOME = '/opt/android-sdk'
|
|
||||||
ANDROID_SDK_ROOT = '/opt/android-sdk'
|
|
||||||
PATH = "/usr/lib/jvm/java-21-openjdk-amd64/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:${env.PATH}"
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
cleanWs()
|
cleanWs()
|
||||||
checkout scm
|
checkout scm
|
||||||
@@ -23,46 +25,95 @@ environment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
def result = currentBuild.currentResult ?: 'UNKNOWN'
|
|
||||||
|
|
||||||
withCredentials([string(credentialsId: 'TAIGA_TOKEN', variable: 'TAIGA_TOKEN')]) {
|
post {
|
||||||
sh """
|
always {
|
||||||
set -e
|
script {
|
||||||
|
def result = currentBuild.currentResult ?: 'UNKNOWN'
|
||||||
|
|
||||||
REF=\$(git log -1 --pretty=%B | grep -oE 'TG-[0-9]+' | head -1 | cut -d- -f2 || true)
|
withCredentials([string(credentialsId: 'TAIGA_TOKEN', variable: 'TAIGA_TOKEN')]) {
|
||||||
|
sh """
|
||||||
|
set -e
|
||||||
|
|
||||||
if [ -z "\$REF" ]; then
|
REF=\$(git log -1 --pretty=%B | grep -oE 'TG-[0-9]+' | head -1 | cut -d- -f2 || true)
|
||||||
echo "No TG-* reference found"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
ISSUE_JSON=\$(curl -s \\
|
if [ -z "\$REF" ]; then
|
||||||
-H "Authorization: Bearer \$TAIGA_TOKEN" \\
|
echo "No TG-* reference found"
|
||||||
"https://taiga.grigowashere.ru/api/v1/issues/by_ref?project=2&ref=\$REF")
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
ISSUE_ID=\$(echo "\$ISSUE_JSON" | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])')
|
export REF
|
||||||
VERSION=\$(echo "\$ISSUE_JSON" | python3 -c 'import sys,json; print(json.load(sys.stdin)["version"])')
|
export BUILD_RESULT="${result}"
|
||||||
|
|
||||||
export COMMENT="Jenkins build #${BUILD_NUMBER}: ${result}
|
python3 - <<'PY'
|
||||||
${BUILD_URL}"
|
import json
|
||||||
export VERSION="\$VERSION"
|
import os
|
||||||
|
import urllib.request
|
||||||
|
import urllib.error
|
||||||
|
|
||||||
python3 -c 'import json, os; print(json.dumps({"comment": os.environ["COMMENT"], "version": int(os.environ["VERSION"])}))' \\
|
taiga_url = os.environ["TAIGA_URL"]
|
||||||
> /tmp/taiga-comment.json
|
project_id = os.environ["TAIGA_PROJECT_ID"]
|
||||||
|
token = os.environ["TAIGA_TOKEN"]
|
||||||
|
ref = os.environ["REF"]
|
||||||
|
|
||||||
curl -s -X POST \\
|
headers = {
|
||||||
-H "Authorization: Bearer \$TAIGA_TOKEN" \\
|
"Authorization": f"Bearer {token}",
|
||||||
-H "Content-Type: application/json" \\
|
"Content-Type": "application/json",
|
||||||
--data @/tmp/taiga-comment.json \\
|
}
|
||||||
"https://taiga.grigowashere.ru/api/v1/issues/\$ISSUE_ID/comments"
|
|
||||||
|
|
||||||
echo "Commented Taiga TG-\$REF"
|
def get_json(path):
|
||||||
""".stripIndent()
|
url = f"{taiga_url}{path}"
|
||||||
|
req = urllib.request.Request(url, headers=headers)
|
||||||
|
try:
|
||||||
|
with urllib.request.urlopen(req) as r:
|
||||||
|
return json.loads(r.read().decode("utf-8"))
|
||||||
|
except urllib.error.HTTPError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
targets = [
|
||||||
|
("issues", "Issue"),
|
||||||
|
("userstories", "User Story"),
|
||||||
|
("tasks", "Task"),
|
||||||
|
]
|
||||||
|
|
||||||
|
found = None
|
||||||
|
|
||||||
|
for endpoint, label in targets:
|
||||||
|
data = get_json(f"/api/v1/{endpoint}/by_ref?project={project_id}&ref={ref}")
|
||||||
|
if data and "id" in data:
|
||||||
|
found = (endpoint, label, data)
|
||||||
|
break
|
||||||
|
|
||||||
|
if not found:
|
||||||
|
print(f"Taiga TG-{ref} not found as issue/userstory/task")
|
||||||
|
raise SystemExit(0)
|
||||||
|
|
||||||
|
endpoint, label, data = found
|
||||||
|
|
||||||
|
comment = (
|
||||||
|
f"Jenkins build #{os.environ['BUILD_NUMBER']}: {os.environ['BUILD_RESULT']}\\n"
|
||||||
|
f"{os.environ['BUILD_URL']}"
|
||||||
|
)
|
||||||
|
|
||||||
|
payload = json.dumps({
|
||||||
|
"comment": comment,
|
||||||
|
"version": data["version"],
|
||||||
|
}).encode("utf-8")
|
||||||
|
|
||||||
|
url = f"{taiga_url}/api/v1/{endpoint}/{data['id']}/comments"
|
||||||
|
req = urllib.request.Request(
|
||||||
|
url,
|
||||||
|
data=payload,
|
||||||
|
headers=headers,
|
||||||
|
method="POST",
|
||||||
|
)
|
||||||
|
|
||||||
|
with urllib.request.urlopen(req) as r:
|
||||||
|
print(f"Commented Taiga TG-{ref} ({label}), HTTP {r.status}")
|
||||||
|
PY
|
||||||
|
""".stripIndent()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user