This commit is contained in:
205
shellscripts/DotDockerbuilder8.sh
Normal file
205
shellscripts/DotDockerbuilder8.sh
Normal file
@@ -0,0 +1,205 @@
|
||||
#!/bin/bash
|
||||
|
||||
VERSION="2025.05.12-1430"
|
||||
|
||||
usage() {
|
||||
cat << EOF
|
||||
DotDockerBuilder8 Version:$VERSION
|
||||
Arguments:
|
||||
-D|--directory (optional) path to solution folder
|
||||
-S|--solution (mandatory) solution name
|
||||
-P|--project (mandatory) project name
|
||||
-p|--port (mandatory) exposed port
|
||||
-G|--git (optional) git URI (gitea.a.ucnit.eu)
|
||||
-U|--gituser (optional) authorized git user (docker)
|
||||
-A|--accesstoken (optional) accesstoken for git user
|
||||
-h|--help this text
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
[ $# -eq 0 ] && usage
|
||||
|
||||
DIRECTORY=""
|
||||
SOLUTION=""
|
||||
PROJECT=""
|
||||
EXPOSED_PORT="80"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-D|--directory)
|
||||
DIRECTORY="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
-S|--solution)
|
||||
SOLUTION="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
-P|--project)
|
||||
PROJECT="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
-p|--port)
|
||||
EXPOSED_PORT="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
-G|--git)
|
||||
Git="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
-U|--gituser)
|
||||
GitUser="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
-A|--accesstoken)
|
||||
AccessToken="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
;;
|
||||
-*|--*)
|
||||
echo "Unknown option $1"
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
shift # past argument
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[ -n "$DIRECTORY" ] && cd $DIRECTORY
|
||||
|
||||
|
||||
|
||||
if [ ! -e $SOLUTION/$PROJECT/$PROJECT.csproj ]; then
|
||||
echo "Error, Not found: $SOLUTION/$PROJECT/$PROJECT.csproj"
|
||||
echo "Executed from $(pwd)"
|
||||
cat << EOF
|
||||
Usage:
|
||||
$0 (-S|--solution) solution (-P|--project) project (-p|--port) exposed_port
|
||||
Please call from just outside solution folder
|
||||
EOF
|
||||
echo "Current directory: $(pwd)"
|
||||
exit
|
||||
fi
|
||||
|
||||
RUNDIR=$pwd
|
||||
thisArch=$(uname -m)
|
||||
myRuntime="UNKNOWN"
|
||||
[ "$thisArch" == "x86_64" ] && myRuntime="linux-x64"
|
||||
[ "$thisArch" == "aarch64" ] && myRuntime="linux-arm64"
|
||||
|
||||
# Dockerfile.dotbuild is executed from parent of solution
|
||||
cat << EOF > Dockerfile.dotbuild
|
||||
# Version 2024.01.26 1702
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
|
||||
WORKDIR /app
|
||||
EXPOSE $EXPOSED_PORT
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
WORKDIR /src
|
||||
COPY $SOLUTION ./
|
||||
RUN pwd
|
||||
RUN dotnet restore "$PROJECT/$PROJECT.csproj"
|
||||
RUN dotnet build "$PROJECT/$PROJECT.csproj" -c Release --self-contained --runtime $myRuntime -o /app/build
|
||||
RUN ls -lR /app
|
||||
|
||||
FROM build AS publish
|
||||
RUN dotnet publish "$PROJECT/$PROJECT.csproj" -c Release --self-contained --runtime $myRuntime -o /app/publish
|
||||
RUN ls -lR /app
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
#ENTRYPOINT ["dotnet", "$PROJECT.dll"]
|
||||
### New section
|
||||
### CHECK_PORTS="mysql:3306 rabbitMQ:5672"
|
||||
COPY start.dotbuild ./kajestartup.sh
|
||||
RUN chmod 755 kajestartup.sh
|
||||
CMD ./kajestartup.sh
|
||||
RUN pwd
|
||||
RUN ls -l
|
||||
RUN cat ./kajestartup.sh
|
||||
EOF
|
||||
|
||||
cat << EOF > start.dotbuild
|
||||
#!/bin/bash
|
||||
echo "Version 22.10.15 1446"
|
||||
if [ -n "\$CHECK_PORTS" ]; then
|
||||
echo "Must check ports before start"
|
||||
! which nc >/dev/null && apt-get update && apt-get -y install netcat
|
||||
for nn in \$(echo "\$CHECK_PORTS" | tr ';' ' '); do
|
||||
xHost=\$(echo "\$nn" | cut -f 1 -d ':')
|
||||
xPort=\$(echo "\$nn" | cut -f 2 -d ':')
|
||||
echo "Checking Host: \$xHost Port: \$xPort"
|
||||
while ! nc -z -v \$xHost \$xPort; do
|
||||
echo "Waiting for Host: \$xHost Port: \$xPort"
|
||||
sleep 5
|
||||
done
|
||||
echo "Checking Host: \$xHost Port: \$xPort ... OK"
|
||||
done
|
||||
echo "Checking ports done..."
|
||||
fi
|
||||
# Adding DOCKER_HOST will cause an entry in /etc/hosts for local access to host platform
|
||||
if [ -n "\$DOCKER_HOST" ] && grep -qv "KAJE" /etc/hosts; then
|
||||
echo "Adding DOCKER_HOST to /etc/hosts"
|
||||
b0=\$(cat /proc/net/route | sed -n '2,2 p' | cut -b 21-22)
|
||||
b1=\$(cat /proc/net/route | sed -n '2,2 p' | cut -b 19-20)
|
||||
b2=\$(cat /proc/net/route | sed -n '2,2 p' | cut -b 17-18)
|
||||
b3=\$(cat /proc/net/route | sed -n '2,2 p' | cut -b 15-16)
|
||||
echo "\$((16#\$b0)).\$((16#\$b1)).\$((16#\$b2)).\$((16#\$b3)) \$DOCKER_HOST" >> /etc/hosts
|
||||
echo "# KAJE WAS HERE" >> /etc/hosts
|
||||
echo "Changed /etc/hosts:"
|
||||
cat /etc/hosts
|
||||
fi
|
||||
echo "Starting: \$(date)"
|
||||
dotnet $PROJECT.dll
|
||||
[ "\$ZOMBIE" == "YES" ] && echo "ZOMBIE STATE ENTERED" && sleep 1d
|
||||
EOF
|
||||
|
||||
# We are just outside solution folder
|
||||
tagName=$(echo "$PROJECT" | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
pwd
|
||||
if [ -e $SOLUTION/$PROJECT/$PROJECT.csproj ]; then
|
||||
echo "Project file OK"
|
||||
else
|
||||
echo "Project file NOK"
|
||||
exit
|
||||
fi
|
||||
echo "--------------"
|
||||
cat ./Dockerfile.dotbuild
|
||||
echo "--------------"
|
||||
|
||||
echo "docker build --file ./Dockerfile.dotbuild --tag=$tagName:latest ."
|
||||
sudo docker build --file ./Dockerfile.dotbuild --tag=$tagName:latest .
|
||||
|
||||
if [ -n "$Git" ]; then
|
||||
CONTAINERNAME=$(echo -n "$Git/$GitUser/$tagName" | tr '[:upper:]' '[:lower:]')
|
||||
sudo docker image rm $CONTAINERNAME:latest
|
||||
sudo docker image rm $CONTAINERNAME:$(date +%y%m%d)
|
||||
sudo docker image tag $tagName:latest $CONTAINERNAME:latest
|
||||
sudo docker image tag $tagName:latest $CONTAINERNAME:$(date +%y%m%d)
|
||||
sudo docker image ls
|
||||
echo "Pushing images to repository"
|
||||
sudo docker login $Git --username=$GitUser --password=$AccessToken
|
||||
echo "docker push $CONTAINERNAME:latest"
|
||||
sudo docker push $CONTAINERNAME:latest
|
||||
echo "docker push $CONTAINERNAME:$(date +%y%m%d)"
|
||||
sudo docker push $CONTAINERNAME:$(date +%y%m%d)
|
||||
|
||||
echo "Cleaning up: [$tagName:latest] [$CONTAINERNAME:latest] [$CONTAINERNAME:$(date +%y%m%d)]"
|
||||
sudo docker image rm $tagName:latest
|
||||
sudo docker image rm $CONTAINERNAME:latest $CONTAINERNAME:$(date +%y%m%d)
|
||||
fi
|
||||
|
||||
sudo docker image prune --force
|
||||
echo "Done..."
|
||||
Reference in New Issue
Block a user