Continuous Integration/Continuous Delivery is a development practice that enables you to accelerate your deployments and delivery time to the customer, by reliably releasing software at any time and without manual intervention.
For this post series, I will explain how to enable this practice, oriented to Logic Apps and Azure Pipelines.
We will start by Building the Logic App, using Visual Studio. I will not approach Logic Apps Preview, because since it’s still a preview feature, many changes can happen and render all this useless.
As you may know, to create Logic Apps in Visual Studio, there are a few requirements, such as:
Visual Studio 2015, 2017, 2019 or greater, if available
Azure SDK
Azure Logic Apps Tools for Visual Studio Extension (if using VS)
An active Azure subscription
Time, will and patience.
After you have all this installed, you can begin to create and let your creativity flow!
We’ll start from scratch. Open you VS and start a new Project, by selecting the Azure Resource Group C# template and the Logic App template after that.
You will end with a new Project, and Solution if it’s the case, with 3 files. The PowerShell file is the deployment script that VS uses to automate the ARM deployment. Only in a special case do you need to fiddle with this file.
The other two files are the Logic App code and the Parameters file. You will need to create a new one, to be used as a Template for the Azure Pipeline. So go ahead and copy the Parameters file and change the name to LogicApp.parameters.template.json .
You should end with something like this.
This Parameters Template file will contain our Tokens, which will be replaced in the Pipeline using the “Replace Tokens” Task. In the coming posts, I will explain how it works and why we’re using it.
For the sake of simplicity, I’ll just use the Service Bus connector, where depending on the input, I’ll send a message to the Queue with the provided information.
After creating the connection, you will see that, in the back code, several parameters and a Resource node were created as well, that contain the link and inputs for this connection.
Even when working in a single Resource Group, it is a good practice to prepare this for CI CD, because even though it’s static, connections change and instead of having to re-do all of it, you just need to re-deploy the pipeline with the new configurations.
We will not be making any changes to the Resource node, but to the action path and parameters. This will define that instead of having a fixed value, it will point to the parameter itselft, making it possible to have an ARM parameter configurable in the Pipeline.
Last week, when preparing for a deployment, I bumped into this error again. As from my previous post, it could be easily fixed with a PowerShell module install.
But this time, the script was already fixed. Nothing had changed, as far as I knew. The last build and publish was in September, no errors there.
So what happened that killed my build?
It couldn’t be the Az module updates, because we were forcing the version. There had been several updates, so could this be it?
I tried to force a newer version, like 2.0.0, but still failed to execute the command. I even restricted the script to use only the command I needed, that was the CallbackUrl.
After a few other failures, my thinking was, “this can’t be the problem, the script was executing without issues, so it has to be something else.”
So I took another look at my pipeline. It was the same as before… Azure Powershell task to remove AzureRM, install Az module and Azure CLI task to execute the scri… wait!
Could this be the problem?
I switched the tasks and re-queued the pipeline.
And success! No more errors.
Azure CLI has received some updates in the past weeks, and the build I had before was 2.0.16 (Core 2.11.0) compared to 2.1.0 (Core 2.18.0) was running in these failed pipeline runs.
I looked into the Azure CLI release notes, but found nothing referring the LogicApp commands or Az.LogicApps.
This time, I can’t find a proper explanation for this error, but I’m suspecting some update broke the ability to run these Az module commands with Azure CLI or the Az.LogicApps commands specifically.
Recently I found that there is an issue with the Service Bus connector sending custom message header to the topics/subscription. The issue is the connector treat the text as string in spite of providing numeric or boolean values.
According to the below link
If the content is true or false (case-sensitive!), then the broker treats it as a System.Boolean with the corresponding value.
If the content can be parsed as an integer, then the broker treats it as a System.Int64.
I have got an update from the Microsoft Logic App product group acknowledging it as a bug fix of Service Bus connector treating all properties key value pairs as strings and they are actively working on it. The fix might be available in next year Jan.
The Microsoft BizTalk Server community is one of the long-standing powerful technical communities in the world I’ve seen in an enterprise segment. For many years community members across the world have done numerous events like user group meetings, community gatherings, innovations days etc. This following LinkedIn statement by Tord Glad Nordahl who works as a Program Manager in BizTalk Server team at Microsoft is a testament to the above statement.
What is Global Integration Boot camp?
The idea of Global Integration Boot camp is pretty simple, uniting all the community members in the Microsoft Integration space across the world and conduct a one-day event on the same day.
Beginning of this year a group of people in the community along with Microsoft decided to go ahead with the plan. Hence the birth of Global Integration Boot camp (GIB).
The date was fixed to March 25th 2017 for the first GIB and a Slack group was set up for the core organizers to communicate. As you can see from the below screen shot from Slack there are 61 members in the group who worked behind the scene to make this event a great success.
Out of that 61 people, there are few outstanding contributors (core organising team) whom I wanted to personally acknowledge and thank for their relentless work behind the scene to make this event a grand success Eldert Grootenboer, Sven Van den brande, Rob Fox, Bill Chesnut, Martin Abbott, Dan Toomey, Glenn Colpaert, Lex Hegt, Steef-Jan Wiggers, Wagner Silveira, and all those people who contributed to GIB.
The format of the event is to have 3 to 4 sessions followed by a lab exercise in each location. The session and labs are focused on the following technology stack (all related to Integration)
BizTalk 2016 : BizTalk Server 2016, what’s new, and using the new Logic Apps adapter Logic Apps : Creating Logic Apps using commonly-used connectors Service Bus : Build reliable and scalable cloud messaging and hybrid integration solutions Enterprise Integration Pack : Using the Enterprise Integration Pack (EIP) with Logic Apps API Management : How does API management help you organize and secure your APIs On-Premise Gateway : Connecting to on-prem resources using the On-Premise Gateway Hybrid Integration : Hybrid integrations using BizTalk Server and Logic Apps Microsoft Flow : Learn to compose flows with Microsoft Flow
Welcome message from Microsoft Product Group
The Microsoft Product Group from Seattle Jim Harrer, Jon Fancey, Tord Glad Nordahl, Kevin Lam, Jeff Hollan, Darek Li has put together this short intro video to GIB
What are the challenges?
Anything you do for the first time is going to raise a great deal of scepticism whether something like this will work? The organisers did a great job of convincing people across different countries, the list started off some 5-6 countries initially and gradually expanded as the event got the moments. For example a couple of locations were added just 2 or 3 weeks before the event date.
The second biggest challenge was securing venues at different places. In majority of the countries the event was conducted at Microsoft venues and in some places the partner organisations provided the space. It’s not just the space, for a whole day event like this there are a lot of logistics need to be addressed like food, drinks, and in some places security staff etc.
The organizers did an excellent job in addressing these challenges and moving forward seamlessly.
Locations, Organisers, Speakers and Sponsors
Following table summarises all the global locations in total 12 countries and 16 locations. Microsoft played an active role across all the locations in helping local sponsors, organisers to make this event a grand success.
Country
Location
Organiser
Speakers
Sponsors
Australia
Brisbane
Dan Toomey
Dan Toomey
Ashley Knowles
Lee Simpson
Mexia
Australia
Melbourne
Bill Chesnut
Bill Chesnut
Nathan Fernandez
Sonja Bijou
Paco de la Cruz
Tanvir Chowdhury
SixPivot
InterprIT
Mexia
Australia
Sydney
Rene Brauwers
Rene Brauwers
Mick Badran
MOQdigital
Belgium
Antwerp
Sven Van den brande
Glenn Colpaert
Toon Vanhoutte
Steven Van Eycken
Glenn Colpaert
Jochen Toelen
BizTalk User Group
Finland
Helsinki
Sakari Nahr
Karl Ots
Karl Ots
Sami Ovaska
Teemu Tapanila
Kompozure
India
Bengaluru
Arunkumar Kumaresan
Sriram Hariharan
Deepak Rajendran
Tulika Chaudharie
Harikharan Krishnaraju
Shailesh Agre
Shree Divya
Sunny Sharma
Lohith G Nagaraj
Sajith C P
Roy Joseph
Rekha Kodali
BizTalk360
United Kingdom
London
Saravana Kumar
Lex Hegt
Nino Crudele
Ashwin Prabhu
Michael Stephenson
Lex Hegt
Saffi Ali
BizTalk360
Codit UK
New Zealand
Auckland
Wagner Silveira
Mark Brimble
Wagner Silveira
Nikolai Blackie
James Corbould
Morten Velling
Abhishek Kumar
Datacom
Adaptiv
Theta
Netherlands
Rotterdam
Microsoft Integration User Group
Tomasso Groenendijk
Rob Fox
Eldert Grootenboer
Steef-Jan Wiggers
Motion10
Norway
Oslo
Dominic Akadimah
Richard Hallgren
Communicate Norge
Portugal
Porto
Sandro Pereira
Sandro Pereira
Ricardo Torre
José António Silva
Pedro Sousa
João Ferreira
Devscope
Spain
Madrid
Kabel Sistemas
Mariano Robles
Carlos Sacristan
Felix Mondelo
Felipe Senso
Ivan Canizares
Francisco Nieto
Kabel Sistemas
Sweden
Stockholm
Johan Hedberg
Johan Hedberg
Mattias Lögdberg
Mikael Sand
Samuel Kastberg
Alan Smith
Mikael Håkansson
BizTalk User Group Sweden
United States
Chicago
Jaidev Kunjur
Jaidev Kunjur
Enkay Tech
United States
New York
Howard Edidin
Mandi Ohlinger
Howard Edidin
Stephen Thomas
Kent Weare
VNB Consulting
United States
Seattle
Thomas E. Canter
Richard Seroter
Kevin Lam
Nick Hauenstein
Jeff Hollan
Phidiax
QuickLearn
Interesting Pictures from the event
These pictures shows the depth of the event across various locations 12 countries, 16 locations, 55 speakers and 650+ attendees.
Missed out on GIB? then don’t miss INTEGRATE 2017
If you have missed out all the fun of GIB 2017, then don’t miss out attending INTEGRATE 2017. It’s bigger in scale, all the Microsoft Product Group team and majority of the speakers who participated at GIB 2017 will be present in a single location in London. The registrations are now open for INTEGRATE 2017 and filling super fast.
I have a scenario at work where we need to provide some simple syncronization between a SQL Azure table and a SharePoint Online Custom List. As a pre-requisite each morning before business users get into the office, we need to purge the contents from the SharePoint list and update it with today’s data + a 6 day forecast of future data.
I have integrated BizTalk with custom SharePoint Lists in the past, and even wrote about it in one of my books. It wasn’t a particularly good experience so I was interested in evaluating how Logic Apps would deal with custom lists.
One difference between BizTalk and Logic Apps, in this case, is that BIzTalk has a SharePoint Adapter but it will only interface with SharePoint Document Libraries. If you wanted to integrate BizTalk with SharePoint Custom lists you are likely going to do so with the Lists.asmx web service. While it is completely possible to use this custom web service approach, be prepared to spend a few hours (if you are lucky) getting everything working.
With Logic Apps, it is a very different experience. From the Logic Apps canvas you need to add a trigger to kick off your workflow. In my case, I used a Recurrence trigger that will run every day at 7:45 am. I can also kick this trigger off manually in the Azure Portal if I wish.
Next, I want to add an action and then search for SharePoint from the Microsoft managed APIs dropdown. After we do that, all available SharePoint Online operations will be displayed.
In my case, I want to purge all items, but there is no Delete List operation. Instead, I need to get all items in my list first, so that I can use the ID from each record to delete that item. In my scenario I expect 7 days * 24 hourly records (168 items) to be in my list at any given time so this load is not a concern.
With this situation in-mind, I will select the Get Items operation.
Once I have selected my Get Items operation, I need to establish my connection to my Office 365 subscription. (I will spare you from the password prompts)
With my connection established, I now need to provide the URL to my SharePoint List. I can also specify optional parameters that control the number of items returned.
I must say the experience in this dialog is a good one. I can click on the Site URL dropdown and all of the sites that I have access to will be in that list. Once I have selected my URL and then click on the List Name dropdown, I then see all the lists that I have access to on that site.
Next, I need to add another activity and this time I will select the Delete Item operation.
I have a similar experience in the Delete Item dialog that I had in the Get Items dialog. With my connection already established, I need to provide the same Site URL and the same List Name. What is different this time is I need to provide an ID for the list item that I would like to delete. In this case it will be an ID that is coming from my Get Items response.
You might be asking yourself – will how is that going to work for all of my items in my list? Don’t you need a for loop to iterate through the Get Items collection? The answer is Yes, but the Logic Apps team has made this very simple – they have done the heavy lifting for you. If you go into Code View you can see it there:
The end result is a Logic App that looks like this:
I can now my Logic App from the Azure Portal by clicking on Select Trigger and then recurrence.
I can follow my execution and dive into my Get Items and Delete Items calls. By inspecting my inbound and outbound traces I can see the exact payloads and HTTP Status codes from the underlying operations. In this case I was able to delete 300 items in 23 seconds. For each item in my collection, a Delete Item call is made.
Conclusion
It honestly took me about 10 minutes to figure this out. Part of the reason why I am writing about this is I know how long this would take with BizTalk. I anticipate it would take at least 3 hours to do this in BizTalk if it was your first time. So this isn’t a knock against BizTalk, as Logic Apps has been built, IMO, for these lightweight scenarios with little friction.
In the short term I think Microsoft Integration architects and developers will have many opportunities like this one where you can choose one tool or the other. For me, developer productivity needs to be part of that equation. Where the systems that you are integrating are hosted will also play a role. In this case, I am connecting to SharePoint Online and SQL Azure so it also doesn’t make sense, IMO, to route all of this info back on-premises only to go back up to the cloud.
We may also see a Hybrid approach where a BizTalk process can call out to a Logic App where you can take advantage of these new Logic App connectors. This was something that Microsoft discussed at 2016 Integrate Event in London.
In a future blog post we will talk about the other half of this solution which is how to create items in SharePoint Online from SQL Azure.
BizTalk360 has recently released more details on their annual conference in London. This year there is a name change. Instead of the BizTalk Summit, the name gets altered to align with the “Integrate” brand. In case you were not aware, BizTalk360 organized the last Integrate Summit in Redmond back in December 2014 so it makes sense to carry that name forward. BizTalk360 has been working closely with the Microsoft product groups to put on a great event.
This year the summit looks to be better and bigger than ever. There are more than 20 speakers lined up over 3 days . The speakers have a variety of backgrounds including Microsoft Product Group, Consultants, Customers, System Integrators and MVPs. There is also an opportunity to hear from the Microsoft’s leadership team and get insight into their plans as it pertains to Azure App Service and Integration.
The session abstracts look great! The topics cover a broad set of technologies that will appeal to integration focused professionals. The topics include:
BizTalk Server 2016
Azure Logic Apps
Azure App Service
Azure Service Bus (Event Hubs and Messaging)
Internet of Things (IoT)
Azure API Management
Azure Stream Analytics
Power Bi
My topic will focus on some the recent learnings from an Industrial IoT project. I will talk about tag data ingestion, complex event processing (calculations, reference data, out of bounds, absence of event) and visualization. I will also throw in a little BizTalk and Logic apps for good measure.
This will be my third time speaking in London at a BizTalk360 event. I am once again looking forward to the experience as BizTalk360 always puts on a good show and it is a great opportunity to network with the excellent European Integration community.
For more details, please check out the event page. There are early bird specials so pay close attention to the dates.