Package d'exécution Python et bibliothèque pypi avec chef / omnibus et Docker

Préface

Il a été développé sous le nom omnibus-ruby pour fournir le temps et les gemmes Ruby en tant que package [^ 1] pour différents systèmes d'exploitation (?) Chef / omnibus omnibus), mais cela ressemble à un framework d'empaquetage multiplateforme qui peut être utilisé [^ 2] quelle que soit la langue.

Cependant, même si je googlé, il y a peu de gens qui utilisent omnibus lui-même et la plupart des exemples sont Ruby, mais cette fois j'ai eu l'occasion de conditionner le runtime Python et la bibliothèque pypi, donc je vais laisser les informations. Je le pense.

De plus, j'en ai beaucoup parlé dans la mise en œuvre. Merci beaucoup. http://qiita.com/sawanoboly/items/0902a97ef71d99ad60a6

Préparation de l'environnement de construction

Ceci est également intégré dans l'environnement Docker comme l'article présenté ci-dessus, mais cette fois aussi. Cependant, la façon de créer une image Docker est un peu différente (plus d'omission w)

Tout d'abord, le moyen le plus rapide de créer un environnement de construction omnibus est d'exécuter le livre de recettes omnibus officiellement préparé. https://github.com/chef-cookbooks/omnibus

omnibus Officiellement, il est introduit pour créer un environnement de construction en utilisant kitchen-vagrant et kitchen-docker, mais je veux le faire sur CircleCI, donc kitchen -vagrant est NG, kitchen-docker est une mauvaise pratique dans Docker, vous pouvez donc mettre ʻopensshpour vous connecter avec SSH, créer un utilisateur supplémentaire pour la connexion SSH et faire diverses choses supplémentaires, de sorte que Utilisez le pilote Test-Kitchen appelékitchen-docker_cli`, qui a été créé pour éviter et utiliser Docker de manière native autant que possible. https://github.com/marcy-terui/kitchen-docker_cli

Alors, réglez-le comme ça.

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

ʻOmnibus-lamvery :: yum_clean, ʻapt_clean est une recette de malchance presque dénuée de sens, tout comme ʻapt-get clean, yum clean all` pour réduire la capacité même un peu w

Il ne vous reste plus qu'à faire ce qui suit:

bundle exec kitchen converge

Vérifiez avec le conteneur Docker cuit et docker ps, et enregistrez-le dans Docker Hub.

docker commit <container-id> <username>/<image>
docker push <username>/<image>

Cliquez ici pour le résultat https://hub.docker.com/r/marcy/omnibus-ubuntu-14/ https://hub.docker.com/r/marcy/omnibus-centos-6/

C'est comme faire un docker pull sur CircleCI et exécuter une compilation avec docker run.

Construisez le package

Ci-dessous, je vais tout expliquer car il n'y a pas de netteté. Cliquez ici pour voir la source pour voir l'image entière. https://github.com/willyworks/omnibus-lamvery/tree/master/omnibus Montez ceci avec -v lors du démarrage du conteneur Docker pour build ( docker run) et construisez-le.

Python Sauf si vous êtes particulier sur les options au moment de la construction, une collection de recettes (?) Pour construire divers logiciels avec omnibus appelé omnibus-software Il y a du Python à l'intérieur, donc si vous l'incluez dans le Gemfile et bundle, vous devriez pouvoir l'utiliser.

Gemfile


source 'https://rubygems.org'

gem 'omnibus', github: 'chef/omnibus'
gem 'omnibus-software', github: 'opscode/omnibus-software'

Cette fois, je voulais changer les options, donc je l'ai défini à portée de main. Par précaution lors de la spécification des options, bien qu'il ne soit pas unique à Python, omnibus est un framework pour créer un package full-stack qui est complété par lui-même, donc il est NG s'il dépend de bibliothèques globales du système. À propos, la vérification s'exécute à la fin de la construction, elle se termine donc par une erreur. En Python, si vous spécifiez une option de configuration comme --with-system-ffi, ce sera NG.

Bibliothèque PyPi +

C'est facile. Tout d'abord, installez pip en utilisant le Python fourni par le paquet comme indiqué ci-dessous.

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

Ensuite, tout ce que vous avez à faire est d'installer la bibliothèque avec la commande pip créée par celui-ci.

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

En passant, vous pouvez obtenir la dernière version de la bibliothèque fournie à ce moment-là comme suit.

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"

Distribution des livrables

Cette fois, je l'ai téléchargé sur Bintray. L'exemple auquel j'ai fait référence utilise un client CLI créé par Go, mais j'ai essayé de frapper directement l'API REST. L'API REST de Bintray est simple et agréable. Le code de réponse était étrange et j'en étais un peu accro. .. .. Je n'ai pas trouvé de bijou qui serait agréable à utiliser à l'avenir, alors ce serait peut-être une bonne idée d'en faire un.

Pour référence, le code de la tâche de rake approximative téléchargée sur Bintray ressemble à ceci. https://github.com/willyworks/omnibus-lamvery/blob/master/Rakefile

Résumé

Si vous essayez de faire quelque chose ici, il y a de fortes chances que sawanoboly le fasse en premier et il sera enregistré (republication)

[^ 1]: rpm, deb, etc. Il semble que vous puissiez également créer pkg pour Mac et msi pour Win (je ne fais que rpm et deb) [^ 2]: c'est plutôt OK même si la langue n'est pas incluse

Recommended Posts

Package d'exécution Python et bibliothèque pypi avec chef / omnibus et Docker
Installation de Python et gestion des packages avec pip
Utiliser le chiffrement de la bibliothèque de chiffrement avec l'image Python de Docker
[Python] Obtenez des informations sur le package Python avec l'API PyPI
Inscription auprès de PyPI à partir de la bibliothèque Python moderne faite par vous-même
Utiliser python avec docker
Gérez les packages d'exécution Python et les packages d'environnement de développement avec Poetry
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Préparer l'environnement python3 avec Docker
python avec pyenv et venv
Bibliothèque pour spécifier un serveur de noms en python et dig
Fonctionne avec Python et R
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
[Package cloud] Gérez les packages python avec le package cloud
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Easy Slackbot avec Docker et Errbot
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Encodage et décodage JSON avec python
[GUI en Python] PyQt5-Glisser-déposer-
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
[HyperledgerIroha] Requête avec la bibliothèque Python
Lire et écrire du CSV avec Python
Intégration multiple avec Python et Sympy
Coexistence de Python2 et 3 avec CircleCI (1.0)
Développement d'applications avec Docker + Python + Flask
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
J'ai défini des variables d'environnement dans Docker et je les ai affichées en Python.
Communiquez entre Elixir et Python avec gRPC
Construction de pipeline de données avec Python et Luigi
Calculer et afficher le poids standard avec python
Comment empaqueter et distribuer des scripts Python
Surveiller les pannes de Mojo avec Python et Skype
Créer un environnement Jupyter Lab (Python) avec Docker
À propos de la gestion des packages avec conda et pip
[Automation] Manipulez la souris et le clavier avec Python
Derrière le flyer: utiliser Docker avec Python
Authentification sans mot de passe avec RDS et IAM (Python)
[Python] Empaquetez et distribuez vos propres modules
POSTER diversement avec Python et recevoir avec Flask
Capturer des images avec Pupil, python et OpenCV
Fractal pour faire et jouer avec Python
Un mémo contenant Python2.7 et Python3 dans CentOS
Essayons gRPC avec Go et Docker
Connectez-vous à MySQL avec Python dans Docker
Utilisez PIL ou Pillow avec Cygwin Python