Je suis en charge de Azure Functions kafka Extension, mais récemment, j'ai beaucoup de pull requests, donc je veux écrire des tests E2E dans des langues autres que C #. Il est devenu. La plupart des gens changent les choses simplement en regardant C #, mais de mon point de vue, cela fonctionne-t-il dans d'autres langages? C'est ennuyeux de tester à chaque fois, j'ai donc décidé de créer un mécanisme.
L'extension d'origine de ce projet a été écrite en C #. Ainsi, en utilisant le package NuGet créé, il semble que d'autres langages fonctionneront, donc ce qui suit est nécessaire.
À première vue, cela ne ressemble à rien, mais il y a quelques considérations
Après tout, ce qui s'est passé était «100.100.100», eh bien, je ne mettrais pas beaucoup à jour. J'ai défini une version comme celle-là et j'ai rendu le code source identique à la solution simple. Il semble y en avoir un meilleur.
En supposant que dotnet est déjà installé, j'ai écrit et exécuté la commande suivante sur WSL2.
Le point important est dotnet pack -o temp --include-symboles src / Microsoft.Azure.WebJobs.Extensions.Kafka / Microsoft.Azure.WebJobs.Extensions.Kafka.csproj / p: Version = 100.100.100
Package Spécifiez la version 100.100.100
, exécutez pack
et sortez dans le répertoire temp
. Après cela, il est copié dans le répertoire de chaque langue. Les répertoires de chaque langue sont configurés pour être emballés dans Docker
.
#!/bin/bash
CURRENT_DIR=`pwd`
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd $DIR/..
WORKING_DIR=temp
if [ -d "$WORKING_DIR" ]; then rm -rf $WORKING_DIR; fi
dotnet pack -o temp --include-symbols src/Microsoft.Azure.WebJobs.Extensions.Kafka/Microsoft.Azure.WebJobs.Extensions.Kafka.csproj /p:Version=100.100.100
PACKAGE_DIR=test/Microsoft.Azure.WebJobs.Extensions.Kafka.LangEndToEndTests/server/java8/packages
if [ -d "$PACKAGE_DIR" ]; then rm -rf $PACKAGE_DIR; fi
mkdir $PACKAGE_DIR
cp temp/* $PACKAGE_DIR
cd $CURRENT_DIR
Comment puis-je lire le fichier NuGet? J'ai pensé, j'ai mis «Source locale» et l'ai fait lire. Actuellement, il y avait une commande appelée dotnet nuget add source
, alors j'ai essayé de l'utiliser. L'ancienne information consistait à installer mono et à utiliser nuget.exe, mais maintenant cela semble inutile.
RUN dotnet nuget add source /workspace/packages/
À propos, l'émission de cette commande met à jour la valeur par défaut NuGet.Config
comme suit: Au début, j'ai pensé à changer la méthode de fixation de la version et la priorité de lecture de la source du nuget pour que Local le lise toujours en premier, mais après tout False Positive est inquiétant, donc corriger la version Je l'ai fait.
# pwd
/root/.nuget/NuGet
# cat NuGet.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="Package source 1" value="/workspace/packages/" />
</packageSources>
En raison de la spécification, le fichier csproj côté Java et Python est uniquement la version «100.100.100.100». Cela inclura automatiquement une version du code source actuel.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<WarningsAsErrors></WarningsAsErrors>
<DefaultItemExcludes>**</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Kafka" Version="100.100.100" />
<PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.1.7" />
</ItemGroup>
<ItemGroup>
<None Update="confluent_cloud_cacert.pem">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
Dockerfile
Le Dockerfile final ressemble à ceci: Facile et désordonné.
FROM mcr.microsoft.com/azure-functions/java:3.0-java8-core-tools
# Copy Local File
RUN mkdir /workspace
COPY . /workspace
WORKDIR /workspace
# dotnet
ENV LD_LIBRARY_PATH=/workspace/target/azure-functions/kafka-function-20190419163130420/bin/runtimes/linux-x64/native
RUN dotnet nuget add source /workspace/packages/
RUN mvn clean package
ENTRYPOINT [ "/usr/bin/mvn", "azure-functions:run" ]
Si vous êtes un maître de C #, vous pouvez penser à un meilleur moyen. S'il vous plaît laissez-moi savoir si vous en avez. Après cela, j'ai pu démarrer et travailler avec le serveur Kafka avec docker-compose, donc après cela, j'ai écrit le framework E2E en C # et l'ai intégré dans Azure DevOps, et j'ai terminé.
J'ai eu de bons conseils de M. Shibayan, alors j'ai décidé d'utiliser la référence du paquet. Vous n'avez plus besoin de faire un Nuget local, donc celui-ci est meilleur. Je pensais que je ne pouvais pas utiliser PackageReference parce que je l'empaquais dans Docker, mais c'est simple et j'ai juste besoin de faire du contexte de construction du docker la racine du projet. Cependant, je laisserai l'entrée car c'était un bon apprentissage de la commande.
extension.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<WarningsAsErrors></WarningsAsErrors>
<DefaultItemExcludes>**</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.1.7" />
</ItemGroup>
<ItemGroup>
<None Update="confluent_cloud_cacert.pem">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\src\Microsoft.Azure.WebJobs.Extensions.Kafka\Microsoft.Azure.WebJobs.Extensions.Kafka.csproj" />
</ItemGroup>
</Project>
Dockerfile
FROM mcr.microsoft.com/azure-functions/java:3.0-java8-core-tools
# Copy Local File
RUN mkdir /workspace
COPY . /workspace
WORKDIR /workspace/test/Microsoft.Azure.WebJobs.Extensions.Kafka.LangEndToEndTests/server/java8
# dotnet
ENV LD_LIBRARY_PATH=/workspace/target/azure-functions/kafka-function-20190419163130420/bin/runtimes/linux-x64/native
RUN mvn clean package
ENTRYPOINT [ "/usr/bin/mvn", "azure-functions:run" ]
docker build -t testj8 -f test/Microsoft.Azure.WebJobs.Extensions.Kafka.LangEndToEndTests/server/java8/Dockerfile .
Resource
Recommended Posts