-->

Deploy to Azure Web App from Multiple Repositories

2019-04-02 03:38发布

问题:

Looking for a way to deploy to an azure web app from 3 separate github repositories. One of the repositories is the main website, the other two are common libraries used by other projects. We want the deployment to pull down from all three repositories into an artifact directory, run msbuild and copy over the artifacts to wwwroot.

I am assuming i will need a custom .deployment file along with a kudu batch file. But I can't find any examples on how to pull down from multiple github repositories.

edit: spelling

回答1:

According to your description, you could create your own .deployment and deploy.cmd file to firstly clone the second and third github repositories common libraries to the web app folder then use msbuild command to build it.

Notice: You couldn't clone the second and third github repositories to artifact directory. Because, you have 3 separate github repositories, each repository has its own .git file. We couldn't combine this three. So I suggest you could firstly clone the second and third repository to new folder and use msbuild to build it.

More details, you could refer to below steps:

Firstly, I suggest you could download the deployment script from the KUDU console.

Notice:After you have already deployed from the git, this file could be downloaded.We use this file as a example to add codes. If you doesn't have you could follow my deployment.cmd. Remember changing the project name.

As below:

Open Kudu.

Download the deploy script.

Then you could change find it contains the .deployment and deploy.cmd file.

Add below codes to the deploy.cmd file and add this two file into your git folder to push.

  git clone https://github.com/{yourgithubname}/BrandoGitTestLibrary.git D:\home\site\{foldername}

  echo  second project
  :: 1. Start restore second project
  dotnet restore "D:\home\site\{foldername}\BrandoGitTestLibrary\BrandoGitTestLibrary.csproj"

  :: 2. Build to DEPLOYMENT_TEMP wait copy
  dotnet build  "D:\home\site\{foldername}\BrandoGitTestLibrary\BrandoGitTestLibrary.csproj" --output "%DEPLOYMENT_TEMP%"

This code is used to build your common library to tempfolder wait for copying.

After the main website published, it will copy the tempfolder to the wwwrot.

The total deploy.cmd file.

Notice: This example just build two repositories. If you want to build and publish 3 repositories, you just need add the codes to clone again.

    git clone https://github.com/BrandoTest/BrandoGitTestLibrary.git D:\home\site\sencondproject

    echo  second project
    :: 3. Start restore second project
    dotnet restore "D:\home\site\sencondproject\BrandoGitTestLibrary\BrandoGitTestLibrary.csproj"

    :: 4. Build and publish
    dotnet build  "D:\home\site\sencondproject\BrandoGitTestLibrary\BrandoGitTestLibrary.csproj" --output "%DEPLOYMENT_TEMP%"




@if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off

:: ----------------------
:: KUDU Deployment Script
:: Version: 1.0.15
:: ----------------------

:: Prerequisites
:: -------------

:: Verify node.js installed
where node 2>nul >nul
IF %ERRORLEVEL% NEQ 0 (
  echo Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment.
  goto error
)

:: Setup
:: -----

setlocal enabledelayedexpansion

SET ARTIFACTS=%~dp0%..\artifacts

IF NOT DEFINED DEPLOYMENT_SOURCE (
  SET DEPLOYMENT_SOURCE=%~dp0%.
)

IF NOT DEFINED DEPLOYMENT_TARGET (
  SET DEPLOYMENT_TARGET=%ARTIFACTS%\wwwroot
)

IF NOT DEFINED NEXT_MANIFEST_PATH (
  SET NEXT_MANIFEST_PATH=%ARTIFACTS%\manifest

  IF NOT DEFINED PREVIOUS_MANIFEST_PATH (
    SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\manifest
  )
)

IF NOT DEFINED KUDU_SYNC_CMD (
  :: Install kudu sync
  echo Installing Kudu Sync
  call npm install kudusync -g --silent
  IF !ERRORLEVEL! NEQ 0 goto error

  :: Locally just running "kuduSync" would also work
  SET KUDU_SYNC_CMD=%appdata%\npm\kuduSync.cmd
)
IF NOT DEFINED DEPLOYMENT_TEMP (
  SET DEPLOYMENT_TEMP=%temp%\___deployTemp%random%
  SET CLEAN_LOCAL_DEPLOYMENT_TEMP=true
)

IF DEFINED CLEAN_LOCAL_DEPLOYMENT_TEMP (
  IF EXIST "%DEPLOYMENT_TEMP%" rd /s /q "%DEPLOYMENT_TEMP%"
  mkdir "%DEPLOYMENT_TEMP%"
)

IF DEFINED MSBUILD_PATH goto MsbuildPathDefined
SET MSBUILD_PATH=%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe
:MsbuildPathDefined
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Deployment
:: ----------

echo Handling ASP.NET Core Web Application deployment.

:: 1. Restore nuget packages
call :ExecuteCmd dotnet restore "%DEPLOYMENT_SOURCE%\TestForCore2.csproj"
IF !ERRORLEVEL! NEQ 0 goto error

:: 2. Build and publish
call :ExecuteCmd dotnet publish "%DEPLOYMENT_SOURCE%\TestForCore2.csproj" --output "%DEPLOYMENT_TEMP%" --configuration Release
IF !ERRORLEVEL! NEQ 0 goto error

:: 5. KuduSync
call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_TEMP%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd"
IF !ERRORLEVEL! NEQ 0 goto error

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
goto end

:: Execute command routine that will echo out when error
:ExecuteCmd
setlocal
set _CMD_=%*
call %_CMD_%
if "%ERRORLEVEL%" NEQ "0" echo Failed exitCode=%ERRORLEVEL%, command=%_CMD_%
exit /b %ERRORLEVEL%

:error
endlocal
echo An error has occurred during web site deployment.
call :exitSetErrorLevel
call :exitFromFunction 2>nul

:exitSetErrorLevel
exit /b 1

:exitFromFunction
()

:end
endlocal
echo Finished successfully.

Result: