fix yml
This commit is contained in:
@@ -6,92 +6,130 @@
|
||||
trigger:
|
||||
- master
|
||||
|
||||
pool:
|
||||
vmImage: 'windows-latest'
|
||||
|
||||
variables:
|
||||
solution: '**/*.sln'
|
||||
buildPlatform: 'Any CPU'
|
||||
buildConfiguration: 'Release'
|
||||
projectName: 'Shogi'
|
||||
solution: '**/*.sln'
|
||||
buildPlatform: 'Any CPU'
|
||||
buildConfiguration: 'Release'
|
||||
projectName: 'Shogi'
|
||||
# Database variables - Set these as pipeline variables in Azure DevOps
|
||||
# DatabaseServer: 'your-sql-server-address'
|
||||
# DatabaseName: 'ShogiDb'
|
||||
# DatabaseUser: 'your-db-user'
|
||||
# DatabasePassword: 'your-db-password' # Mark as secret in Azure DevOps
|
||||
DatabaseServer: 'your-sql-server-address'
|
||||
DatabaseName: 'ShogiDb'
|
||||
DatabaseUser: 'your-db-user'
|
||||
DatabasePassword: 'your-db-password' # Mark as secret in Azure DevOps
|
||||
|
||||
steps:
|
||||
jobs:
|
||||
- job: Build
|
||||
displayName: "Build and Deploy"
|
||||
pool:
|
||||
vmImage: 'windows-latest'
|
||||
steps:
|
||||
|
||||
- task: NuGetToolInstaller@1
|
||||
- task: NuGetToolInstaller@1
|
||||
|
||||
- task: UseDotNet@2
|
||||
inputs:
|
||||
packageType: sdk
|
||||
version: 10.x
|
||||
installationPath: $(Agent.ToolsDirectory)/dotnet
|
||||
- task: UseDotNet@2
|
||||
inputs:
|
||||
packageType: sdk
|
||||
version: 10.x
|
||||
installationPath: $(Agent.ToolsDirectory)/dotnet
|
||||
|
||||
- task: NuGetCommand@2
|
||||
inputs:
|
||||
restoreSolution: '$(solution)'
|
||||
- task: NuGetCommand@2
|
||||
inputs:
|
||||
restoreSolution: '$(solution)'
|
||||
|
||||
- task: FileTransform@1
|
||||
inputs:
|
||||
folderPath: '$(System.DefaultWorkingDirectory)\$(projectName)'
|
||||
fileType: 'json'
|
||||
targetFiles: 'appsettings.json'
|
||||
- task: FileTransform@1
|
||||
inputs:
|
||||
folderPath: '$(System.DefaultWorkingDirectory)\$(projectName)'
|
||||
fileType: 'json'
|
||||
targetFiles: 'appsettings.json'
|
||||
|
||||
- task: DotNetCoreCLI@2
|
||||
inputs:
|
||||
command: 'publish'
|
||||
publishWebProjects: false
|
||||
projects: '$(projectName)/$(projectName).csproj'
|
||||
arguments: '-c Release -o $(Build.ArtifactStagingDirectory)'
|
||||
zipAfterPublish: false
|
||||
- task: DotNetCoreCLI@2
|
||||
inputs:
|
||||
command: 'publish'
|
||||
publishWebProjects: false
|
||||
projects: '$(projectName)/$(projectName).csproj'
|
||||
arguments: '-c Release -o $(Build.ArtifactStagingDirectory)'
|
||||
zipAfterPublish: false
|
||||
|
||||
- task: PowerShell@2
|
||||
displayName: "Generate EF Core migration script"
|
||||
inputs:
|
||||
targetType: 'inline'
|
||||
script: |
|
||||
dotnet tool restore --tool-manifest $(projectName)/.config/dotnet-tools.json
|
||||
dotnet ef migrations script --idempotent --project $(projectName)/$(projectName).csproj --output $(Build.ArtifactStagingDirectory)/migrations.sql
|
||||
workingDirectory: '$(System.DefaultWorkingDirectory)'
|
||||
- task: VSBuild@1
|
||||
displayName: "Build Database Project"
|
||||
inputs:
|
||||
solution: '**/*.sqlproj'
|
||||
platform: '$(buildPlatform)'
|
||||
configuration: '$(buildConfiguration)'
|
||||
msbuildArgs: '/p:OutputPath=$(Build.ArtifactStagingDirectory)'
|
||||
|
||||
- task: CopyFilesOverSSH@0
|
||||
displayName: "Copy database migration script"
|
||||
inputs:
|
||||
sshEndpoint: 'LucaServer'
|
||||
sourceFolder: '$(Build.ArtifactStagingDirectory)'
|
||||
contents: 'migrations.sql'
|
||||
targetFolder: '/var/www/apps/$(projectName)/migrations'
|
||||
readyTimeout: '20000'
|
||||
- task: PowerShell@2
|
||||
displayName: "Generate EF Core migration bundle"
|
||||
inputs:
|
||||
targetType: 'inline'
|
||||
script: |
|
||||
cd $(projectName)
|
||||
dotnet tool restore
|
||||
dotnet ef migrations bundle --self-contained -r linux-x64 --configuration Release --project $(projectName).csproj --output $(Build.ArtifactStagingDirectory)/efbundle
|
||||
workingDirectory: '$(System.DefaultWorkingDirectory)'
|
||||
|
||||
- task: SSH@0
|
||||
displayName: "Apply database migrations"
|
||||
inputs:
|
||||
sshEndpoint: 'LucaServer'
|
||||
runOptions: 'commands'
|
||||
commands: |
|
||||
# Install sqlcmd if not already installed (one-time setup)
|
||||
# which sqlcmd || curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc && curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list && sudo apt-get update && sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 unixodbc-dev
|
||||
- task: PowerShell@2
|
||||
displayName: "Generate deployment script"
|
||||
inputs:
|
||||
targetType: 'inline'
|
||||
script: |
|
||||
$script = @"
|
||||
#!/bin/bash
|
||||
set -e
|
||||
export PATH="`$PATH:`$HOME/.dotnet/tools"
|
||||
cd /var/www/apps/$(projectName)/migrations
|
||||
|
||||
# Apply migrations (adjust connection string as needed)
|
||||
/opt/mssql-tools18/bin/sqlcmd -S $(DatabaseServer) -d $(DatabaseName) -U $(DatabaseUser) -P $(DatabasePassword) -i /var/www/apps/$(projectName)/migrations/migrations.sql -C
|
||||
readyTimeout: '20000'
|
||||
echo "Applying EF Migrations..."
|
||||
chmod +x ./efbundle
|
||||
./efbundle --connection '$(ConnectionStrings.ShogiDatabase)'
|
||||
|
||||
- task: CopyFilesOverSSH@0
|
||||
displayName: "Copy application files"
|
||||
inputs:
|
||||
sshEndpoint: 'LucaServer'
|
||||
sourceFolder: '$(Build.ArtifactStagingDirectory)'
|
||||
contents: '**'
|
||||
targetFolder: '/var/www/apps/$(projectName)'
|
||||
readyTimeout: '20000'
|
||||
echo "Applying DACPAC..."
|
||||
dotnet tool install -g Microsoft.SqlPackage 2>/dev/null || true
|
||||
# Use a glob or specific name for the dacpac
|
||||
DACPAC_FILE=`$(ls *.dacpac | head -n 1)
|
||||
sqlpackage /Action:Publish /SourceFile:"`$DACPAC_FILE" /TargetConnectionString:'$(ConnectionStrings.ShogiDatabase)'
|
||||
"@
|
||||
# Ensure LF line endings for Linux
|
||||
$script = $script -replace "`r`n", "`n"
|
||||
[System.IO.File]::WriteAllText("$(Build.ArtifactStagingDirectory)/deploy_db.sh", $script)
|
||||
|
||||
- task: SSH@0
|
||||
displayName: "Restart Kestrel"
|
||||
inputs:
|
||||
sshEndpoint: 'LucaServer'
|
||||
runOptions: 'commands'
|
||||
commands: 'sudo systemctl restart kestrel-Shogi.service'
|
||||
readyTimeout: '20000'
|
||||
- task: CopyFilesOverSSH@0
|
||||
displayName: "Copy database files"
|
||||
inputs:
|
||||
sshEndpoint: 'LucaServer'
|
||||
sourceFolder: '$(Build.ArtifactStagingDirectory)'
|
||||
contents: |
|
||||
efbundle
|
||||
*.dacpac
|
||||
deploy_db.sh
|
||||
targetFolder: '/var/www/apps/$(projectName)/migrations'
|
||||
readyTimeout: '20000'
|
||||
|
||||
- task: SSH@0
|
||||
displayName: "Apply database migrations"
|
||||
inputs:
|
||||
sshEndpoint: 'LucaServer'
|
||||
runOptions: 'commands'
|
||||
commands: |
|
||||
target="/var/www/apps/$(projectName)/migrations/deploy_db.sh"
|
||||
chmod +x "$target"
|
||||
sed -i 's/\r$//' "$target"
|
||||
bash "$target"
|
||||
readyTimeout: '20000'
|
||||
|
||||
- task: CopyFilesOverSSH@0
|
||||
displayName: "Copy application files"
|
||||
inputs:
|
||||
sshEndpoint: 'LucaServer'
|
||||
sourceFolder: '$(Build.ArtifactStagingDirectory)'
|
||||
contents: '**'
|
||||
targetFolder: '/var/www/apps/$(projectName)'
|
||||
readyTimeout: '20000'
|
||||
|
||||
- task: SSH@0
|
||||
displayName: "Restart Kestrel"
|
||||
inputs:
|
||||
sshEndpoint: 'LucaServer'
|
||||
runOptions: 'commands'
|
||||
commands: 'sudo systemctl restart kestrel-Shogi.service'
|
||||
readyTimeout: '20000'
|
||||
Reference in New Issue
Block a user