J'ai essayé d'utiliser l'API de Unity Cloud Build de Python. Je pense qu'il peut être utilisé lors du téléchargement de fichiers construits en coopération avec d'autres systèmes.
Le fait qu'il puisse être construit à partir du code source de BitBucket (anciennement: Stash) était également élevé. Le réglage de la construction initiale était d'environ 5 minutes avec un bouton, donc l'explication est omise.
La première fois qu'il est construit manuellement et la deuxième fois et les suivantes sont utilisées via l'API. Tous les détails de l'API utilisée cette fois sont décrits dans le document officiel.
Si la construction échoue, HTTP Status: 202 sera renvoyé. L'URL du fichier complété est un fichier séparé
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():
"""
Exécution de la construction
#Système semi-normal Déjà en construction
[{"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
#Exécution de la construction
execute_build()
L'état de la construction est le suivant {mis en file d'attente, sentToBuilder, démarré, redémarré, succès, échec, annulé, inconnu} S'il n'y a pas de frais, le temps d'attente est long. Si la construction réussit, ce sera un succès
u.py
def get_builds():
"""
Vous pouvez obtenir les 25 dernières informations de build.
Si vous souhaitez obtenir des données plus anciennes, par_Modifier les paramètres de page et de page
"""
response = requests.get(get_url("builds"), headers=get_headers())
print(response.text), response.status_code
return
def get_build(number):
"""
Vous pouvez obtenir les informations de construction spécifiées
#Système semi-normal
404 s'il n'existe pas: {"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():
"""
Vous pouvez obtenir la dernière version 1
"""
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
#Obtenez une version spécifique
get_build(6)
#Obtenez la dernière version
get_latest_build()
#Obtenir un lot de compilation
get_build_status()
Y a-t-il quelque chose que vous souhaitez annuler de l'API après sa mise en œuvre? J'ai pensé. Il s'agit d'une spécification à annuler avec une requête HTML DELETE. La requête DELETE est utilisée pour la première fois cette année. Le caractère de l'ingénieur qui a fait l'API fidèlement au principe REST a été en quelque sorte transmis.
u.py
def cancel_all():
"""
Annuler toutes les compilations
"""
response = requests.delete(get_url("builds"), headers=get_headers())
print(response.text), response.status_code
def cancel(number):
"""
Annuler une compilation spécifique
#Annulation réussie du système normal
204
#Le système semi-normal n'existe pas
{"error":"The requested object was not found."} 404
#Lorsque vous spécifiez une construction qui a terminé une construction quasi-normale
204
:param number: int
"""
response = requests.delete(get_url("builds", extend="/" + str(number)), headers=get_headers())
print(response.text), response.status_code
#Annulation de build spécifique
cancel(7)
#Annuler toutes les compilations
cancel_all()
Si la construction réussit, le fichier sera téléchargé sur S3. Une fonction pour obtenir l'URL à télécharger.
u.py
def get_latest_build_download_urls():
"""
Télécharger l'URL de la dernière version réussie
: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')
#Télécharger l'URL de la dernière version réussie
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():
"""
Exécution de la construction
#Système semi-normal Déjà en construction
[{"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():
"""
Vous pouvez obtenir les 25 dernières informations de build.
Si vous souhaitez obtenir des données plus anciennes, par_Modifier les paramètres de page et de page
"""
response = requests.get(get_url("builds"), headers=get_headers())
print(response.text), response.status_code
return
def get_build(number):
"""
Vous pouvez obtenir les informations de construction spécifiées
#Système semi-normal
404 s'il n'existe pas: {"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():
"""
Vous pouvez obtenir la dernière version 1
"""
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():
"""
Télécharger l'URL de la dernière version réussie
: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():
"""
Annuler toutes les compilations
"""
response = requests.delete(get_url("builds"), headers=get_headers())
print(response.text), response.status_code
def cancel(number):
"""
Annuler une compilation spécifique
#Annulation réussie du système normal
204
#Le système semi-normal n'existe pas
{"error":"The requested object was not found."} 404
#Lorsque vous spécifiez une construction qui a terminé une construction quasi-normale
204
:param number: int
"""
response = requests.delete(get_url("builds", extend="/" + str(number)), headers=get_headers())
print(response.text), response.status_code
#Annulation de build spécifique
# cancel(7)
#Annuler toutes les compilations
# cancel_all()
#Obtenez une version spécifique
# get_build(6)
#Obtenez la dernière version
# get_latest_build()
#Obtenir un lot de compilation
# get_build_status()
#Exécution de la construction
# execute_build()
#Télécharger l'URL de la dernière version réussie
print get_latest_build_download_urls()
Recommended Posts