SlideShare a Scribd company logo
1 of 26
Creating own
Extensions for Azure
DevOps
Christian Waha / Technical Fellow
Zürich, Februar 2021
ti&m DevOps
ti8m.com
ti&m AG
Zürich
Buckhauserstrasse 24
CH-8048 Zürich
+41 44 497 75 00
ti&m AG
Bern
Monbijoustrasse 68
CH-3007 Bern
+41 44 497 75 00
ti&m GmbH
Frankfurt am Main
Schaumainkai 91
D-60596 Frankfurt am Main
+49 69 247 5584 20
ti&m Pte. Ltd.
18 Robinson Road #15-16
Singapore 048547
Singapore
+65 6955 7755
About me
Christian Waha – Technical Fellow
Technical Fellow @ti&m AG
Microsoft Most Valuable Professional
Microsoft Regional Director
LEGO Serious Play Certified Facilitator
Linkedin Learning Trainer
Azure Meetup Munich Organizer
20.02.2021
3
Du möchtest…
… Teil der nächsten IT-Revolution sein?
… Dich mit modernster Technologie beschäftigen?
… mit uns etwas Neues aufbauen?
… in einer Firma mit starken Werten und Kultur arbeiten?
Dann suchen wir genau Dich!
Bewirb Dich auf eine unserer offenen Cloud Stellen:
 Cloud Architekt (Azure, Google Cloud Platform, AWS)
 Cloud Ingenieur (Azure, Google Cloud Platform, AWS)
 Microsoft Azure Solution Engineer
Sende Deine Bewerbungsunterlagen direkt an
christian.waha@ti8m.ch.
Wir freuen uns auf Dich!
Mehr Infos auf www.ti8m.ch
Wir suchen Dich als
Cloud Experten!
Tasks Overview
Creating Custom Build Tasks
File Structure
Azure DevOps Marketplace
20.02.2021
4
Agenda
Overview
20.02.2021
5
Extensions are add-ons you can use to customize and extend your DevOps experience with Azure DevOps. They're written with standard technologies
- HTML, JavaScript, CSS - and are developed using your preferred development tools. Extensions use our RESTful API Library to easily interact with
Azure DevOps and applications/services. The Visual Studio Marketplace is where extensions are published. They can be kept privately for you and
your team or shared with the millions of developers currently using Azure DevOps.
What can you do with extensions?
There are dozens of places where you can add to the user interface, and we're adding more every sprint. Learn about all of the places where you can
add a hub in the contributions reference.
 Provide new Azure Pipelines tasks that teams can use in their builds.
 Use dashboard widgets to get custom views within Azure DevOps.
 Extend the work item form with new tabs, sections, and actions.
 Create your own hub to embed new capabilities within our Agile, code, build, and test experiences.
 Develop actions that can be run on hubs, whether they're ours or ones you've created.
Create DevOps Extensions
Tasks Overview
Creating Custom Build Tasks
File Structure
Azure DevOps Marketplace
20.02.2021
6
Agenda
Create a custom Build Task
20.02.2021
7
Create task scaffolding
The first step is to create the folder structure for the task and install the required libraries and dependencies.
Create a directory and package.json file
First from within your BuildAndReleaseTask folder run:
npm init
Npm init creates the package.json file. You can accept all of the default npm init options.
Add azure-pipelines-task-lib
Microsoft provides a library, azure-pipelines-task-lib, that should be used to create tasks. Add it to your library:
npm install azure-pipelines-task-lib --save
Create DevOps Extensions
Create a custom Task
20.02.2021
8
Add typings for external dependencies
Ensure that TypeScript typings are installed for external dependencies
npm install @types/node --save-dev npm install @types/q --save-dev
Create a .gitignore file and add node_modules to it. Your build process should do an
npm install and typings install so node_modules are built each time and don‘t need to be checkedin.
echo node_modules> .gitignore
Create tsconfig.json compiler options
This file makes sure that our TypeScript files get compiled to JavaScript files.
tsc --init
In addition, for this example we want to compile to the ES6 standard instead of ES5. To ensure this happens, open the newly generated tsconfig.json and update the target
fieldto "es6".
Create DevOps Extensions
Tasks Overview
Creating Custom Build Tasks
File Structure
Azure DevOps Marketplace
20.02.2021
9
Agenda
Azure DevOps Extension File Structure
20.02.2021
10
Solution Folder (example.sln)
 TaskFolder GetStorageAccountAccessKeyTask
 task.json
 ImagesFolder images
 Image.png
 tsconfig.json
 vss extension.json
