0

I want to make a multi deployment server using the "Deploy BizTalk Application" task on azure release pipeline from a deployment group job, but the task install all the artifacts (add resources, GAC, bindings) on the 3 servers . is there a way to limit the bindings and adding resources only on the first node?

the current behaviour generate an exception :

Concurrency Violation encountered while Updating

Other thing, in BizTalk 2016 FP2 MSFT has added an enhancement for deployment group, someone knows what is really changed?

Dijkgraaf
  • 11,049
  • 17
  • 42
  • 54
Hichamveo
  • 475
  • 3
  • 16

1 Answers1

0

This is going to be a long post, so hang on.

You want to learn about BTDF (BizTalk Deployment Framework). I wrote a whole guide for my internal team, so I cannot share that easily. But I'm going to try to explain what you need to do.

1) In our Azure DevOps organization, add the extensions "Deployment Framework for BizTalk" and "BTDF Project Updater" (I wrote that one, but is optional to update the version number for the generated MSI).

2) There are guides online, but learn how to make your project into an MSI and deployable using the BTDF within the Build Pipeline. Leverage "BTDF Project Updater" to increment the version number. enter image description here

3) Now, you said you have 3 servers within your BizTalk environment. During a manual BizTalk deployment Server 1 and Server 2 get a "light" BizTalk deployment and Server 3 gets the FULL BizTalk deployment. This means during the Release Pipeline to do a release on Servers 1 and 2, but do it a tiny bit different on Server 3.

3.1) Create a normal Agent Pool for Server 3, and associate the ADO Agent on Server 3 to that.

3.2) Create a Deployment pool and associate the agents for Server 1 and Server 2 (I think you've done that already)

4) Create your Release Pipeline for that particular environment, but we are going to put in 2 Agent phases instead of the default 1. Notice that I am using different types of agent jobs for the pools created above.

enter image description here

  1. For the Release Pipeline tasks for each agent I just happen to be using a task group template because I have any release pipelines. I have one called "Standard Deployment - Not Final" and one called "Standard Deployment" (which is the final). WHY? BizTalk requires application binaries and certain other artifacts to be installed on every BizTalk server that runs the application. However, the BizTalk application, its port bindings, rule policies and more must be registered in the BizTalk databases only once within the group. This is the reason for the checkbox. Notice it is unchecked for the "Not Final" and checked for the one that will be the "Final". The installation will go very quickly on Servers 1 and 2, but take longer on Server 3 because of this.

enter image description here enter image description here

  1. Now you can start your ADO Release Pipeline to test it out. But this process work great and I'm using it in conjunction with GitVersion. enter image description here

I know I left a lot out of this guide, like the actual details of the tasks for stopping the BizTalk app via the PS script, UnDeploying the BizTalk app, unInstaling the MSI, why am I copying the MSI to the installation directory, and then install. You can read more from the official documentation here: http://www.tfabraham.com/BTDFDocs/V5_5/DeploymentFrameworkForBizTalkDocs.html?DeployConfigurationSettingsintoS.html

I hope this helps!

Antebios
  • 1,681
  • 1
  • 13
  • 22
  • Thanks for this great explanation. It gives some ideas to relook my release pipeline. In my case, I'm using deploy biztalk application task not BTDF. just a question please, how long did this deployment process take to setup from your side? – Hichamveo May 10 '19 at 20:47
  • From scratch with no knowledge whatsoever, I would say a 2 weeks to properly understand what was going on. If I were to do it now with my current knowledge from lessons learned: less than a week, maybe 3 days. I saved all my existing work and templates, so it's just a matter of re-importing them, re-creating agent pools, installing agents. I've given you a lot to go on. – Antebios May 10 '19 at 21:36
  • Thanks a lot @Antebios. I mark your response as answer – Hichamveo May 10 '19 at 21:39
  • I went ahead and added a screenshot of my Build Pipeline tasks so you can see what I'm doing and how I'm leveraging my custom task. I also happen to use GitVersion. Notice that after I compile the BizTalk solution I create the BTDF installer which produces an MSI. This MSI is what is actually copied and install for each environment unmodified. There is a master Binding xml file file with Token place holders which are replaced with a parameter file. It generates a Binding file for each environment and then is applied on the last server only. – Antebios May 10 '19 at 21:41
  • I'll share with you the how to achieve the same thing with Microsoft biztalk reply task. We can connect on LinkedIn if you want. My https://www.linkedin.com/in/hicham-boutaleb-63479873/ – Hichamveo May 10 '19 at 21:46