Ich habe eine OpenStack-Build-Aufgabe auf einer Ubuntu-QA-Site gefunden, bin aber etwas verwirrt über die Build-Schritte.
Hier ist der Link für die Erstellungsschritte: https://jenkins.qa.ubuntu.com/view/Openstack_Testing/view/Grizzly/job/precise_grizzly_keystone_stable/275/consoleText
Aus dem Jenkins-Build-Protokoll kenne ich die Schritte, mit denen Ubuntu Openstack-Pakete erstellt:
git clone
openstack tar.gz
Datei mit python setup.py sdist
bzr
, um die Debian-Steuerdateien abzurufen, die von Canonical verwaltet werdendch
, um ein neues Build-Release zu generieren und es an local zu übergebenbzr builddeb -S -- -sa -us -uc
, um das Quellpaket und die zugehörige Steuerdatei zu generieren, z. B. dsc
.mk-build-deps
, um die Abhängigkeit zu installierensbuild
, um die echten Deb-Pakete zu generierenMeine Fragen sind:
-S
generieren, aber warum verwenden wir schließlich sbuild
, um sie zu generieren? Ist das nur zur Unterschrift?bzr builddeb
und sbuild
?Ich habe festgestellt, dass sich die von Jenkins verwendeten Build-Skripte hier befinden: ~openstack-ubuntu-testing/openstack-ubuntu-testing
, aber wenn ich versuche, Befehle unter bin
auszuführen, erhalte ich immer:
[email protected]:~/openstack-ubuntu-testing/bin# ./build-package
Traceback (most recent call last):
File "./build-package", line 14, in <module>
from openstack_ubuntu_testing.build.component_build import ComponentBuild
File "/home/sysadmin/openstack-ubuntu-testing/bin/openstack_ubuntu_testing/build/component_build.py", line 11, in <module>
from schroot.executor import SchrootExecutor
ImportError: No module named schroot.executor
Ich habe versucht, pip zu verwenden, um schroot zu installieren, aber es scheint, dass sie keinen Executor darin haben.
Bitte helfen Sie.
sbuild
erstellt ein Paket in einer isolierten Umgebung mit schroot
. In dieser Umgebung werden nur die vom Quellpaket deklarierten Build-Abhängigkeiten installiert, sonst nichts. Auf diese Weise wird sichergestellt, dass der Build nicht von dem Entwickler oder der CI-Umgebung beeinflusst wird, von der aus er ausgeführt wird. Ohne sbuild könnte beispielsweise das Vorhandensein eines Pakets in der CI-Umgebung den Anschein erwecken, dass der Build erfolgreich war, obwohl es sich tatsächlich um eine nicht deklarierte Build-Abhängigkeit handelte und daher überall sonst fehlschlägt. Aus Gründen der Reproduzierbarkeit und Stabilität ist es besser, sbuild zu verwenden.