Create DevOps Extensions
Azure DevOps Extension File tsconfig.json
20.02.2021
11
Typescript Description File:
Important Parts:
“compilerOptions ":
/* Basic Options */
"target": "es6", /* Specify ECMAScript target version : 'ES3' default ), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'.
"module": "commonjs",
/* Strict Type Checking Options */
"strict": true ,
"esModuleInterop": true
Create DevOps Extensions
Azure DevOps Extension File vss-extension.json
20.02.2021
12
Extension Description File:
Important Parts:
"id": azure devops simpletasks
"name": "Simple Tasks for Azure DevOps",
"version ": "1.0.<BUILDNUMBER>
“publisher ": cwlabsconsultingservices"
“targets ": [{ id ": Microsoft.VisualStudio.Services „ }]
“description": “lorem Ipsum",
"categories ": [“Azure Pipelines„],
"icons ": { default ": images /AzureDevOpsSimpleTools.png“ },
"files ": [{ “path ": GetSingleValueFromArmOutputTask “}]
contributions ": …..
Create DevOps Extensions
Azure DevOps Extension Task File task.json
20.02.2021
13
Task Description File:
"id": „GUID",
"name": "azure-devops-tools-getstorageaccountaccesskey",
"friendlyName": "Get first accesskeyof a defined storage account",
"description": "",
"helpMarkDown": "",
"author": "cwlabsconsultingservices",
"category": "Deploy",
Create DevOps Extensions
Multiple Versions of one Task needs another folder structure
20.02.2021
14
Create DevOps Extensions
Tasks Overview
Creating Custom Build Tasks
File Structure
Azure DevOps Marketplace
20.02.2021
15
Agenda
Azure DevOps Marketplace
20.02.2021
16
Create DevOps Extensions
 Publish your Extension
 Creating Publisher
https://marketplace.visualstudio.com/manage/createpublisher
 Publishing to Marketplace
 Usage in your own Pipeline
 Automation of creation and publishing
 Examples
Package your extension
20.02.2021
17
Create DevOps Extensions
Open your extension manifest file (vss-extension.json) and set the value of the publisher field to the ID of your publisher.
VSS Web Extensions SDK requires TFX. If you haven't already installed it, open a command prompt and run the following command.
npm install -g tfx-cli
From a command prompt, run the TFX tool's packaging command from your extension directory.
npx tfx-cli extension create
When it's completed, you see a message indicating your extension has been successfully packaged:
=== Completed operation: create extension ===
- VSIX: C:my-first-extensionAnnetteNielsen.my-first-extension-1.0.0.vsix
- Extension ID: my-first-extension
- Extension Version: 1.0.0
- Publisher: AnnetteNielsen
Upload your extension
20.02.2021
18
Create DevOps Extensions
From the management portal, select your publisher from the drop-down at the top of the page.
Select New extension, and then select Azure DevOps.
Drag and drop your file or select it to find your VSIX file, which you created in the previous packaging step, and then choose Upload.
Upload your extension
20.02.2021
19
Create DevOps Extensions
After a few seconds, your extension appears in the list of published extensions. Don't worry, the extension is only visible to you.
Install your extension
20.02.2021
20
Create DevOps Extensions
To test an extension, it must be installed to an organization in Azure DevOps. Installing requires being the owner of the organization (or having
the necessary permissions). Because your extension is private, it must first be shared with the organization you want to install it to.
From the management portal, select your extension from the list, right-click, and choose Share/Unshare or Publish/Unpublish, depending on the
extension; Share = Publish and Unshare = Unpublish.
Select Organization, and then enter the name of your organization. Select Enter.
Install your extension
20.02.2021
21
Create DevOps Extensions
Close the panel.
Your extension can now be installed into this organization.
In the Marketplace, select your extension to open its overview page.
Select Get it free to start the installation process. Select the organization you shared the extension with from the dropdown menu.
Select Install. Congratulations! Your extension is now installed into an organization and is ready to be tested.
Try your extension
20.02.2021
22
Create DevOps Extensions
Your extension contributed a view named "My Hub" to the project-level Code area. Let's navigate to it.
Select Proceed to organization at the end of the installation wizard to navigate to the home page of the organization the extension was installed to
(https://dev.azure.com/{organization}).
Select Organization settings, and then select Extensions to see your newly installed extension.
Debugging your extension
20.02.2021
23
Create DevOps Extensions
To debug the extension using Visual Studio or Browser Developer Tools and speed up the development without redeploying extension each time
you change source code, you need change manifest adding baseUri property:
{
...
"baseUri": "https://localhost:44300",
...
}
Changing the manifest loads the extension from your local web server instance. For example, IISExpress in Visual Studio. After you change the
manifest, deploy and install this debugging extension only once.
Note
Run your local web server in SSL mode, because Azure DevOps demands that the web page is served from a secure source otherwise you
obtain an error in browser console during the extension IFRAME loading.
Q&A
20.02.2021
25
Du möchtest…
… Teil der nächsten IT-Revolution sein?
… Dich mit modernster Technologie beschäftigen?
… mit uns etwas Neues aufbauen?
… in einer Firma mit starken Werten und Kultur arbeiten?
Dann suchen wir genau Dich!
Bewirb Dich auf eine unserer offenen Cloud Stellen:
 Cloud Architekt (Azure, Google Cloud Platform, AWS)
 Cloud Ingenieur (Azure, Google Cloud Platform, AWS)
 Microsoft Azure Solution Engineer
Sende Deine Bewerbungsunterlagen direkt an
christian.waha@ti8m.ch.
Wir freuen uns auf Dich!
Mehr Infos auf www.ti8m.ch
Wir suchen Dich als
Cloud Experten!
Referenzen
20.02.2021
26
Create DevOps Extensions
Dokument Link
Microsoft Publisher Agreement RE4xqkx (microsoft.com)
Microsoft Payout schedules and
processes
Payout schedules and processes - Partner Center | Microsoft Docs
Microsoft Payout FAQ Payouts and tax profile FAQ - Partner Center | Microsoft Docs
Azure DevOps Tasks Referenz (Site 11) azure-pipelines-task-lib/tasks.schema.json at master · microsoft/azure-pipelines-task-lib · GitHub
Azure DevOps Tasks Examples https://github.com/microsoft/azure-pipelines-tasks/tree/master/Tasks
Azure Marketplace Create Publisher Create Publisher | Visual Studio Marketplace
Azure DevOps Extensions Developing extensions for Azure DevOps - Azure DevOps | Microsoft Docs
Extensions Samples Samples overview - Azure DevOps | Microsoft Docs

More Related Content

What's hot

Introduction to Azure DevOps
Introduction to Azure DevOpsIntroduction to Azure DevOps
Introduction to Azure DevOpsLorenzo Barbieri
 
PowerShell and Azure DevOps
PowerShell and Azure DevOpsPowerShell and Azure DevOps
PowerShell and Azure DevOpsMatteo Emili
 
Azure Pipeline Tutorial | Azure DevOps Tutorial | Edureka
Azure Pipeline Tutorial | Azure DevOps Tutorial | EdurekaAzure Pipeline Tutorial | Azure DevOps Tutorial | Edureka
Azure Pipeline Tutorial | Azure DevOps Tutorial | EdurekaEdureka!
 
Azure DevOps: the future of integration and traceability
Azure DevOps: the future of integration and traceabilityAzure DevOps: the future of integration and traceability
Azure DevOps: the future of integration and traceabilityLorenzo Barbieri
 
The Power of Azure DevOps
The Power of Azure DevOpsThe Power of Azure DevOps
The Power of Azure DevOpsJeff Bramwell
 
[JAZUG Tohoku Azure DevOps] Azure DevOps
[JAZUG Tohoku Azure DevOps] Azure DevOps[JAZUG Tohoku Azure DevOps] Azure DevOps
[JAZUG Tohoku Azure DevOps] Azure DevOpsNaoki (Neo) SATO
 
Azure DevOps - Version Controlling with Git
Azure DevOps - Version Controlling with GitAzure DevOps - Version Controlling with Git
Azure DevOps - Version Controlling with GitEng Teong Cheah
 
Azure DevOps for .NET - Fall into the Pit of Success, .NET Conf 2019
Azure DevOps for .NET - Fall into the Pit of Success, .NET Conf 2019Azure DevOps for .NET - Fall into the Pit of Success, .NET Conf 2019
Azure DevOps for .NET - Fall into the Pit of Success, .NET Conf 2019Jeffrey Palermo
 
Infrastructure automation with .NET
Infrastructure automation with .NETInfrastructure automation with .NET
Infrastructure automation with .NETSwaminathan Vetri
 
Getting Started with Azure DevOps
Getting Started with Azure DevOpsGetting Started with Azure DevOps
Getting Started with Azure DevOpsJessica Deen
 
Azure, DevOps and the Commodore 64
Azure, DevOps and the Commodore 64Azure, DevOps and the Commodore 64
Azure, DevOps and the Commodore 64Todd Whitehead
 
Automated Release Pipelines with Azure DevOps
Automated Release Pipelines with Azure DevOpsAutomated Release Pipelines with Azure DevOps
Automated Release Pipelines with Azure DevOpsProjectCon
 
The Power of Azure DevOps
The Power of Azure DevOpsThe Power of Azure DevOps
The Power of Azure DevOpsJeff Bramwell
 
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | EdurekaAzure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | EdurekaEdureka!
 
Azure DevOps Best Practices Webinar
Azure DevOps Best Practices WebinarAzure DevOps Best Practices Webinar
Azure DevOps Best Practices WebinarCambay Digital
 
Microsoft Tech Series 2019 - Azure DevOps
Microsoft Tech Series 2019 - Azure DevOpsMicrosoft Tech Series 2019 - Azure DevOps
Microsoft Tech Series 2019 - Azure DevOpsTomasz Wisniewski
 

What's hot (20)

Introduction to Azure DevOps
Introduction to Azure DevOpsIntroduction to Azure DevOps
Introduction to Azure DevOps
 
PowerShell and Azure DevOps
PowerShell and Azure DevOpsPowerShell and Azure DevOps
PowerShell and Azure DevOps
 
Azure Pipeline Tutorial | Azure DevOps Tutorial | Edureka
Azure Pipeline Tutorial | Azure DevOps Tutorial | EdurekaAzure Pipeline Tutorial | Azure DevOps Tutorial | Edureka
Azure Pipeline Tutorial | Azure DevOps Tutorial | Edureka
 
Azure dev ops
Azure dev opsAzure dev ops
Azure dev ops
 
Azure DevOps: the future of integration and traceability
Azure DevOps: the future of integration and traceabilityAzure DevOps: the future of integration and traceability
Azure DevOps: the future of integration and traceability
 
Azure DevOps in Action
Azure DevOps in ActionAzure DevOps in Action
Azure DevOps in Action
 
The Power of Azure DevOps
The Power of Azure DevOpsThe Power of Azure DevOps
The Power of Azure DevOps
 
[JAZUG Tohoku Azure DevOps] Azure DevOps
[JAZUG Tohoku Azure DevOps] Azure DevOps[JAZUG Tohoku Azure DevOps] Azure DevOps
[JAZUG Tohoku Azure DevOps] Azure DevOps
 
Azure DevOps - Version Controlling with Git
Azure DevOps - Version Controlling with GitAzure DevOps - Version Controlling with Git
Azure DevOps - Version Controlling with Git
 
Azure DevOps for .NET - Fall into the Pit of Success, .NET Conf 2019
Azure DevOps for .NET - Fall into the Pit of Success, .NET Conf 2019Azure DevOps for .NET - Fall into the Pit of Success, .NET Conf 2019
Azure DevOps for .NET - Fall into the Pit of Success, .NET Conf 2019
 
Infrastructure automation with .NET
Infrastructure automation with .NETInfrastructure automation with .NET
Infrastructure automation with .NET
 
Getting Started with Azure DevOps
Getting Started with Azure DevOpsGetting Started with Azure DevOps
Getting Started with Azure DevOps
 
Azure, DevOps and the Commodore 64
Azure, DevOps and the Commodore 64Azure, DevOps and the Commodore 64
Azure, DevOps and the Commodore 64
 
Automated Release Pipelines with Azure DevOps
Automated Release Pipelines with Azure DevOpsAutomated Release Pipelines with Azure DevOps
Automated Release Pipelines with Azure DevOps
 
The Power of Azure DevOps
The Power of Azure DevOpsThe Power of Azure DevOps
The Power of Azure DevOps
 
Azure cli-azure devops
Azure cli-azure devopsAzure cli-azure devops
Azure cli-azure devops
 
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | EdurekaAzure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
 
Azure DevOps Best Practices Webinar
Azure DevOps Best Practices WebinarAzure DevOps Best Practices Webinar
Azure DevOps Best Practices Webinar
 
Azure DevOps - Azure Guatemala Meetup
Azure DevOps - Azure Guatemala MeetupAzure DevOps - Azure Guatemala Meetup
Azure DevOps - Azure Guatemala Meetup
 
Microsoft Tech Series 2019 - Azure DevOps
Microsoft Tech Series 2019 - Azure DevOpsMicrosoft Tech Series 2019 - Azure DevOps
Microsoft Tech Series 2019 - Azure DevOps
 

Similar to Create and publish custom extensions for Azure DevOps

PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agentsPVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agentsAndrey Karpov
 
3 Ways to Get Started with a React App in 2024.pdf
3 Ways to Get Started with a React App in 2024.pdf3 Ways to Get Started with a React App in 2024.pdf
3 Ways to Get Started with a React App in 2024.pdfBOSC Tech Labs
 
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization modelEuropean Collaboration Summit
 
M365 global developer bootcamp 2019
M365 global developer bootcamp 2019M365 global developer bootcamp 2019
M365 global developer bootcamp 2019Thomas Daly
 
M365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx VersionM365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx VersionThomas Daly
 
M365 global developer bootcamp 2019 PA
M365 global developer bootcamp 2019  PAM365 global developer bootcamp 2019  PA
M365 global developer bootcamp 2019 PAThomas Daly
 
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOpsPVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOpsAndrey Karpov
 
Upgrading SLFE from 2007 to 2010
Upgrading SLFE from 2007 to 2010Upgrading SLFE from 2007 to 2010
Upgrading SLFE from 2007 to 2010KWizCom Team
 
Eclipse IDE, 2019.09, Java Development
Eclipse IDE, 2019.09, Java Development Eclipse IDE, 2019.09, Java Development
Eclipse IDE, 2019.09, Java Development Pei-Hsuan Hsieh
 
Usage Note of SWIG for PHP
Usage Note of SWIG for PHPUsage Note of SWIG for PHP
Usage Note of SWIG for PHPWilliam Lee
 
Compile open cpn on windows
Compile open cpn on windowsCompile open cpn on windows
Compile open cpn on windowsrandikaucsc
 
PVS-Studio in the Clouds: Travis CI
PVS-Studio in the Clouds: Travis CIPVS-Studio in the Clouds: Travis CI
PVS-Studio in the Clouds: Travis CIAndrey Karpov
 
Building A Simple Web Service With CXF
Building A Simple Web Service With CXFBuilding A Simple Web Service With CXF
Building A Simple Web Service With CXFCarl Lu
 
Trusting the Unknown
Trusting the UnknownTrusting the Unknown
Trusting the UnknownJesse Houwing
 
Trusting the Unknown
Trusting the UnknownTrusting the Unknown
Trusting the Unknownssuser37f369
 
Drupal Continuous Integration with Jenkins - Deploy
Drupal Continuous Integration with Jenkins - DeployDrupal Continuous Integration with Jenkins - Deploy
Drupal Continuous Integration with Jenkins - DeployJohn Smith
 
Kinect installation guide
Kinect installation guideKinect installation guide
Kinect installation guidegilmsdn
 
DevNet Associate : Python introduction
DevNet Associate : Python introductionDevNet Associate : Python introduction
DevNet Associate : Python introductionJoel W. King
 
Streamlining React Component Development and Sharing with bit.pptx
Streamlining React Component Development and Sharing with bit.pptxStreamlining React Component Development and Sharing with bit.pptx
Streamlining React Component Development and Sharing with bit.pptxShubhamJayswal6
 

Similar to Create and publish custom extensions for Azure DevOps (20)

PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agentsPVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
PVS-Studio: analyzing pull requests in Azure DevOps using self-hosted agents
 
3 Ways to Get Started with a React App in 2024.pdf
3 Ways to Get Started with a React App in 2024.pdf3 Ways to Get Started with a React App in 2024.pdf
3 Ways to Get Started with a React App in 2024.pdf
 
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
 
M365 global developer bootcamp 2019
M365 global developer bootcamp 2019M365 global developer bootcamp 2019
M365 global developer bootcamp 2019
 
M365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx VersionM365 global developer bootcamp 2019 Intro to SPFx Version
M365 global developer bootcamp 2019 Intro to SPFx Version
 
M365 global developer bootcamp 2019 PA
M365 global developer bootcamp 2019  PAM365 global developer bootcamp 2019  PA
M365 global developer bootcamp 2019 PA
 
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOpsPVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
 
Upgrading SLFE from 2007 to 2010
Upgrading SLFE from 2007 to 2010Upgrading SLFE from 2007 to 2010
Upgrading SLFE from 2007 to 2010
 
Eclipse IDE, 2019.09, Java Development
Eclipse IDE, 2019.09, Java Development Eclipse IDE, 2019.09, Java Development
Eclipse IDE, 2019.09, Java Development
 
Usage Note of SWIG for PHP
Usage Note of SWIG for PHPUsage Note of SWIG for PHP
Usage Note of SWIG for PHP
 
Compile open cpn on windows
Compile open cpn on windowsCompile open cpn on windows
Compile open cpn on windows
 
PVS-Studio in the Clouds: Travis CI
PVS-Studio in the Clouds: Travis CIPVS-Studio in the Clouds: Travis CI
PVS-Studio in the Clouds: Travis CI
 
CodeShip
CodeShipCodeShip
CodeShip
 
Building A Simple Web Service With CXF
Building A Simple Web Service With CXFBuilding A Simple Web Service With CXF
Building A Simple Web Service With CXF
 
Trusting the Unknown
Trusting the UnknownTrusting the Unknown
Trusting the Unknown
 
Trusting the Unknown
Trusting the UnknownTrusting the Unknown
Trusting the Unknown
 
Drupal Continuous Integration with Jenkins - Deploy
Drupal Continuous Integration with Jenkins - DeployDrupal Continuous Integration with Jenkins - Deploy
Drupal Continuous Integration with Jenkins - Deploy
 
Kinect installation guide
Kinect installation guideKinect installation guide
Kinect installation guide
 
DevNet Associate : Python introduction
DevNet Associate : Python introductionDevNet Associate : Python introduction
DevNet Associate : Python introduction
 
Streamlining React Component Development and Sharing with bit.pptx
Streamlining React Component Development and Sharing with bit.pptxStreamlining React Component Development and Sharing with bit.pptx
Streamlining React Component Development and Sharing with bit.pptx
 

Recently uploaded

Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Lecture # 8 software design and architecture (SDA).ppt
Lecture # 8 software design and architecture (SDA).pptLecture # 8 software design and architecture (SDA).ppt
Lecture # 8 software design and architecture (SDA).pptesrabilgic2
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencessuser9e7c64
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 

Recently uploaded (20)

Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Lecture # 8 software design and architecture (SDA).ppt
Lecture # 8 software design and architecture (SDA).pptLecture # 8 software design and architecture (SDA).ppt
Lecture # 8 software design and architecture (SDA).ppt
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 

Create and publish custom extensions for Azure DevOps

  • 1. Creating own Extensions for Azure DevOps Christian Waha / Technical Fellow Zürich, Februar 2021 ti&m DevOps
  • 2. ti8m.com ti&m AG Zürich Buckhauserstrasse 24 CH-8048 Zürich +41 44 497 75 00 ti&m AG Bern Monbijoustrasse 68 CH-3007 Bern +41 44 497 75 00 ti&m GmbH Frankfurt am Main Schaumainkai 91 D-60596 Frankfurt am Main +49 69 247 5584 20 ti&m Pte. Ltd. 18 Robinson Road #15-16 Singapore 048547 Singapore +65 6955 7755 About me Christian Waha – Technical Fellow Technical Fellow @ti&m AG Microsoft Most Valuable Professional Microsoft Regional Director LEGO Serious Play Certified Facilitator Linkedin Learning Trainer Azure Meetup Munich Organizer
  • 3. 20.02.2021 3 Du möchtest… … Teil der nächsten IT-Revolution sein? … Dich mit modernster Technologie beschäftigen? … mit uns etwas Neues aufbauen? … in einer Firma mit starken Werten und Kultur arbeiten? Dann suchen wir genau Dich! Bewirb Dich auf eine unserer offenen Cloud Stellen:  Cloud Architekt (Azure, Google Cloud Platform, AWS)  Cloud Ingenieur (Azure, Google Cloud Platform, AWS)  Microsoft Azure Solution Engineer Sende Deine Bewerbungsunterlagen direkt an christian.waha@ti8m.ch. Wir freuen uns auf Dich! Mehr Infos auf www.ti8m.ch Wir suchen Dich als Cloud Experten!
  • 4. Tasks Overview Creating Custom Build Tasks File Structure Azure DevOps Marketplace 20.02.2021 4 Agenda
  • 5. Overview 20.02.2021 5 Extensions are add-ons you can use to customize and extend your DevOps experience with Azure DevOps. They're written with standard technologies - HTML, JavaScript, CSS - and are developed using your preferred development tools. Extensions use our RESTful API Library to easily interact with Azure DevOps and applications/services. The Visual Studio Marketplace is where extensions are published. They can be kept privately for you and your team or shared with the millions of developers currently using Azure DevOps. What can you do with extensions? There are dozens of places where you can add to the user interface, and we're adding more every sprint. Learn about all of the places where you can add a hub in the contributions reference.  Provide new Azure Pipelines tasks that teams can use in their builds.  Use dashboard widgets to get custom views within Azure DevOps.  Extend the work item form with new tabs, sections, and actions.  Create your own hub to embed new capabilities within our Agile, code, build, and test experiences.  Develop actions that can be run on hubs, whether they're ours or ones you've created. Create DevOps Extensions
  • 6. Tasks Overview Creating Custom Build Tasks File Structure Azure DevOps Marketplace 20.02.2021 6 Agenda
  • 7. Create a custom Build Task 20.02.2021 7 Create task scaffolding The first step is to create the folder structure for the task and install the required libraries and dependencies. Create a directory and package.json file First from within your BuildAndReleaseTask folder run: npm init Npm init creates the package.json file. You can accept all of the default npm init options. Add azure-pipelines-task-lib Microsoft provides a library, azure-pipelines-task-lib, that should be used to create tasks. Add it to your library: npm install azure-pipelines-task-lib --save Create DevOps Extensions
  • 8. Create a custom Task 20.02.2021 8 Add typings for external dependencies Ensure that TypeScript typings are installed for external dependencies npm install @types/node --save-dev npm install @types/q --save-dev Create a .gitignore file and add node_modules to it. Your build process should do an npm install and typings install so node_modules are built each time and don‘t need to be checkedin. echo node_modules> .gitignore Create tsconfig.json compiler options This file makes sure that our TypeScript files get compiled to JavaScript files. tsc --init In addition, for this example we want to compile to the ES6 standard instead of ES5. To ensure this happens, open the newly generated tsconfig.json and update the target fieldto "es6". Create DevOps Extensions
  • 9. Tasks Overview Creating Custom Build Tasks File Structure Azure DevOps Marketplace 20.02.2021 9 Agenda
  • 10. Azure DevOps Extension File Structure 20.02.2021 10 Solution Folder (example.sln)  TaskFolder GetStorageAccountAccessKeyTask  task.json  ImagesFolder images  Image.png  tsconfig.json  vss extension.json Create DevOps Extensions
  • 11. Azure DevOps Extension File tsconfig.json 20.02.2021 11 Typescript Description File: Important Parts: “compilerOptions ": /* Basic Options */ "target": "es6", /* Specify ECMAScript target version : 'ES3' default ), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. "module": "commonjs", /* Strict Type Checking Options */ "strict": true , "esModuleInterop": true Create DevOps Extensions
  • 12. Azure DevOps Extension File vss-extension.json 20.02.2021 12 Extension Description File: Important Parts: "id": azure devops simpletasks "name": "Simple Tasks for Azure DevOps", "version ": "1.0.<BUILDNUMBER> “publisher ": cwlabsconsultingservices" “targets ": [{ id ": Microsoft.VisualStudio.Services „ }] “description": “lorem Ipsum", "categories ": [“Azure Pipelines„], "icons ": { default ": images /AzureDevOpsSimpleTools.png“ }, "files ": [{ “path ": GetSingleValueFromArmOutputTask “}] contributions ": ….. Create DevOps Extensions
  • 13. Azure DevOps Extension Task File task.json 20.02.2021 13 Task Description File: "id": „GUID", "name": "azure-devops-tools-getstorageaccountaccesskey", "friendlyName": "Get first accesskeyof a defined storage account", "description": "", "helpMarkDown": "", "author": "cwlabsconsultingservices", "category": "Deploy", Create DevOps Extensions
  • 14. Multiple Versions of one Task needs another folder structure 20.02.2021 14 Create DevOps Extensions
  • 15. Tasks Overview Creating Custom Build Tasks File Structure Azure DevOps Marketplace 20.02.2021 15 Agenda
  • 16. Azure DevOps Marketplace 20.02.2021 16 Create DevOps Extensions  Publish your Extension  Creating Publisher https://marketplace.visualstudio.com/manage/createpublisher  Publishing to Marketplace  Usage in your own Pipeline  Automation of creation and publishing  Examples
  • 17. Package your extension 20.02.2021 17 Create DevOps Extensions Open your extension manifest file (vss-extension.json) and set the value of the publisher field to the ID of your publisher. VSS Web Extensions SDK requires TFX. If you haven't already installed it, open a command prompt and run the following command. npm install -g tfx-cli From a command prompt, run the TFX tool's packaging command from your extension directory. npx tfx-cli extension create When it's completed, you see a message indicating your extension has been successfully packaged: === Completed operation: create extension === - VSIX: C:my-first-extensionAnnetteNielsen.my-first-extension-1.0.0.vsix - Extension ID: my-first-extension - Extension Version: 1.0.0 - Publisher: AnnetteNielsen
  • 18. Upload your extension 20.02.2021 18 Create DevOps Extensions From the management portal, select your publisher from the drop-down at the top of the page. Select New extension, and then select Azure DevOps. Drag and drop your file or select it to find your VSIX file, which you created in the previous packaging step, and then choose Upload.
  • 19. Upload your extension 20.02.2021 19 Create DevOps Extensions After a few seconds, your extension appears in the list of published extensions. Don't worry, the extension is only visible to you.
  • 20. Install your extension 20.02.2021 20 Create DevOps Extensions To test an extension, it must be installed to an organization in Azure DevOps. Installing requires being the owner of the organization (or having the necessary permissions). Because your extension is private, it must first be shared with the organization you want to install it to. From the management portal, select your extension from the list, right-click, and choose Share/Unshare or Publish/Unpublish, depending on the extension; Share = Publish and Unshare = Unpublish. Select Organization, and then enter the name of your organization. Select Enter.
  • 21. Install your extension 20.02.2021 21 Create DevOps Extensions Close the panel. Your extension can now be installed into this organization. In the Marketplace, select your extension to open its overview page. Select Get it free to start the installation process. Select the organization you shared the extension with from the dropdown menu. Select Install. Congratulations! Your extension is now installed into an organization and is ready to be tested.
  • 22. Try your extension 20.02.2021 22 Create DevOps Extensions Your extension contributed a view named "My Hub" to the project-level Code area. Let's navigate to it. Select Proceed to organization at the end of the installation wizard to navigate to the home page of the organization the extension was installed to (https://dev.azure.com/{organization}). Select Organization settings, and then select Extensions to see your newly installed extension.
  • 23. Debugging your extension 20.02.2021 23 Create DevOps Extensions To debug the extension using Visual Studio or Browser Developer Tools and speed up the development without redeploying extension each time you change source code, you need change manifest adding baseUri property: { ... "baseUri": "https://localhost:44300", ... } Changing the manifest loads the extension from your local web server instance. For example, IISExpress in Visual Studio. After you change the manifest, deploy and install this debugging extension only once. Note Run your local web server in SSL mode, because Azure DevOps demands that the web page is served from a secure source otherwise you obtain an error in browser console during the extension IFRAME loading.
  • 24. Q&A
  • 25. 20.02.2021 25 Du möchtest… … Teil der nächsten IT-Revolution sein? … Dich mit modernster Technologie beschäftigen? … mit uns etwas Neues aufbauen? … in einer Firma mit starken Werten und Kultur arbeiten? Dann suchen wir genau Dich! Bewirb Dich auf eine unserer offenen Cloud Stellen:  Cloud Architekt (Azure, Google Cloud Platform, AWS)  Cloud Ingenieur (Azure, Google Cloud Platform, AWS)  Microsoft Azure Solution Engineer Sende Deine Bewerbungsunterlagen direkt an christian.waha@ti8m.ch. Wir freuen uns auf Dich! Mehr Infos auf www.ti8m.ch Wir suchen Dich als Cloud Experten!
  • 26. Referenzen 20.02.2021 26 Create DevOps Extensions Dokument Link Microsoft Publisher Agreement RE4xqkx (microsoft.com) Microsoft Payout schedules and processes Payout schedules and processes - Partner Center | Microsoft Docs Microsoft Payout FAQ Payouts and tax profile FAQ - Partner Center | Microsoft Docs Azure DevOps Tasks Referenz (Site 11) azure-pipelines-task-lib/tasks.schema.json at master · microsoft/azure-pipelines-task-lib · GitHub Azure DevOps Tasks Examples https://github.com/microsoft/azure-pipelines-tasks/tree/master/Tasks Azure Marketplace Create Publisher Create Publisher | Visual Studio Marketplace Azure DevOps Extensions Developing extensions for Azure DevOps - Azure DevOps | Microsoft Docs Extensions Samples Samples overview - Azure DevOps | Microsoft Docs