Sharpeye500
Sharpeye500

Reputation: 9073

Deploy Azure webjob inside the correct location using YAML file

What i am trying to do?

Build one YAML file that builds and deploys service as a webjob inside webjobs location in appservice's webjobs location.

I have this one YAML code that builds and deploys a console application of a worker service as a Azure Webjob in the appservice.

The build is succeeded and deployment is also succeeding, however the webjob is not being placed in the right location.

I want this to be deployed inside site-> jobs ->continuous->webjob name, but it gets deployed into site->wwwroot->webjob name

trigger:    
  branches:    
    include:    
      - main    
  paths

    include:

      - MyTestJobJob/MyTestJobService.cs

pool:    
  vmImage: 'windows-latest'
variables:   
  buildConfiguration: 'Release'
  devWebAppName: 'MyTestJobJobDev'
  resourceGroupName: 'MyRG' 
  webJobName: 'MyTestJobJob'    

stages:

- stage: Build

  jobs:

  - job: Build

    steps:

    - task: UseDotNet@2

      inputs:

        packageType: 'sdk'

        version: '8.x'

        installationPath: $(Agent.ToolsDirectory)/dotnet

 

    - task: DotNetCoreCLI@2

      inputs:

        command: 'restore'

        projects: '**/*.csproj'

 

    - task: DotNetCoreCLI@2

      inputs:

        command: 'build'

        projects: '**/*.csproj'

        arguments: '--configuration $(buildConfiguration)'

 

    - task: DotNetCoreCLI@2

      inputs:

        command: 'publish'

        projects: 'MyTestJobJob/MyTestJobJob.csproj'

        arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish_output/App_Data/jobs/continuous/$(webJobName)'

        publishWebProjects: false

        modifyOutputPath: false

        zipAfterPublish: false

 

    - task: DotNetCoreCLI@2

      inputs:

        command: 'publish'

        projects: 'MyTestJobJob/MyTestJobJob.csproj'

        arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish_output'

        publishWebProjects: false

        modifyOutputPath: false

        zipAfterPublish: false

 

    - task: ArchiveFiles@2

      inputs:

        rootFolderOrFile: '$(Build.ArtifactStagingDirectory)'

        includeRootFolder: false

        archiveType: 'zip'

        archiveFile: '$(Build.ArtifactStagingDirectory)/MyTestJobJob.zip'

        replaceExistingArchive: true

 

    - task: PublishBuildArtifacts@1

      inputs:

        PathtoPublish: '$(Build.ArtifactStagingDirectory)/MyTestJobJob.zip'

        ArtifactName: 'drop'

        publishLocation: 'Container'

 

- stage: DeployToDev

  dependsOn: Build

  jobs:

  - deployment: DeployToDev

    environment: 'Dev'

    strategy:

      runOnce:

        deploy:

          steps:

          - download: current

            artifact: drop

 

          - task: AzureWebApp@1

            inputs:

              azureSubscription: 'MyAZSubscription' # Pushes changes to the webjob

              appName: '$(devWebAppName)'

              package: '$(Pipeline.Workspace)/drop/MyTestJobJob.zip'

              resourceGroupName: '$(resourceGroupName)'

              webJobName: '$(webJobName)'

              webJobType: 'Continuous'

              publishWebProjects: false

I think the change needs to happen in this line, but i am not sure, what needs to be altered to push into the right azure webjob location

 arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish_output/App_Data/jobs/continuous/$(webJobName)'

If i manually add a new webjob inside azure webjobs of appservice and attach the artifact zip file, the webjob runs which i am trying to automate.

Upvotes: 0

Views: 136

Answers (1)

wade zhou - MSFT
wade zhou - MSFT

Reputation: 8468

To deploy the webjob into target location, you need to make sure the zip file(MyTestJobJob.zip) in artifact has correct folder structure, App_Data/jobs/continuous for continuous type.

The artifact sample on my side for your reference:

enter image description here

For your yaml artifact result, there will be extra publish_output in the path, and extra files in the zip.

To fix the zip file strucutre, please change the location $(Build.ArtifactStagingDirectory) in publish argument to $(Build.BinariesDirectory), and fix the root folder for ArchiveFiles@2 task.

Sample as below:

trigger:    
  branches:    
    include:    
      - main    
  paths:
    include:
      - MyTestJobJob/MyTestJobService.cs

pool:    
  vmImage: 'windows-latest'
variables:   
  buildConfiguration: 'Release'
  devWebAppName: 'MyTestJobJobDev'
  resourceGroupName: 'MyRG' 
  webJobName: 'MyTestJobJob'    

stages:
- stage: Build
  jobs:
  - job: Build
    steps:
    - task: UseDotNet@2
      inputs:
        packageType: 'sdk'
        version: '8.x'
        installationPath: $(Agent.ToolsDirectory)/dotnet

    - task: DotNetCoreCLI@2
      inputs:
        command: 'restore'
        projects: '**/*.csproj'

    - task: DotNetCoreCLI@2
      inputs:
        command: 'build'
        projects: '**/*.csproj'
        arguments: '--configuration $(buildConfiguration)'

    - task: DotNetCoreCLI@2
      inputs:
        command: 'publish'
        projects: 'MyTestJobJob/MyTestJobJob.csproj'
        arguments: '--configuration $(buildConfiguration) --output $(Build.BinariesDirectory)/publish_output/App_Data/jobs/continuous/$(webJobName)'
        publishWebProjects: false
        modifyOutputPath: false
        zipAfterPublish: false

    # - task: DotNetCoreCLI@2
    #   inputs:
    #     command: 'publish'
    #     projects: 'MyTestJobJob/MyTestJobJob.csproj'
    #     arguments: '--configuration $(buildConfiguration) --output $(Build.BinariesDirectory)/publish_output'
    #     publishWebProjects: false
    #     modifyOutputPath: false
    #     zipAfterPublish: false

    - task: ArchiveFiles@2
      inputs:
        rootFolderOrFile: '$(Build.BinariesDirectory)/publish_output'
        includeRootFolder: false
        archiveType: 'zip'
        archiveFile: '$(Build.ArtifactStagingDirectory)/MyTestJobJob.zip'
        replaceExistingArchive: true

    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'

I commented the 2nd publish task, add it back if it's needed for you.

In addition, for AzureWebApp@1 deployment task, it doesn't have parameters webJobName, webJobType, publishWebProjects, but appType is needed.

          - task: AzureWebApp@1
            inputs:
              azureSubscription: 'MyAZSubscription'
              appType: 'webApp'
              appName: '$(devWebAppName)'
              package: '$(Pipeline.Workspace)/drop/MyTestJobJob.zip'
              deploymentMethod: 'auto'

Please check my another answer in similar ticket for your reference.

Upvotes: 1

Related Questions