Ich habe versucht, die API von Unity Cloud Build von Python zu verwenden. Ich denke, es kann verwendet werden, wenn Dateien hochgeladen werden, die in Zusammenarbeit mit anderen Systemen erstellt wurden.
Der Punkt, dass es aus dem Quellcode von BitBucket (früher: Stash) erstellt werden kann, war ebenfalls hoch. Die anfängliche Build-Einstellung betrug ca. 5 Minuten mit einer Schaltfläche, daher wird die Erklärung weggelassen.
Das erste Mal wird es manuell erstellt und das zweite und nachfolgende Mal werden über die API verwendet. Alle Details der diesmal verwendeten API sind im offiziellen Dokument beschrieben.
Wenn der Build fehlschlägt, wird der HTTP-Status 202 zurückgegeben. Die URL der fertigen Datei ist eine separate Datei
u.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import requests
API_TOKEN = "****"
ORGID = "****"
PROJECTS = "****"
BUILD_TARGETS = "****"
def get_url(func_name, extend=None):
auth_base = "orgs/{orgid}/projects/{projectid}/buildtargets/{buildtargetid}".format(orgid=ORGID,
projectid=PROJECTS,
buildtargetid=BUILD_TARGETS)
if extend:
url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}{extend}"
return url_base.format(auth=auth_base, func=func_name, extend=extend)
url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}"
return url_base.format(auth=auth_base, func=func_name)
def get_headers():
return {
"Content-Type": "application/json",
"Authorization": "Basic {token}".format(token=API_TOKEN),
}
def execute_build():
"""
Build-Ausführung
#Halbnormales System Bereits gebaut
[{"buildtargetid":"****","buildTargetName":"****","error":"Cannot start build - already a build pending."}] 202
"""
response = requests.post(get_url("builds"), headers=get_headers(), data={})
print(response.text), response.status_code
return
#Build-Ausführung
execute_build()
Der Build-Status lautet wie folgt: {Warteschlange, SentToBuilder, gestartet, neu gestartet, Erfolg, Fehler, abgebrochen, unbekannt} Wenn keine Gebühr anfällt, ist die Wartezeit lang. Wenn der Build erfolgreich ist, wird er erfolgreich sein
u.py
def get_builds():
"""
Sie können die neuesten 25 Build-Informationen erhalten.
Wenn Sie ältere Daten erhalten möchten, per_Ändern Sie die Seite und die Seitenparameter
"""
response = requests.get(get_url("builds"), headers=get_headers())
print(response.text), response.status_code
return
def get_build(number):
"""
Sie können die angegebenen Build-Informationen abrufen
#Halbnormales System
404 wenn es nicht existiert: {"error":"The requested object was not found."}
:param number: int
"""
response = requests.get(get_url("builds", extend="/" + str(number)), headers=get_headers())
print(response.text), response.status_code
return
def get_latest_build():
"""
Sie können den neuesten 1 Build erhalten
"""
build_start_result = requests.get(get_url("builds", extend="?per_page=1&page=1"), headers=get_headers())
print(build_start_result.text), build_start_result.status_code
return
#Holen Sie sich einen bestimmten Build
get_build(6)
#Holen Sie sich den neuesten Build
get_latest_build()
#Build-Batch abrufen
get_build_status()
Gibt es etwas, das Sie nach der Implementierung von der API abbrechen möchten? Ich dachte. Es ist eine Spezifikation, die mit einer HTML-DELETE-Abfrage abgebrochen werden soll. Die DELETE-Abfrage wird dieses Jahr zum ersten Mal verwendet. Der Charakter des Ingenieurs, der die API dem REST-Prinzip treu gemacht hat, wurde irgendwie vermittelt.
u.py
def cancel_all():
"""
Alle Builds abbrechen
"""
response = requests.delete(get_url("builds"), headers=get_headers())
print(response.text), response.status_code
def cancel(number):
"""
Brechen Sie einen bestimmten Build ab
#Erfolgreiche Stornierung des normalen Systems
204
#Ein halbnormales System existiert nicht
{"error":"The requested object was not found."} 404
#Wenn Sie einen Build angeben, der einen quasi normalen Build abgeschlossen hat
204
:param number: int
"""
response = requests.delete(get_url("builds", extend="/" + str(number)), headers=get_headers())
print(response.text), response.status_code
#Spezifische Build-Stornierung
cancel(7)
#Alle Builds abbrechen
cancel_all()
Wenn der Build erfolgreich ist, wird die Datei in S3 hochgeladen. Eine Funktion zum Abrufen der URL zum Herunterladen.
u.py
def get_latest_build_download_urls():
"""
Laden Sie die URL für den neuesten erfolgreichen Build herunter
:return: str
"""
response = requests.get(get_url("builds", extend="?buildStatus=success&per_page=1&page=1"),
headers=get_headers())
data = ujson.loads(response.text)
assert len(data) > 0
return data[0].get('links').get('download_primary').get('href')
#Laden Sie die URL für den neuesten erfolgreichen Build herunter
print get_latest_build_download_urls()
u.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import requests
import ujson
API_TOKEN = "****"
ORGID = "****"
PROJECTS = "****"
BUILD_TARGETS = "****"
def get_url(func_name, extend=None):
auth_base = "orgs/{orgid}/projects/{projectid}/buildtargets/{buildtargetid}".format(orgid=ORGID,
projectid=PROJECTS,
buildtargetid=BUILD_TARGETS)
if extend:
url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}{extend}"
return url_base.format(auth=auth_base, func=func_name, extend=extend)
url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}"
return url_base.format(auth=auth_base, func=func_name)
def get_headers():
return {
"Content-Type": "application/json",
"Authorization": "Basic {token}".format(token=API_TOKEN),
}
def execute_build():
"""
Build-Ausführung
#Halbnormales System Bereits gebaut
[{"buildtargetid":"****","buildTargetName":"****","error":"Cannot start build - already a build pending."}] 202
"""
response = requests.post(get_url("builds"), headers=get_headers(), data={})
print(response.text), response.status_code
return
def get_builds():
"""
Sie können die neuesten 25 Build-Informationen erhalten.
Wenn Sie ältere Daten erhalten möchten, per_Ändern Sie die Seite und die Seitenparameter
"""
response = requests.get(get_url("builds"), headers=get_headers())
print(response.text), response.status_code
return
def get_build(number):
"""
Sie können die angegebenen Build-Informationen abrufen
#Halbnormales System
404 wenn es nicht existiert: {"error":"The requested object was not found."}
:param number: int
"""
response = requests.get(get_url("builds", extend="/" + str(number)), headers=get_headers())
print(response.text), response.status_code
return
def get_latest_build():
"""
Sie können den neuesten 1 Build erhalten
"""
build_start_result = requests.get(get_url("builds", extend="?per_page=1&page=1"), headers=get_headers())
print(build_start_result.text), build_start_result.status_code
return
def get_latest_build_download_urls():
"""
Laden Sie die URL für den neuesten erfolgreichen Build herunter
:return: str
"""
response = requests.get(get_url("builds", extend="?buildStatus=success&per_page=1&page=1"),
headers=get_headers())
data = ujson.loads(response.text)
assert len(data) > 0
return data[0].get('links').get('download_primary').get('href')
def cancel_all():
"""
Alle Builds abbrechen
"""
response = requests.delete(get_url("builds"), headers=get_headers())
print(response.text), response.status_code
def cancel(number):
"""
Brechen Sie einen bestimmten Build ab
#Erfolgreiche Stornierung des normalen Systems
204
#Ein halbnormales System existiert nicht
{"error":"The requested object was not found."} 404
#Wenn Sie einen Build angeben, der einen quasi normalen Build abgeschlossen hat
204
:param number: int
"""
response = requests.delete(get_url("builds", extend="/" + str(number)), headers=get_headers())
print(response.text), response.status_code
#Spezifische Build-Stornierung
# cancel(7)
#Alle Builds abbrechen
# cancel_all()
#Holen Sie sich einen bestimmten Build
# get_build(6)
#Holen Sie sich den neuesten Build
# get_latest_build()
#Build-Batch abrufen
# get_build_status()
#Build-Ausführung
# execute_build()
#Laden Sie die URL für den neuesten erfolgreichen Build herunter
print get_latest_build_download_urls()
Recommended Posts