[Création d'un environnement CI en 2 heures] Procédure de création d'un serveur Web Python avec CircleCI et réussite d'un test de communication HTTP

La fonctionnalité de CircleCI est que vous pouvez utiliser l'environnement CI gratuitement si vous en avez un. Lorsque la construction de l'environnement est terminée, le conteneur CI sera lancé pour chaque commit sur GitHub et le test automatique défini sera exécuté sur le conteneur. Dans cet article, je teste un serveur Web construit avec Python 3.5 et Flask fonctionnant sur CircleCI et utilisant des requêtes pour accéder au serveur Web sur le conteneur et renvoyer le code d'état HTTP 200.

Flux de fonctionnement de l'environnement CI à construire en 2 heures

Tester un serveur Web construit avec Python3.5 + Flask

スクリーンショット 2016-02-26 21.06.22.png

Dans cet article, nous allons lancer un serveur Web à l'aide de Flask, qui est un framework Web Python, sur CircleCI et effectuer un test simple pour accéder au point de terminaison HTTP et vérifier l'état HTTP.

La façon de penser de CircleCI sur l'artisanat Jenkins

Le problème de l'artisanat jenkins est un mot inhabituel qui est dit dans mon champ étroit d'observation. Le problème est que si vous mettez jenkins dans PJ en tant qu'environnement CI, les artisans jenkins se produiront généralement et le remodelage magique se déroulera et ce sera pratique, mais lorsque l'environnement jenkins est endommagé même s'il ne peut être déployé qu'avec jenkins, les artisans Je ne peux que le réparer. Est souvent le problème. Je pense que la tragédie survient souvent au stade où jenkins devient une infrastructure indispensable et qu'il est nécessaire de ne pas tomber au même niveau que l'environnement de production. Un senior respecté a déclaré qu'il ne voulait pas s'impliquer dans le cluster Jenkins si possible.

CircleCI ne pose pas ce problème car toutes les informations sur l'environnement CI sont ** agrégées dans circle.yml **. En outre, le problème de suremballage du SDK dans un Jenkins ne se produit pas en raison du mécanisme de création d'un conteneur séparé pour chaque test.

Manuel de procédure de construction CircleCI

1. Avoir un compte GitHub
2. Inscrivez-vous en tant qu'utilisateur sur la page d'inscription de CircleCI (https://circleci.com/signup/)
3. Sélectionnez et enregistrez un référentiel GitHub
4. Hello World sur CircleCI

Créez circle.yml dans le répertoire supérieur du référentiel et écrivez ce qui suit pour valider. Au moment où vous vous engagez, il sera accroché et le test démarrera automatiquement sur CircleCI.

circle.yml


test:
  override:
    - pwd ~
    - ifconfig
    - echo HelloWorld
    - exit 0

■ Résultat d'exécution スクリーンショット 2016-02-26 19.23.07.png

5. Créez un environnement Python 3.5 sur CircleCI

Consultez la documentation officielle ici (https://circleci.com/docs/environment#python) pour les versions de Python prises en charge par CircleCI. Si vous vous engagez, le test s'exécutera automatiquement.

circle.yml


machine:
  python:
    version: 3.5.0

test:
  override:
    - pwd ~
    - ifconfig
    - echo HelloWorld
    - exit 0
6. Créez un environnement avec pip

pip est un système de gestion de paquets Gem en Ruby. La méthode standard de CicleCI est de lister le nom et la version du package dans requirements.txt dans le répertoire supérieur du référentiel. Pour plus d'informations, consultez la section Python de la documentation officielle (https://circleci.com/docs/language-python).

circle.yml


machine:
  python:
    version: 3.5.0

dependencies:
  pre:
    - pip install -r ./requirements.txt

test:
  override:
    - pwd ~
    - ifconfig
    - echo HelloWorld
    - exit 0

requirements.txt


Flask==0.10.1
Flask-Script==2.0.5
pytz==2015.7
redis==2.10.5
requests==2.9.1
six==1.10.0
SQLAlchemy==1.0.11
gunicorn==19.4.5
pytest==2.8.5
7. Exécutez le serveur en arrière-plan

** La raison de l'exécution en arrière-plan est que si vous ne l'exécutez pas en parallèle, le processus arrêtera d'attendre que le serveur d'exécution se termine et le test ne se terminera pas. ** **

Pour exécuter le script python sur CircleCI, il est nécessaire d'accorder des autorisations avec chmod et de définir PYTHONPATH. Flask mais manage.py est l'effet de la personnalisation avec Flask-Script. Flask-Script est utile pour les utilisateurs expérimentés de Django. Il est pratique d'écrire la commande curl dans test: override: pour vérifier si le serveur est en cours d'exécution.

circle.yml


machine:
  python:
    version: 3.5.0

dependencies:
  pre:
    - chmod -R 777 ./example
    - pip install -r ./requirements.txt
    - export PYTHONPATH="/home/ubuntu/flask_template/example/application"
    - python ./application/manage.py runserver:
          background: true
    - sleep 5

test:
  override:
    - pwd ~
    - ifconfig
    - echo HelloWorld
    - curl http://127.0.0.1/example
    - exit 0
8. Réussissez le test

Écrivez un test avec py.test. C'est aussi simple que de vérifier le HttpStatus. Cette fois, c'est un échantillon, donc le contenu est le même

■ Code pour py.test

test_example.py


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import requests


def test_example():
    host = "127.0.0.1:5000"
    url = 'http://{}/example/'.format(host)
    print(url)
    response = requests.get(url)
    print(response.text)
    assert response.status_code == 200
    assert "Error" not in response.text

circle.yml


machine:
  python:
    version: 3.5.0

dependencies:
  pre:
    - chmod -R 777 ./example
    - pip install -r ./requirements.txt
    - export PYTHONPATH="/home/ubuntu/flask_template/example/application"
    - python ./application/manage.py runserver:
          background: true
    - sleep 5

test:
  override:
    - pwd ~
    - ifconfig
    - echo HelloWorld
    - curl http://127.0.0.1/example
    - py.test ./example/tests/test_example.py
    - exit 0

Si vous vous engagez et que le test réussit, le travail est terminé

9. Informez HipChat des résultats

Vous pouvez définir la destination de la notification dans Paramètres du projet> page Notifications. Est-il facile de comprendre si vous lisez notifier le document officiel?

■ Notifié スクリーンショット 2016-02-26 20.47.16.png

Gamme non couverte dans cet article

Je n'ai pas essayé mysql, donc j'aimerais l'essayer plus tard. Paramètres de la base de données des documents officiels

Impressions de toucher CircleCI

Au début, je ne comprenais pas le raisonnement, et le coût d'apprentissage était lourd, donc la première étape était difficile. J'ai trouvé que c'était très bien parce que les documents officiels étaient substantiels. Pour l'utilisation limitée du test du framework Web Python, j'ai senti que si quelqu'un travaillait dur pour écrire un fichier de configuration, il serait possible de le produire en masse en y faisant référence.

Recommended Posts

[Création d'un environnement CI en 2 heures] Procédure de création d'un serveur Web Python avec CircleCI et réussite d'un test de communication HTTP
Créer et tester un environnement CI pour plusieurs versions de Python
Construisez un serveur léger en Python et écoutez les extensions HTTP de Scratch 2
Construire un environnement Anaconda pour Python avec pyenv
Lancer un serveur Web avec Python et Flask
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
Création d'un environnement de travail Docker R et Python
Créer un environnement pour le traitement du langage naturel avec Python
Procédure de création d'un environnement CDK sous Windows (Python)
Procédure d'installation pour Python et Ansible avec une version spécifique
Bibliothèque pour spécifier un serveur de noms en python et dig
J'ai créé un environnement pour Masonite, un framework WEB Python similaire à Laravel, avec Docker!
Une procédure de création d'environnement moderne pour ceux qui veulent se lancer immédiatement avec Python
Création de l'environnement de travail Docker R et Python 2: prise en charge du japonais
Que diriez-vous d'Anaconda pour créer un environnement d'apprentissage automatique avec Python?
Création d'un environnement Windows 7 pour une introduction à l'apprentissage automatique avec Python
Ecrire un serveur HTTP / 2 en Python
Créer un environnement virtuel avec Python 3
Procédure de création d'un environnement Kube sur Amazon Linux2 (AWS) ~ (avec bonus)
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
[GCP] Procédure de création d'une application Web avec Cloud Functions (Python + Flask)
[Pyenv] Construire un environnement python avec ubuntu 16.04
[Python] Création d'un environnement avec Anaconda [Mac]
Création d'un environnement Python 3.6 avec Windows + PowerShell
Créer un environnement de développement Python pour le développement de l'IA
Notes de l'installation de Homebrew à la création d'un environnement Anaconda pour Python avec pyenv
Recherche d'un moyen efficace d'écrire un Dockerfile avec Python avec de la poésie
Créez un environnement de test Vim + Python en 1 minute
Créer un environnement pour exécuter des scripts Python (pour Mac)
Procédure de création d'un LineBot réalisé avec Python
Créer un environnement virtuel avec conda avec Python
Démarrez un serveur Web Python simple avec Docker
Configurez un serveur SMTP de test en Python.
Diverses commandes pour créer un environnement avec Apache
[Python] Préparation au développement Web (création d'un environnement virtuel)
Pensez à créer un environnement Python 3 dans un environnement Mac
Commandes pour créer un environnement python3 avec virtualenv
Travaillez dans un environnement virtuel avec Python virtualenv.
Procédure de création d'un environnement d'isolation Python (environnement venv)
Essayez de créer un environnement pour MayaPython avec VisualStudioCode
Procédure lors de la construction d'Ubuntu en tant qu'environnement virtuel avec Vagrant + Virtualbox pour LPIC Niveau 1.
Automatisez la suppression de l'arrière-plan pour les derniers portraits dans un répertoire avec Python et API
[Python] Construire un environnement pour la programmation de compétition avec Atom (input () peut être utilisé!) [Mac]
Créez un fichier exe qui fonctionne dans un environnement Windows sans Python avec PyInstaller
Écrire sur la création d'un environnement Python pour l'écriture de Qiita Qiita
Créez un environnement interactif pour l'apprentissage automatique avec Python
Recommandation de construction d'un environnement Python portable avec conda
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créer un serveur Web en langage Go (net / http) (1)
Remarque conda: Création d'un environnement Python avec Spacon ITO
Créez un faux serveur Minecraft en Python avec Quarry
Mémo de construction d'environnement d'apprentissage automatique par Python
Serveur HTTP et client HTTP utilisant Socket (+ navigateur Web) --Python3
Créez un environnement pour l'automatisation des tests avec AirtestIDE (Astuces)
Procédure de la construction de l'environnement au test de fonctionnement de testinfra, un outil de test d'environnement de serveur réalisé par Python
[Sakura Rental Server] (Pour les débutants) Comment créer un environnement pour Python, pyenv et Flask. | Pour csh