Ich bin verantwortlich für Azure Functions kafka Extension, aber in letzter Zeit habe ich viele Pull-Anfragen, daher möchte ich E2E-Tests in anderen Sprachen als C # schreiben Es ist geworden. Die meisten Leute ändern Dinge, indem sie nur C # betrachten, aber funktioniert es aus meiner Sicht in anderen Sprachen? Es ist ärgerlich, jedes Mal zu testen, deshalb habe ich beschlossen, einen Mechanismus zu erstellen.
Die ursprüngliche Erweiterung dieses Projekts wurde in C # geschrieben. Wenn Sie also das erstellte NuGet-Paket verwenden, scheint es, als würden andere Sprachen funktionieren. Daher ist Folgendes erforderlich.
Auf den ersten Blick sieht es nach nichts aus, aber es gibt einige Überlegungen
Immerhin war "100.100.100", nun, ich würde nicht so viel aktualisieren. Ich habe eine solche Version eingestellt und den Quellcode mit der einfachen Lösung identisch gemacht. Es scheint einen besseren zu geben.
Unter der Annahme, dass dotnet bereits installiert ist, habe ich den folgenden Befehl auf WSL2 geschrieben und ausgeführt. Der wichtige Punkt ist "dotnet pack -o temp --include-symbole src / Microsoft.Azure.WebJobs.Extensions.Kafka / Microsoft.Azure.WebJobs.Extensions.Kafka.csproj / p: Version = 100.100.100` Package" Geben Sie die Version 100.100.100 an, führen Sie "pack" aus und geben Sie sie in das Verzeichnis "temp" aus. Danach wird es für jede Sprache in das Verzeichnis kopiert. Die Verzeichnisse für jede Sprache sind so konfiguriert, dass sie in "Docker" gepackt werden.
#!/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
Wie kann ich die NuGet-Datei zum Lesen bringen? Ich dachte, ich habe "Local Source" eingestellt und zum Lesen gebracht. Derzeit gab es einen Befehl namens "dotnet nuget add source", also habe ich versucht, ihn zu verwenden. Die alte Information war, mono zu installieren und nuget.exe zu verwenden, aber jetzt scheint es unnötig.
RUN dotnet nuget add source /workspace/packages/
Übrigens aktualisiert die Ausgabe dieses Befehls die Standardeinstellung "NuGet.Config" wie folgt: Zuerst dachte ich darüber nach, die Methode zum Korrigieren der Version und die Priorität des Lesens der Nuget-Quelle so zu ändern, dass Local sie immer zuerst liest, aber schließlich ist False Positive besorgniserregend, also die Version zu korrigieren Ich habe es gemacht.
# 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>
Aufgrund der Spezifikation ist die csproj-Datei auf der Java- und Python-Seite nur die Version 100.100.100.100
. Dies beinhaltet automatisch einen Build des aktuellen Quellcodes.
<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
Das endgültige Dockerfile sieht folgendermaßen aus: Einfach und chaotisch.
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" ]
Wenn Sie ein Meister von C # sind, können Sie sich einen besseren Weg vorstellen. Bitte lassen Sie mich wissen, wenn Sie welche haben. Danach konnte ich mit Docker-Compose den Kafka-Server starten und damit arbeiten. Danach schrieb ich das E2E-Framework in C # und integrierte es in Azure DevOps, und fertig.
Ich habe gute Ratschläge von Herrn Shibayan erhalten, deshalb habe ich mich für die Paketreferenz entschieden. Sie müssen kein lokales Nuget mehr erstellen, damit dieses besser aussieht. Ich dachte, ich könnte PackageReference nicht verwenden, weil ich es in Docker packe, aber es ist einfach und ich muss nur den Docker-Build-Kontext zum Projektstamm machen. Ich werde den Eintrag jedoch verlassen, da es ein gutes Lernen des Befehls war.
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