As we are getting ready for previewing our Azure DevOps hosted builds (~ build without build VM), we need to ensure certain steps specific to our product can be performed without the assumption of a VM with preinstalled scripts.

As a result, we are releasing new tasks in our Azure DevOps tools for Dynamics 365 Finance and Operations in the marketplace. These tasks are intended to support the future hosted builds, and we are not planning to retire the existing steps used on build VM definitions so there is no requirement to use these tasks or update your definitions. However, for some more advanced scenarios they may provide new options or more flexibility if used in existing build definitions...

The following tasks are now available as marketplace tools:

  • Create Deployable Package : Create a deployable package from a set of compiled X++ binaries. This task is available in both build and release pipelines.

To use this task on the build VM, you will need to provide the location of the compiler tools. On a deployed VM, these are located on your service drive in \AOSService\PackagesLocalDirectory\bin .
Additionally, the name of the resulting package zip file is an input parameter, avoiding some of the naming complications if you are also automating releases.

  • Add Licenses to Deployable Package : Add license files to a deployable package. This task is available in both build and release pipelines.

This is an entirely new task which may solve some common requests from customers. If you have ISV licenses, you can use this task to add them to an existing deployable package in a pipeline.

  • Update Model Version : Update model descriptors' versions during build. This task is available in both build and release pipelines.

This task produces the same result as the model versioning task in existing build definitions. Provide a search pattern of list of model descriptors to update. You can specify the lowest layer to update to avoid the script updating lower-layer code such as ISVs for example, if that code happens to be available during the build.

It's important to note that all three of these tasks use the standard Azure DevOps file matching pattern feature. The use of this feature is described in this Azure DevOps Docs article.

  • To create a deployable package, list the path to where the binaries are located. The search pattern can be used to only include or exclude certain binaries - or both. For example, to include all packages except for any with the name "Tests", you can specify two lines in the search pattern (first line includes all packages, second line excludes packages with Tests in the name):
    *
    !(*Tests*)
  • To add licenses to a package, again you can use search patterns to find the text files to include.
  • And finally, the update model version task will search in the X++ Source Location specified for descriptor files to update. You can explicitly provide a list of certain descriptors, you can use all and exclude certain names with wildcards, etc.