Es wurde einst unter dem Namen Omnibus-Ruby entwickelt, um Ruby-Zeilenzeit und Edelsteine als Paket [^ 1] für verschiedene Betriebssysteme (?) Chef / Omnibus bereitzustellen. Omnibus), aber es fühlt sich wie ein plattformübergreifendes Verpackungsframework an, das unabhängig von der Sprache verwendet werden kann [^ 2].
Selbst wenn Sie googeln, gibt es nur wenige Leute, die Omnibus selbst verwenden, und die meisten Beispiele sind Ruby. Diesmal hatte ich jedoch die Möglichkeit, die Python-Laufzeit- und Pypi-Bibliothek zu packen. Lassen Sie also die Informationen. Ich glaube schon.
Darüber hinaus habe ich in der Implementierung sehr darauf hingewiesen. Vielen Dank. http://qiita.com/sawanoboly/items/0902a97ef71d99ad60a6
Dies wird auch in der Docker-Umgebung wie im oben vorgestellten Artikel erstellt, diesmal jedoch auch. Das Erstellen eines Docker-Images ist jedoch etwas anders (mehr Auslassung w)
Der schnellste Weg, eine Omnibus-Build-Umgebung zu erstellen, besteht darin, das offiziell vorbereitete Omnibus-Kochbuch auszuführen. https://github.com/chef-cookbooks/omnibus
omnibus Offiziell wird es eingeführt, um eine Build-Umgebung mit "Kitchen-Vagrant" und "Kitchen-Docker" zu erstellen, aber ich möchte dies auf CircleCI tun, also "Kitchen" -vagrantist NG,
kitchen-docker ist eine schlechte Praxis in Docker, daher können Sie
opensshverwenden, um eine Verbindung mit SSH herzustellen, einen zusätzlichen Benutzer für die SSH-Anmeldung zu erstellen und verschiedene zusätzliche Dinge zu tun, damit Verwenden Sie den Test-Kitchen-Treiber namens
kitchen-docker_cli`, der erstellt wurde, um Docker so weit wie möglich nativ zu vermeiden und zu verwenden.
https://github.com/marcy-terui/kitchen-docker_cli
Stellen Sie es also so ein.
yaml:.kitchen.yml
driver:
name: docker_cli
transport:
name: docker_cli
provisioner:
name: chef_zero
platforms:
- name: centos-6.6
driver_config:
image: centos:centos6.6
run_list:
- yum-epel::default
- omnibus::default
- omnibus-lamvery::yum_clean
- name: ubuntu-14.04
run_list:
- apt::default
- omnibus::default
- omnibus-lamvery::apt_clean
suites:
- name: default
attributes:
omnibus:
build_user: root
build_user_group: root
build_user_home: /root
install_dir: /opt/lamvery
Jetzt müssen Sie nur noch Folgendes tun:
bundle exec kitchen converge
Überprüfen Sie mit dem gebackenen Docker-Container und "Docker ps", und registrieren Sie es in Docker Hub.
docker commit <container-id> <username>/<image>
docker push <username>/<image>
Klicken Sie hier für das Ergebnis https://hub.docker.com/r/marcy/omnibus-ubuntu-14/ https://hub.docker.com/r/marcy/omnibus-centos-6/
Es ist, als würde man einen "Docker Pull" auf CircleCI ausführen und einen Build mit "Docker Run" ausführen.
Im Folgenden werde ich alles erklären, da es keine Schärfe gibt. Klicken Sie hier für die Quelle, um das gesamte Bild zu sehen. https://github.com/willyworks/omnibus-lamvery/tree/master/omnibus Hängen Sie dies mit -v ein, wenn Sie den Docker-Container für den Build (Docker-Lauf) starten und erstellen.
Python Sofern Sie nicht genau über die Optionen zum Zeitpunkt der Erstellung informiert sind, eine Sammlung von Rezepten (?) Zum Erstellen verschiedener Software mit Omnibus namens Omnibus-Software Es gibt Python im Inneren. Wenn Sie es also in die Gemfile und das Bundle aufnehmen, sollten Sie es verwenden können.
Gemfile
source 'https://rubygems.org'
gem 'omnibus', github: 'chef/omnibus'
gem 'omnibus-software', github: 'opscode/omnibus-software'
Dieses Mal wollte ich die Optionen ändern, also habe ich sie zur Hand definiert. Als Vorsichtsmaßnahme bei der Angabe von Optionen ist Omnibus ein Framework zum Erstellen eines Full-Stack-Pakets, das von sich aus abgeschlossen wird, obwohl es nicht nur für Python gilt. Daher ist es NG, wenn es von systemglobalen Bibliotheken abhängt. Übrigens wird die Prüfung am Ende des Builds ausgeführt, sodass ein Fehler auftritt und dieser endet. Wenn Sie in Python eine Konfigurationsoption wie "--with-system-ffi" angeben, ist dies NG.
Das ist einfach. Installieren Sie zuerst pip
mit dem im Paket enthaltenen Python, wie unten gezeigt.
software/pypi.rb
name "pypi"
build do
command "curl -kL https://bootstrap.pypa.io/get-pip.py | #{install_dir}/embedded/bin/python"
command "ln -fs #{install_dir}/embedded/bin/pip #{install_dir}/bin/pip"
end
Dann müssen Sie nur noch die Bibliothek mit dem Befehl pip
installieren, der von diesem erstellt wird.
software/lamvery.rb
name "lamvery"
build do
command "#{install_dir}/embedded/bin/pip install lamvery==#{version}"
command "ln -fs #{install_dir}/embedded/bin/lamvery #{install_dir}/bin/lamvery"
end
Übrigens können Sie die zu diesem Zeitpunkt bereitgestellte neueste Version der Bibliothek wie folgt herunterladen.
require 'rexml/document'
require 'open-uri'
doc = REXML::Document.new(open('https://pypi.python.org/pypi?:action=doap&name=lamvery').read)
p doc.elements['rdf:RDF/Project/release/Version/revision'].text #=> "0.14.0"
Dieses Mal habe ich es auf Bintray hochgeladen. In dem Beispiel, auf das ich Bezug genommen habe, wird ein CLI-Client von Go verwendet, aber ich habe versucht, die REST-API direkt zu aktivieren. Die REST-API von Bintray ist einfach und nett. Der Antwortcode war seltsam und ich war ein wenig süchtig danach. .. .. Ich konnte keinen Edelstein finden, der in Zukunft gut verwendet werden könnte, daher könnte es eine gute Idee sein, einen zu machen.
Als Referenz sieht der Code der auf Bintray hochgeladenen Rough-Rake-Aufgabe folgendermaßen aus. https://github.com/willyworks/omnibus-lamvery/blob/master/Rakefile
Wenn Sie versuchen, hier etwas zu tun, besteht eine gute Chance, dass Sawanoboly dies zuerst tut und es gespeichert wird (Repost)
[^ 1]: rpm
, deb
usw. Es scheint, dass Sie auch "pkg" für Mac und "msi" für Win machen können (ich mache nur RPM und Deb)
[^ 2]: Vielmehr ist es in Ordnung, auch wenn die Sprache nicht enthalten ist
Recommended Posts