do everything dockerfile added

This commit is contained in:
Wolfgang Hottgenroth 2021-11-26 13:23:29 +01:00
parent df3284fe71
commit c0c3ef4c76
Signed by: wn
GPG Key ID: E49AF3B9EF6DD469
3 changed files with 90 additions and 8 deletions

64
Dockerfile Normal file
View File

@ -0,0 +1,64 @@
# stage 1 generator - implementation code
FROM python:3.10.0-bullseye AS stage1-builder
RUN mkdir /tmp/work && chown 1000 /tmp/work
COPY openapi.yaml /tmp/work
COPY generateAll.sh /tmp/work
COPY ENV /tmp/work
COPY regular.cs.tmpl /tmp/work
COPY generate.py /tmp/work
COPY generateHelper.py /tmp/work
RUN \
pip install Cheetah3 && \
pip install PyYAML
USER 1000
RUN \
cd /tmp/work && \
./generateAll.sh -r1
# stage 2 generator - openapi server stubs code and integration
# with implementation and database code
FROM openapitools/openapi-generator-cli:v5.3.0 AS stage2-builder
RUN mkdir /tmp/work && chown 1000 /tmp/work
USER 1000
COPY openapi.yaml /tmp/work
COPY generateAll.sh /tmp/work
COPY ENV /tmp/work
COPY DbService.cs /tmp/work
COPY --from=stage1-builder /tmp/work/regular.cs /tmp/work
RUN cd /tmp/work && ./generateAll.sh -k2c
# final container
FROM wollud1969/dotnetcore5sdk:1.0.0
ENV Database__Password "xxx"
RUN \
useradd -d /opt/service -m service && \
mkdir /opt/service/output && chown service:service /opt/service/output
USER service
WORKDIR /opt/service
COPY generateAll.sh .
COPY ENV .
COPY --from=stage2-builder /tmp/work/output/ ./output
RUN ./generateAll.sh -kb
EXPOSE 8080
CMD [ "./generateAll.sh", "-kx" ]

2
ENV
View File

@ -3,7 +3,7 @@ export PACKAGE_NAME
Database__User=apiservicetestdb Database__User=apiservicetestdb
Database__Host=172.16.10.18 Database__Host=172.16.10.18
Database__Password=xxx # Database__Password=xxx
Database__Name=apiservicetestdb Database__Name=apiservicetestdb
export Database__User Database__Host Database__Password Database__Name export Database__User Database__Host Database__Password Database__Name

View File

@ -6,15 +6,19 @@ BUILD="0"
EXECUTE="0" EXECUTE="0"
STAGE1="0" STAGE1="0"
STAGE2="0" STAGE2="0"
while getopts rxbh12 flag STAGE2_PRE_CONTAINER="0"
KEEP="0"
while getopts rxbh12ck flag
do do
case "${flag}" in case "${flag}" in
h) h)
echo "1 ... generator stage 1 (implementation generator)"; echo "1 ... generator stage 1 (implementation generator)";
echo "2 ... generator stage 2 (openapi generator)"; echo "2 ... generator stage 2 (openapi generator)";
echo "r ... remove output directory"; echo "r ... remove output directory";
echo "k ... keep existing output directory";
echo "b ... build after generating"; echo "b ... build after generating";
echo "x ... execute after building"; echo "x ... execute after building";
echo "c ... run stage in pre-started container";
echo "h ... show help"; echo "h ... show help";
;; ;;
@ -33,6 +37,12 @@ do
2) 2)
STAGE2="1" STAGE2="1"
;; ;;
c)
STAGE2_PRE_CONTAINER="1"
;;
k)
KEEP="1"
;;
esac esac
done done
@ -42,7 +52,7 @@ if [ "$REMOVE" = "1" ]; then
fi fi
# safety measure # safety measure
if [ -d output ]; then if [ "$KEEP" = "0" -a -d output ]; then
echo "output directory already exist" echo "output directory already exist"
echo "remove manually and try again" echo "remove manually and try again"
exit 1 exit 1
@ -59,8 +69,15 @@ fi
if [ "$STAGE2" = "1" ]; then if [ "$STAGE2" = "1" ]; then
echo "generate server code and endpoint stubs from openapi.yaml" echo "generate server code and endpoint stubs from openapi.yaml"
docker run -it --rm -v $PWD:/work -u $UID openapitools/openapi-generator-cli:v5.3.0 \ if [ "$STAGE2_PRE_CONTAINER" = "0" ]; then
generate -i /work/openapi.yaml -g aspnetcore -o /work/output \ OPENAPI_GENERATOR_CMD="docker run -it --rm -v $PWD:/work -u $UID openapitools/openapi-generator-cli:v5.3.0"
WORK_DIR="/work"
else
OPENAPI_GENERATOR_CMD="docker-entrypoint.sh"
WORK_DIR="."
fi
$OPENAPI_GENERATOR_CMD \
generate -i $WORK_DIR/openapi.yaml -g aspnetcore -o $WORK_DIR/output \
--package-name $PACKAGE_NAME \ --package-name $PACKAGE_NAME \
--additional-properties="packageVersion=0.0.1,aspnetCoreVersion=5.0,operationIsAsync=false,operationResultTask=true,\ --additional-properties="packageVersion=0.0.1,aspnetCoreVersion=5.0,operationIsAsync=false,operationResultTask=true,\
generateBody=false,classModifier=abstract,operationModifier=abstract" generateBody=false,classModifier=abstract,operationModifier=abstract"
@ -91,17 +108,18 @@ fi
if [ "$BUILD" = "1" ]; then if [ "$BUILD" = "1" ]; then
echo "build service" echo "build service"
cd output pushd output
pushd src/$PACKAGE_NAME pushd src/$PACKAGE_NAME
dotnet add package MySqlConnector --version 2.0.0 dotnet add package MySqlConnector --version 2.0.0
popd popd
sh build.sh sh build.sh
popd
fi fi
if [ "$EXECUTE" = "1" ]; then if [ "$EXECUTE" = "1" ]; then
echo "execute service" echo "execute service"
dotnet run -p src/$PACKAGE_NAME/$PACKAGE_NAME.csproj dotnet run -p output/src/$PACKAGE_NAME/$PACKAGE_NAME.csproj
fi fi