Le contenu du troisième jour de la session d'étude du titre est décrit. Veuillez consulter la page de résumé suivante pour le contenu de toute la journée.
--Création d'une image de conteneur pour le test --Incorporer les tests dans les pipelines CI / CD
Créez un conteneur pour exécuter un test simple. Envoyez une requête en utilisant python
et déterminez le résultat. Si le contenu renvoyé à la requête contient la chaîne de caractères puyopuyo
, qui explique le processus en détail, il se termine normalement par sys.exit (0)
. Au contraire, s'il n'est pas inclus, il se terminera anormalement par sys.exit (1)
. Cela conduit au dernier GitLab CI / CD
.
import os
import requests
import sys
url = os.getenv('URL', 'http://localhost:3000')
check_str = os.getenv('CHECK_STR', 'Puyopuyo')
try:
r_get = requests.get(url)
response = True if r_get.ok else r_get.reason
print(r_get.text)
if r_get.text.find(check_str) == -1:
print(check_str + "Ce n'est pas un problème! !!")
sys.exit(1)
else:
print(check_str + "Alors ça va.")
sys.exit(0)
except requests.exceptions.RequestException as e:
response = str(e)
sys.exit(1)
Ce test peut également être exécuté sur le python
local. Dans l'environnement local python
, les requests
doivent être ʻImport` à l'avance. Vous pouvez exécuter le test en suivant les étapes ci-dessous.
--Installez Python
--pip install requests
s'il n'y a pas demandes
--Utilisez docker-compose
pour ʻup ʻapp
docker-compose up -d app
--Confirmez que vous pouvez accéder avec http: // localhost: 3000
python
localpython test/test.py
Tout d'abord, préparez un Dockerfile
pour créer un conteneur. ʻAlpine n'inclut pas les
requêtes`, je l'ai donc installé.
■ Dockerfile
FROM python:3.6-alpine
WORKDIR /app
COPY ./*.py /app/
RUN pip install requests
CMD ["python", "test.py" ]
Sur la base de ce Dockerfile
, ajoutez le service de test avec docker-compose.yml
.
■ docker-compose.yml
version: '3'
services:
app:
build:
context: ./app #Emplacement de stockage Dockerfile
image: registry.gitlab.com/tamoco-mocomoco/k8s-test/express:latest
ports: #Connexion au port
- 3000:5000
environment:
PORT: 5000
test:
build:
context: ./test
environment:
URL: http://app:5000
CHECK_STR: "Puyopuyo"
La variable d'environnement écrase l'URL de la destination de connexion et la chaîne de caractères à vérifier. Ce qu'il faut noter ici, c'est que puisque la connexion est établie à partir de l'intérieur du conteneur, c'est ʻapp ou le port est
5000, qui est le numéro de port dans l'application. Quand je l'ai exécuté avec le
python local plus tôt, j'accédais à l'URL et au numéro de port après avoir été transféré avec
docker-compose`, mais il est important de savoir où se connecter depuis l'intérieur du conteneur. Devenir.
Vous pouvez créer et tester un conteneur avec docker-compose.
■ Exécuter le test dans un conteneur (succès)
$ docker-compose run test
<!DOCTYPE html>
<html>
<head>
<title>Puyopuyo Wadao</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>Puyopuyo Wadao</h1>
<p>Bienvenue à Puyopuyo Wadao</p>
</body>
</html>
C'est puyopuyo, donc ça va.
Si vous l'exécutez dans un conteneur, vous devrez à nouveau build
si la source d'origine change. Il semble préférable d'ajouter ici des fonctions telles que le rechargement à chaud (un mécanisme qui met à jour automatiquement la source dans le conteneur).
Au fait, si vous voulez que le test échoue, changez la chaîne de caractères puyopuyo
dans ʻapp / express / routes / index.js en
peeling ʻetc. Et cela échouera.
■ Exécuter le test dans le conteneur (échec)
$ docker-compose run test
<!DOCTYPE html>
<html>
<head>
<title>Peeling Wadao</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>Peeling Wadao</h1>
<p>Bienvenue à Peeling Wadao</p>
</body>
</html>
Ce n'est pas Puyopuyo, donc c'est un problème! !!
Ajoutez un mécanisme de test dans un conteneur de test à .gitlab-ci.yml
. Changé pour construire
l'image du conteneur si le test réussit.
■ .gitlab-ci.yml
image: docker:latest
stages:
- test
- build
variables:
DOCKER_DRIVER: overlay
services:
- docker:dind
before_script:
- docker info
- apk update
- apk upgrade
- apk add docker-compose
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker-compose build
test:
stage: test
script:
- docker-compose up -d app
- sleep 5s
- docker-compose run test
build:
stage: build
script:
- docker-compose push
Il a été confirmé que le test avait été exécuté comme le montre l'image ci-dessous.
En cas de succès, vous pouvez voir les résultats d'exécution suivants.
En cas d'échec, vous pouvez vérifier le résultat de l'exécution comme suit.
Au départ, je préparais un test simple pour déterminer le résultat en exécutant curl
dans un script shell. Je m'attendais à un mécanisme pour ajouter curl
au conteneur sur CI et le tester en exécutant ʻapk add curl, mais j'en étais un peu accro, alors j'ai décidé de le réduire avec
python`.
Lors de la création d'un conteneur de test, je pense qu'il est préférable d'utiliser un conteneur qui peut exécuter des tests ʻe2etels que
cypress`.