Il y a de nombreux avantages à utiliser des conteneurs Docker dans les pipelines CI/CD, en particulier pour les systèmes stateful comme les bases de données. Par exemple, lors de l’exécution des tests d’intégration, chaque tâche CI peut démarrer la base de données dans un conteneur isolé avec un état propre, empêchant les conflits entre les tests. Cela résulte en un environnement de test fiable, cohérent et rentable. Cette approche réduit également la latence et améliore les performances globales du pipeline CI/CD car la base de données est localement accessible.
L’émulateur Azure Cosmos DB basé sur Linux est disponible en tant que conteneur Docker et peut s’exécuter sur une variété de plates-formes, y compris les architectures ARM64 comme Apple Silicon. Il permet le développement et les tests locaux d’applications sans avoir besoin d’un abonnement Azure ou de frais de service. Vous pouvez facilement l’exécuter en tant que conteneur Docker et l’utiliser pour le développement et les tests locaux :
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
Azure Cosmos DB Avec les Actions GitHub
Marchons à travers un exemple pour mieux comprendre comment utiliser l’émulateur Azure Cosmos DB avec les Actions GitHub, qui est une plateforme d’intégration continue et de déploiement continu (CI/CD) qui vous permet d’automatiser votre pipeline de build, de test et de déploiement en utilisant des workflows. Un workflow est un processus automatisé configurable qui peut exécuter un ou plusieurs jobs. Il est défini par un fichier YAML enregistré dans votre dépôt et s’exécute lorsqu’il est déclenché par un événement dans votre dépôt, ou il peut être déclenché manuellement ou selon un planning défini.
Exemple : Workflow CI pour une application .NET
Ce workflow Actions GitHub configure l’émulateur Azure Cosmos DB basé sur Linux en tant que conteneur de service des actions GitHub dans le cadre d’un job. GitHub se charge de démarrer le conteneur Docker et le détruit lorsque le job est terminé – aucune intervention manuelle n’est requise (comme l’exécution de la commande docker run).
name: .NET App CI
on:
push:
branches: [main]
paths:
- 'dotnet-app/**'
pull_request:
branches: [main]
paths:
- 'dotnet-app/**'
jobs:
build-and-test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm]
services:
cosmosdb:
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
ports:
- 8081:8081
env:
PROTOCOL: https
env:
COSMOSDB_CONNECTION_STRING: ${{ secrets.COSMOSDB_CONNECTION_STRING }}
COSMOSDB_DATABASE_NAME: ${{ vars.COSMOSDB_DATABASE_NAME }}
COSMOSDB_CONTAINER_NAME: ${{ vars.COSMOSDB_CONTAINER_NAME }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: '8.0.x'
- name: Export Cosmos DB Emulator Certificate
run: |
sudo apt update && sudo apt install -y openssl
openssl s_client -connect localhost:8081 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cosmos_emulator.cert
sudo cp cosmos_emulator.cert /usr/local/share/ca-certificates/
sudo update-ca-certificates
- name: Install dependencies
run: cd dotnet-app && dotnet restore
- name: Build
run: cd dotnet-app && dotnet build --no-restore
- name: Run tests
run: cd dotnet-app && dotnet test --no-build --verbosity normal
Ce travail est configuré pour s’exécuter sur un exécuteur Ubuntu et utilise l’image docker mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
en tant que conteneur de service. La chaîne de connexion, le nom de la base de données et le nom du conteneur sont configurés en tant que variables d’environnement. Comme le travail s’exécute directement sur un exécuteur hébergé GitHub Actions, l’étape « Exécuter les tests » peut accéder à l’émulateur en utilisant localhost:8081
.
L’étape Exporter le certificat de l’émulateur Cosmos DB est spécifique aux applications .NET (ainsi qu’à Java) car au moment de la rédaction, les SDK .NET et Java ne prennent pas en charge le mode
HTTP
dans l’émulateur. La variable d’environnementPROTOCOL
est définie sur https dans la sectionservices
et cette étape exporte le certificat de l’émulateur et les ajoute au magasin de certificats de confiance du système d’exploitation.
Essayez-le!
Ce dépôt GitHub fournit des exemples de configuration de l’émulateur Linux dans le cadre d’un flux de travail CI GitHub Actions pour les applications .NET, Python, Java et Go sur les architectures x64
et ARM64
(démontré pour l’exécuteur Linux utilisant Ubuntu).
Fourchez le Dépôt
Naviguez jusqu’au dépôt GitHub et cliquez sur le bouton Fork en haut à droite de la page du dépôt pour créer une copie du dépôt sous votre propre compte GitHub.
Dans votre compte GitHub, ouvrez le dépôt et assurez-vous d’activer les workflows dans les paramètres du dépôt.
Ajoutez la chaîne de connexion de l’émulateur Cosmos DB (COSMOSDB_CONNECTION_STRING
) en tant que secret de dépôt. Utilisez la valeur suivante :
AccountEndpoint=http://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==
Ajoutez le nom de la base de données (COSMOSDB_DATABASE_NAME
) et le nom du conteneur (COSMOSDB_CONTAINER_NAME
) en tant que variables de dépôt :
Clonez le dépôt forké sur votre machine locale (assurez-vous d’utiliser votre nom d’utilisateur GitHub) :
git clone https://github.com/<your-username>/cosmosdb-linux-emulator-github-actions.git
cd cosmosdb-linux-emulator-github-actions
Déclenchez le Workflow
Pour déclencher le workflow, apportez une petite modification à une/à toutes les parties du code (.NET, Java, Python ou Go), puis ajoutez et validez vos modifications. Pour une meilleure compréhension, des workflows séparés sont utilisés pour chaque langage.
Poussez vos modifications vers votre dépôt forké sur GitHub :
git add .
git commit -m "Your commit message"
git push origin main
Après avoir poussé les modifications, GitHub Actions exécutera automatiquement le flux de travail. Allez dans l’onglet « Actions » de votre dépôt pour voir l’état et les résultats des flux de travail. Vérifiez les journaux ou les sorties pour vous assurer que les flux de travail s’exécutent correctement.
Considérations concernant les Runners GitHub Actions
Le dépôt d’exemple a utilisé des runners basés sur ubuntu
(pour les architectures x64 et ARM64). Cela devrait fonctionner également pour les runners Windows ARM. Si vous envisagez d’utiliser des runners Windows x64, notez qu’au moment de la rédaction, les conteneurs de service GitHub Actions ne sont pas pris en charge dans les runners non-Linux. Cependant, vous pouvez contourner cela en ajoutant des étapes pour installer Docker et gérer son cycle de vie, y compris le démarrage et l’arrêt du conteneur.
Conclusion
Comme je l’ai mentionné précédemment, il y a de nombreux avantages à utiliser des conteneurs Docker dans les pipelines CI. GitHub Actions a été utilisé comme plateforme CI/CD dans ce cas, mais ces concepts s’appliquent également à d’autres solutions. Essayez-le et faites-nous savoir ce que vous en pensez!
Source:
https://dzone.com/articles/use-azure-cosmos-db-as-a-docker-container-in-cicd