Pokud vlastníte nebo udržujete repo GitHub a někdy jste z něj vložili balíček do PyPI a/nebo Fedory, víte, že to vyžaduje nějakou další práci pomocí infrastruktury Fedory.
Dobrá zpráva:Vyvinuli jsme nástroj nazvaný release-bot, který tento proces automatizuje. Vše, co musíte udělat, je zadat problém do vašeho upstream úložiště a release-bot se postará o zbytek. Ale nepředbíhejme. Nejprve se podívejme na to, co je potřeba nastavit, aby k této automatizaci došlo. Vybral jsem si rodinu meta-testů upstream úložiště jako příklad.
Konfigurační soubory pro release-bot
Existují dva konfigurační soubory pro release-bot:conf.yaml a release-conf.yaml .
conf.yaml
conf.yaml musí být přístupné během inicializace robota; určuje, jak získat přístup k úložišti GitHub. Abych to ukázal, vytvořil jsem nové úložiště git s názvem mtf-release-bot , který obsahuje conf.yaml a další tajné soubory.
název_úložiště:jméno
vlastník_úložiště:vlastník
# https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
github_token:xxxxxxxxxxxxxxxxxxxxxxxxx
# čas v sekundách během kontrol nových vydání
interval obnovy:180
V případě meta-test-family vypadá konfigurační soubor takto:
název_úložiště:meta-test-family
vlastník_úložiště:fedora-modularity
github_token:xxxxxxxxxxxxxxxxxxxxx
interval_obnovení:180
release-conf.yaml
release-conf.yaml musí být uloženy v samotném úložišti; specifikuje, jak provádět vydání GitHub/PyPI/Fedora.
# seznam hlavních verzí pythonu, pro které bot vytvoří samostatná kola
verze pythonu:
- 2
- 3
# volitelné:
changelog:
- Příklad záznamu v changelogu
- Další záznam v changelogu
# toto jsou informace o autorství v changelogu
#, pokud toto není nastaveno, bude jako autor použita osoba, která sloučila PR vydání
jméno_autora:John Doe
email_autora:[email protected]
# zda vydat na fedoru. False ve výchozím nastavení
fedora:false
# seznam větví fedory by měl bot vydat. Master je vždy implikován
fedora_branches:
- f27
V případě meta-test-family vypadá konfigurační soubor takto:
python_versions:
- 2
fedora:true
fedora_branches:
- f29
- f28
trigger_on_issue:true
Konfigurační soubor PyPI
Soubor .pypirc , uložené ve vašem mtf-release-bot soukromý repozitář, je potřeba pro nahrání nové verze balíčku do PyPI:
[pypi]
uživatelské jméno =phracek
heslo =xxxxxxxx
Soukromý klíč SSH, id_rsa , který jste nakonfigurovali ve FAS.
Konečná struktura úložiště git s conf.yaml a ostatní, vypadá takto:
$ ls -la
celkem 24
drwxrwxr-x 3 phracek phracek 4096 24. září 12:38 .
drwxrwxr-x. 20 phracek phracek 4096 24. září 12:37 ..
-rw-rw-r-- 1 phracek phracek 199 24. září 12:26 conf.yaml
drwxrwxr-x 4 04 8 phrace 38 .git
-rw-rw-r-- 1 phracek phracek 3243 24. září 12:38 id_rsa
-rw------- 1 phracek phracek 78 září 24 12:28<. /před>Požadavky
Další zdroje Pythonu
- Co je to IDE?
- Cheat sheet:Python 3.7 pro začátečníky
- Nejlepší Python GUI frameworky
- Stáhnout:7 základních knihoven PyPI
- Vývojáři Red Hat
- Nejnovější obsah Pythonu
Vydání do PyPI vyžaduje balíček Wheel pro Python 2 i Python 3, proto si nainstalujte requirements.txt s oběma verzemi pip. Musíte také nastavit své přihlašovací údaje k PyPI v $HOME/.pypirc , jak je popsáno v dokumentaci PyPI. Pokud vydáváte Fedora, musíte mít aktivní lístek Kerberos, zatímco robot běží, nebo zadat cestu k souboru tabulky klíčů Kerberos pomocí -k/–keytab
. Také fedpkg vyžaduje, abyste měli klíč SSH ve svazku klíčů, který jste nahráli do FAS.
Jak nasadit release-bot
Release-bot lze použít dvěma způsoby:jako obrázek Dockeru nebo jako šablonu OpenShift.
Obrázek dockeru
Vytvořme obrázek pomocí s2i
příkaz:
$ s2i build $CONFIGURATION_REPOSITORY_URL usercont/release-bot app-name
kde $CONFIGURATION_REPOSITORY_URL
je odkaz na úložiště GitHub, jako je https://
Podívejme se na obrázky Docker:
$ Docker snímky
úložiště TAG ID vytvořený formát
MTF-release-bot poslední 08897871e65e 6 minutami 705 MB
docker.io/usercont/release-bot poslední 5b34aa670639 9 dny 705 MB
Nyní zkusme spustit mtf-release-bot obrázek pomocí tohoto příkazu:
$ docker spustí mtf-release-bot
---> Nastavení klíče ssh...
Agent pid 12
Přidaná identita:./.ssh/id_rsa (./. ssh/id_rsa)
12:21:18.982 configuration.py DEBUG Načtena konfigurace pro fedora-modularity/meta-test-family
12:21:18.982 releasebot.py INFO hlášení release-bot v0.4.1 pro povinnost!
12:21:18.982 github.py DEBUG Načítání release-conf.yaml
12:21:37.611 releasebot.py DEBUG Nenalezeno žádné sloučené vydání PR robota
38.282:py INFO Nalezen problém s novým vydáním verze:0.8.5
12:21:42.565 releasebot.py DEBUG Nebyly nalezeny žádné další otevřené problémy
12:21:43.190 releasebot.py INFO Vytvoření nového PR pro vydání verze 0.8.5 na základě problému.
12:21:46.709 utils.py DEBUG ['git', 'clone', 'https://github.com/fedora-modularity/meta-test-family. git', '.']
12:21:47.401 github.py LADĚNÍ {"message":"Pobočka nenalezena","documentation_url":"https://developer.github.com/ v3/repos/branc hes/#get-branch"}
12:21:47.994 utils.py DEBUG ['git', 'config', 'user.email', '[email protected]']
12:21:47.996 utils.py DEBUG ['git', 'config', 'user.name', 'Release bot']
12:21:48.009 utils. py DEBUG ['git', 'checkout', '-b', '0.8.5-release']
12:21:48.014 utils.py CHYBA Nebyly nalezeny žádné soubory verze. Přerušení aktualizace verze.
12:21:48.014 utils.py VAROVÁNÍ V úložišti není přítomen CHANGELOG.md
[Errno 2] Žádný takový soubor nebo adresář:'/tmp/tmpmbvb05jq/CHANGELOG.md'>12:21:48.020 utils.py DEBUG ['git', 'commit', '--allow-empty', '-m', '0.8.5 release']
[0.8.5-release 7ee62c6] 0.8.5 vydání
12:21:51.342 utils.py DEBUG ['git', 'push', 'origin', '0.8.5-release']
12:21:51.905 github.py DEBUG Nebyly nalezeny žádné otevřené PR
12:21:51.905 github.py DEBUG Pokus o PR pro větev 0.8.5-release:21.
5153.21. INFO Vytvořeno PR:https://github.com/fedora-modularity/meta-test-family/pull/243
12:21:53.216 releasebot.py INFO Právě jsem požádal o vydání verze 0.8. 5
12:21:54.154 github.py DEBUG Komentář přidán do PR:Právě jsem požádal o PR pro verzi 0.8.5
Zde je [odkaz na PR](https://github .com/fedora-modularity/meta-test-family/pull/2 43)
12:21:54.154 github.py DEBUG Pokus o uzavření problému č. 242
12:21:54.992 github.py DEBUG Uzavřený problém č. 242
Jak můžete vidět, release-bot automaticky uzavřel následující problém a požádal o nové upstream vydání meta-test-family:https://github.com/fedora-modularity/meta-test-family/issues/243.
Release-bot navíc vytvořil nový PR s changelogem. Můžete aktualizovat PR – například squash changelog – a jakmile jej sloučíte, automaticky se uvolní na GitHub a spustí se PyPI a Fedora.
Nyní máte funkční řešení pro snadné uvolnění upstream verzí vašeho balíčku do PyPi a Fedory.
Šablona OpenShift
Další možností, jak dodávat automatizovaná vydání pomocí release-bota, je nasazení v OpenShift.
Šablona OpenShift vypadá následovně:
druh:Template
apiVersion:v1
metadata:
název:release-bot
anotace:
description:S2I Relase-bot image builder
tags:release-bot s2i
iconClass:icon-python
štítky:
šablona:release-bot
role:releasebot_application_builder
objekty:
- druh :ImageStream
apiVersion :v1
metadata :
název :${APP_NAME}
štítky :
druh appid :release-bot-${APP_NAME}
- :ImageStream
apiVersion :v1
metadata :
název :${APP_NAME}-s2i
štítky :
appid :release-bot-${APP_NAME}
spec :
tagy :
- název :nejnovější
od :
druh :DockerImage
< e popř. jméno :user-cont/rel
# naplánováno:true
- druh :BuildConfig
apiVersion :v1
metadata :
název :${APP_NAME}
štítky :
appid :release-bot-${APP_NAME}
spec :
spouštěče :
- typ :ConfigChange
- typ :Změnit obrázek zdroj :
typ :Git
git :
uri :${CONFIGURATION_REPOSITORY}
contextDir :${CONFIGURATION_REPOSITORY: CONFIGURATION_REPOSITORY : název KONFIGURACE_returace název bota
ret- název zdroje / ret- název zdroje / -secret
strategie :
typ :Zdroj
sourceStrategy :
from :
druh :Název ImageStreamTag
výstup :
to :
druh :ImageStreamTag
název :${APP_NAME}:nejnovější
- druh :DeploymentConfig
metadata /: apiV
název:${APP_NAME}
labels :
appid :release-bot-${APP_NAME}
spec :
strategie :
typ :Rolling
spouštěče :
- typ :ConfigC Hange
- Typ:imagechange
imagechangeParams:
Automatické:true
Kontejnery:
- $ {app_name}
od:
z:
druh:imagestramtag
název :${APP_NAME}:nejnovější
repliky :1
selector :
deploymentconfig :${APP_NAME}
< šablona metadat :
:
> labels :
appid:release-bot-${APP_NAME}
deploymentconfig :${APP_NAME}
spec :
BR _ } název kontejneru:
Obrázek:$ {app_name}:Nejnovější
Zdroje:
Žádosti:
Paměť:"64MI"
CPU:"50m"
Limity:
paměť:"128Mi"
cpu:"100m"
parametry :
- název :APP_NAME
popis :Název ap plication
hodnota :
povinné :true
- název :CONFIGURATION_REPOSITORY
popis :Úložiště Git s konfigurací
hodnota :
povinné :true
Nejjednodušší způsob nasazení mtf-release-bot úložiště s tajnými soubory do OpenShift je použít následující dva příkazy:
$ curl -sLO https://github.com/user-cont/release-bot/raw/master/openshift-template.yml
Ve své instanci OpenShift nasaďte šablonu spuštěním následujícího příkazu:
oc process -p APP_NAME="mtf-release-bot" -p CONFIGURATION_REPOSITORY="git@<git_lab_path>/mtf-release-conf.git" -f openshift-template.yml | oc apply
Shrnutí
Podívejte se na příklad žádosti o stažení v upstream úložišti meta-test-family, kde najdete informace o tom, co release-bot vydal. Jakmile se dostanete do tohoto bodu, můžete vidět, že release-bot je schopen vložit nové upstream verze do GitHubu, PyPI a Fedory bez velkého zásahu uživatele. Automatizuje všechny kroky, takže nemusíte ručně nahrávat a vytvářet nové upstream verze vašeho balíčku.