From 7b88f5e792a68e36209106259791259f9fc334c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Fri, 23 Jun 2023 17:51:34 +0200 Subject: [PATCH] Backup deployment scripts --- Deployment/build.yml | 81 +++++++++++++++++++++++++++++++++ Deployment/release.yml | 62 +++++++++++++++++++++++++ Deployment/updateSWHash.sh | 7 +++ Frontend/DiunaBI.code-workspace | 7 --- 4 files changed, 150 insertions(+), 7 deletions(-) create mode 100644 Deployment/build.yml create mode 100644 Deployment/release.yml create mode 100644 Deployment/updateSWHash.sh delete mode 100644 Frontend/DiunaBI.code-workspace diff --git a/Deployment/build.yml b/Deployment/build.yml new file mode 100644 index 0000000..e0ec733 --- /dev/null +++ b/Deployment/build.yml @@ -0,0 +1,81 @@ +# ASP.NET +# Build and test ASP.NET projects. +# Add steps that publish symbols, save build artifacts, deploy, and more: +# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4 + +trigger: +- deploy + +pool: + vmImage: 'ubuntu-latest' + +variables: + buildConfiguration: 'Release' + targetRuntime: 'linux-x64' + selfContained: false + dotNetFramework: 'net7.0' + dotNetVersion: '7.0.x' + buildId: $(Build.BuildNumber) + +steps: +# Start: Build WebAPI +- task: UseDotNet@2 + inputs: + version: $(dotNetVersion) +- script: dotnet build --configuration $(buildConfiguration) "WebAPI/DiunaBI-WebAPI.csproj" + displayName: 'Build .NET 6 Application' + +- task: DotNetCoreCLI@2 + displayName: 'dotnet publish $(buildConfiguration)' + inputs: + command: publish + publishWebProjects: True + arguments: '--configuration $(BuildConfiguration) --framework $(dotNetFramework) --runtime $(targetRuntime) --self-contained $(selfContained) --output $(Build.ArtifactStagingDirectory)' + workingDirectory: 'WebAPI' + zipAfterPublish: False +- task: DeleteFiles@1 + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)/WebAPI' + Contents: | + appsettings.Development.json + client_secrets.Development.json +# End: Build WebAPI +# Start: Build Frontend +- task: NodeTool@0 + inputs: + versionSpec: '18.x' + displayName: 'Install Node.js' +- script: | + npm install -g @angular/cli + npm install -g yarn + yarn install + ng config --global cli.packageManager yarn + ng build --configuration production + workingDirectory: 'Frontend' + displayName: 'npm install and build' +- task: CopyFiles@2 + inputs: + SourceFolder: '$(Build.Repository.LocalPath)/Frontend/dist/diunaBI' + Contents: '**' + TargetFolder: '$(Build.ArtifactStagingDirectory)/Frontend' +- task: replacetokens@5 + inputs: + rootDirectory: '$(Build.ArtifactStagingDirectory)/Frontend' + targetFiles: '**/*.js' + encoding: 'auto' + tokenPattern: 'default' + writeBOM: true + actionOnMissing: 'warn' + keepToken: true + actionOnNoFiles: 'warn' + enableTransforms: false + enableRecursion: false + useLegacyPattern: false + enableTelemetry: true +# End: Build Frontend +# Publish results +- task: PublishBuildArtifacts@1 + displayName: 'publish artifacts' + inputs: + pathtoPublish: '$(Build.ArtifactStagingDirectory)' + diff --git a/Deployment/release.yml b/Deployment/release.yml new file mode 100644 index 0000000..d5cd8f7 --- /dev/null +++ b/Deployment/release.yml @@ -0,0 +1,62 @@ +Prepare config: + +steps: +- task: qetza.replacetokens.replacetokens-task.replacetokens@5 + displayName: 'Prepare config' + inputs: + rootDirectory: '$(System.DefaultWorkingDirectory)/_Duina/drop' + targetFiles: | + Frontend/main*.js + WebAPI/appsettings.json + WebAPI/client_secrets.json + verbosity: detailed + actionOnMissing: fail + actionOnNoFiles: warn + + +Create fronternd archive: + +steps: +- task: ArchiveFiles@2 + displayName: 'Create Frontend archive' + inputs: + rootFolderOrFile: '$(System.DefaultWorkingDirectory)/_Duina/drop/Frontend' + archiveFile: '$(System.DefaultWorkingDirectory)/_Duina/drop/zip/DiunaBI-Staging-Frontend.zip' + +Create backend archive: + +steps: +- task: ArchiveFiles@2 + displayName: 'Create Backend archive' + inputs: + rootFolderOrFile: '$(System.DefaultWorkingDirectory)/_Duina/drop/WebAPI' + archiveFile: '$(System.DefaultWorkingDirectory)/_Duina/drop/zip/DiunaBI-Staging-WebAPI.zip' + +Securely copy files to the remote machine: + +steps: +- task: ArchiveFiles@2 + displayName: 'Create Backend archive' + inputs: + rootFolderOrFile: '$(System.DefaultWorkingDirectory)/_Duina/drop/WebAPI' + archiveFile: '$(System.DefaultWorkingDirectory)/_Duina/drop/zip/DiunaBI-Staging-WebAPI.zip' + +Run shell commands on remote machine: + +steps: +- task: SSH@0 + displayName: 'Run shell commands on remote machine' + inputs: + sshEndpoint: 'crm.bim-it.pl' + commands: | + rm -rf /srv/diunabi.bim-it.pl/* + unzip -o /home/mz/deployment/DiunaBI-Staging-Frontend.zip -d /home/mz/deployment + bash /home/mz/deployment/updateSWHash.sh + cp -R /home/mz/deployment/Frontend/* /srv/diunabi.bim-it.pl/ + sudo systemctl stop DiunaBI-WebAPI + rm -rf /home/mz/services/DiunaBI-WebAPI/* + unzip -o /home/mz/deployment/DiunaBI-Staging-WebAPI.zip -d /home/mz/deployment + cp -R /home/mz/deployment/WebAPI/* /home/mz/services/DiunaBI-WebAPI/ + sudo systemctl start DiunaBI-WebAPI + rm -rf /home/mz/deployment/Frontend + rm -rf /home/mz/deployment/WebAPI diff --git a/Deployment/updateSWHash.sh b/Deployment/updateSWHash.sh new file mode 100644 index 0000000..dd21bae --- /dev/null +++ b/Deployment/updateSWHash.sh @@ -0,0 +1,7 @@ +#! /bin/bash +LINE=`grep -oP '.*main.*": ".*"' /home/mz/deployment/Frontend/ngsw.json` +IFS=': ' read -r -a array <<< $LINE +FILE="${array[0]//\"/}" +NEWHASH=($(sha1sum /home/mz/deployment/Frontend$FILE)) +OLDHASH="${array[1]//\"/}" +sed -i "s/$OLDHASH/$NEWHASH/g" /home/mz/deployment/Frontend/ngsw.json \ No newline at end of file diff --git a/Frontend/DiunaBI.code-workspace b/Frontend/DiunaBI.code-workspace deleted file mode 100644 index 97d6683..0000000 --- a/Frontend/DiunaBI.code-workspace +++ /dev/null @@ -1,7 +0,0 @@ -{ - "folders": [ - { - "path": ".." - } - ] -} \ No newline at end of file