Paket Python-Laufzeit- und Pypi-Bibliothek mit Chef / Omnibus und Docker

Vorwort

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

Build-Umgebung vorbereiten

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 namenskitchen-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.

Erstellen Sie das Paket

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.

PyPi + Bibliothek

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"

Verteilung der Leistungen

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

Zusammenfassung

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

Paket Python-Laufzeit- und Pypi-Bibliothek mit Chef / Omnibus und Docker
Python-Installation und Paketverwaltung mit pip
Verwenden Sie die Verschlüsselung der Verschlüsselungsbibliothek mit dem Python-Image von Docker
[Python] Python-Paketinformationen mit der PyPI-API abrufen
Registrierung bei PyPI aus einer modernen Python-Bibliothek selbst erstellt
Verwenden Sie Python mit Docker
Verwalten Sie Python-Laufzeitpakete und Entwicklungsumgebungspakete mit Poetry
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Python und Hardware-Verwenden von RS232C mit Python-
Bereiten Sie die Python3-Umgebung mit Docker vor
Python mit Pyenv und Venv
Bibliothek zur Angabe eines Nameservers in Python und Dig
Funktioniert mit Python und R.
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
[Paketwolke] Verwalten Sie Python-Pakete mit der Paketwolke
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
Einfacher Slackbot mit Docker und Errbot
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
JSON-Codierung und -Decodierung mit Python
[GUI in Python] PyQt5-Drag & Drop-
Lesen und Schreiben von NetCDF mit Python
Ich habe mit PyQt5 und Python3 gespielt
[HyperledgerIroha] Abfrage mit Python-Bibliothek
Lesen und Schreiben von CSV mit Python
Mehrfachintegration mit Python und Sympy
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Anwendungsentwicklung mit Docker + Python + Flask
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Kommunizieren Sie mit gRPC zwischen Elixir und Python
Datenpipeline-Aufbau mit Python und Luigi
Berechnen Sie das Standardgewicht und zeigen Sie es mit Python an
So verpacken und verteilen Sie Python-Skripte
Überwachen Sie Mojo-Ausfälle mit Python und Skype
Erstellen Sie mit Docker eine Jupyter Lab (Python) -Umgebung
Über Paketmanagement mit Conda und Pip
[Automatisierung] Bearbeiten Sie Maus und Tastatur mit Python
Hinter dem Flyer: Docker mit Python verwenden
Passwortlose Authentifizierung mit RDS und IAM (Python)
[Python] Packen und verteilen Sie Ihre eigenen Module
POST verschieden mit Python und empfange mit Flask
Bilder mit Pupil, Python und OpenCV aufnehmen
Fraktal zum Erstellen und Spielen mit Python
Ein Memo mit Python2.7 und Python3 in CentOS
Versuchen wir es mit gRPC mit Go und Docker
Stellen Sie mit Python in Docker eine Verbindung zu MySQL her
Verwenden Sie PIL oder Pillow mit Cygwin Python