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.
Tester un serveur Web construit avec Python3.5 + Flask
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.
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.
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
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
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
** 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
É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é
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é
Je n'ai pas essayé mysql, donc j'aimerais l'essayer plus tard. Paramètres de la base de données des documents officiels
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.