Skip to main content

Azure DevOps

Azure DevOps Project

The Azure DevOps project is the basic hull for providing the other tool categories and features. It contains also the permission management. Within one ODJ product you can only have one Azure DevOps project.

Multiple Azure DevOps organizations (SIT)

We are using multiple Azure DevOps organizations. Each organization has a limited number of projects that can be created. When a project gets created, an available organization is selected automatically. 

Permission

Azure DevOps groups

Access to Azure DevOps is managed via SIAM roles. The SIAM roles are mapped to Azure active directory groups. This groups will be created automatically, when the Azure DevOps project gets created. The roles will be order for all team members automatically.

SIAM groupADO project groupDefinition
azuredevops-xx-schwarzit-odj-[product_name]-owner[ORGA.odj.PRODUCT]\OwnerA developer with extended permissions to manage GIT repositories, branches and pipelines.
azuredevops-xx-schwarzit-odj-[product_name]-member[ORGA.odj.PRODUCT]\MemberA developer with necessary permission to add code, branches and create PR's
azuredevops-xx-schwarzit-odj-[product_name]-reader[ORGA.odj.PRODUCT]\ReaderCan read all GIT repos and pipelines. Used for BC or non-technical users

ODJ groups in Azure DevOps (SIT)

This ADO groups where added automatically to the ADO projects created by ODJ in the defined project groups. Each ODJ group is added by default to an ADO project group.

ODJ group in ADOcontaining users/groupsadded to ADO project groupAccess packageDescription
[ORGA]\odj-ownerado-odj-deliver@schwarzit.onmicrosoft.com[ORGA.odj.PRODUCT]\OwnerAzure DevOps ODJ Firefighter OwnerGive supportive access to ODJ Deliver & Tooling team and the ODJ lead developers to all ODJ created projects. "ado-odj-deliver@schwarzit.onmicrosoft.com" needs this access permanently to execute our ODJ Deliver & Tooling provisioning and checks
[ORGA]\odj-memberSYS_JIRA_AzureGIT@schwarzit.onmicrosoft.com[ORGA.odj.PRODUCT]\MemberAzure DevOps ODJ Firefighter MemberNot in use by ODJ directly. Used by QA team to integrate with their Jira QA test plugin
[ORGA]\odj-reader-[ORGA.odj.PRODUCT]\ReaderAzure DevOps ODJ Firefighter ReaderRead access for other ODJ internal teams for support cases
note

ODJ support team does not have permanent access to Azure DevOps projects.

Supportive access for ODJ staff (with access packages)

info

The ODJ support can request time-limited read/write access to your Azure DevOps project (GIT repositories, pipelines, variable groups) to provide support.

With access packages you will get temporary access to the ODJ groups (odj-owner, odj-member, odj-reader). You have to go to https://myaccess.microsoft.com/ and request the role "ODJ Azure DevOps Support". The request must be approved by ODJ Deliver & Tooling team.

image

After your access is permitted, you can order the "Azure DevOps ODJ Firefighter" owner/member/reader role without any further approval (self-service). This access is time restricted. It will be removed automatically after 5h. 

image

After the access is ordered, it may take up to 60 seconds until you have the permission. You will also receive an email.

Re-evaluate permission

When your access is not permitted after you have received the email, you can trigger a "Re-evaluate permission" process.

image

image

info

The re-evaluate must be done per Azure DevOps organization


Azure DevOps - Code repository

Azure DevOps is used to provide GIT repository. Other repository types in Azure DevOps are not supported. General non-ODJ questions and support can be found here.

This tool add the value azuredevops to the parameter odj_devenv_code_repository.

odj_devenv_code_repository: azuredevops

Managed elements

The managed elements table shows when the elements are created. Some will be on product provisioning level, some on component provisioning level. The selected product pattern affects also how the elements will be provisioned.

Element / PatternProduct (basic)Product (advanced)Component (basic)Component (advanced)
Azure DevOps project
Azure DevOps repos
Permission
GIT repository11

Remarks: 1 Depending on the selected repository style (monorepo/multirepo), one GIT repo (monorepo) on product level, or one GIT repo per component (multirepo)

Azure DevOps project

Creates an Azure DevOps project, if it is not already there. More details can be found in the Azure DevOps project section.

Azure DevOps repos

Activates the repository feature in your Azure DevOps project.

Permission

Manages the permissions to access the Azure DevOps project. More details can be found in the permission section.

GIT repository

Branch policy

By default, the defined productive branch is secured by "branch policies" in Azure DevOps. Active build policies prevent a direct push to that branch. You have to create a PR (pull request) to validate your changes. The groups "member" and "owner" are automatically added to the default reviewers list of such PRs.

Branch policies are only added to repositories that contains the sourcecode for your component.

Require a minimum number of reviewers

Is a defined number of users that need to approve your PR before it can be merged to the productive branch.

Build Validation

We are adding the default pipeline to validate the code in a pre-merge build process. All necessary tasks will be executed in the pipeline.

Conventions and restrictions

  • Renaming and deleting ODJ managed GIT repositories is not allowed
  • For monorepo, changing the name of subfolders and the component folder name is not allowed. Files inside that structures (e.g. pipeline-file) are referenced by ODJs provisioning processes
danger

If you ignore this conventions and restrictions, it causes issues in further support of your project through the automated functions of ODJ

Provisioning setup and configuration

Describes the provisioning of this tool and how it can be configured afterwards.

Product level

Provisioning

image

Azure DevOps project name

The name of your Azure DevOps project is automatically generated by the ODJ.

GIT repository layout (advanced pattern only)

Select between monorepo and multirepo GIT layout. In monorepo, all components are using the same GIT repository with sub-folders. In multirepo, each component is having it's own GIT repository.

warning

This choise cannot be changed afterwards

Configuration

No Configuration changes are available afterwards.

Component level

Provisioning (advanced pattern only)

image

Repo type

The repository type is defined on product provisioning level and is only shown as an information here.

Component name

The component name is only shown as an information here.

Technology

A technology is a combination of a language, build tool and sometimes a framework. It is required to use the configured developer tools and pipeline. A wrong selection can lead to a not working pipeline and possible strange behaviors of the developer tools. Changing the technology afterwords is not possible, choose wisely. If you want to play around, choose generic. If your technology is not available, please contact the ODJ team for support.

Component folder prefix (monorepo only)

The folder prefix will be added in front of your component name. You can specify multiple folders. This value is optional.

Demo app

Add a demo app (if available) to a separate branch in your GIT repository. This app can then be merged to your productive branch.

Configuration

No Configuration changes are available afterwards.


Azure DevOps - Pipeline

Azure DevOps Pipeline is used to provide the CI/CD pipelines. The project creation and permissions descriptions are in the Code repository category in the tool Azure DevOps.

This tool add the value azuredevops to the parameter odj_devenv_pipeline.

odj_devenv_pipeline: azuredevops

Managed elements

The managed elements table shows when the elements are created. Some will be on product provisioning level, some on component provisioning level. The selected product pattern affects also how the elements will be provisioned.

Element / PatternProduct (basic)Product (advanced)Component (basic)Component (advanced)
Azure DevOps project
Azure DevOps pipelines
Permission
Azure DevOps service connections
Pipelines - Library variable group11
Pipelines - Environments
Pipelines - Library secure file
Pipelines - Pipeline

Remarks: 1 Variable groups are create one on product level and one for each component

Azure DevOps project

Creates an Azure DevOps project, if it is not already there. More details can be found in the Azure DevOps project section.

Azure DevOps pipelines

Activates the pipeline feature in your Azure DevOps project.

Permission

Manages the permissions to access the Azure DevOps project.

Azure DevOps service connections

The ODJ created different service connection in Azure DevOps depending on the runtime and tools that you have selected.

TypeCondition
SonarQubewhen SonarQube is provisioned
Snykwhen Snyk is provisioned
Artifactorywhen Artifactory is provisioned
Dockertargets to GCR when runtime is Google
Dockertargets to ACR when runtime is Azure
Dockertargets to Docker registry when Artifactory is provisioned and a Docker registry is created
Dockerfor each consumed shared product with a docker registry when Artifactory is provisioned

Pipelines - Library variable group

Product level

A variable group with the configuration of the product is created together with the pipeline definition. It is named odj-technical-product-properties. It is automatically referenced in all ODJ provided pipelines. All pipelines are allowed to use this variable group.

The variables are used to configure the pipelines without modifying the pipeline file itself (where ever this is possible). It contains names of service connections, settings for the docker container image naming and credentials for different tools.

Different provisioning events from the ODJ will add and remove variables in the variable group. This events could come from Deliver or other parts of the ODJ (like the runtime from core).

For example when you add a kubernetes cluster in Google as your runtime the value cloud_platform is set to gcp and cloud_platform_runtime is k8s.

Modifing variable groups

It is not recommended to add, remove or modify values in the variable group. All values will be managed and modified by ODJ Deliver provisionings. If you need to add your own variables, create your own variable group and use it in the pipelines.

Component level

A variable group with the configuration of the component will be created for each component you add to your product. It is named odj-component-{component}-properties. It is automatically referenced in all ODJ provided pipelines. All pipelines are allowed to use this variable group.

Different provisioning events from the ODJ will add and remove variables in the variable group. 

Modifying variable groups

It is not recommended to add, remove or modify values in the variable group. All values will be managed and modified by ODJ Deliver provisioning. If you need to add your own variables, create your own variable group and use it in the pipelines.

Pipelines - Library secure file

Product level

A secure file is created to access the ODJ. This is required to trigger a deployment of a components. Even if the selected runtime is not GCP, this service account keyfile is required as long as ODJ is Google IAP protected.

info

This file is only added when a runtime environment with a kubernetes cluster was added to the product

Pipelines - Environments

Product level

Environments in Azure DevOps are created when you add a runtime to your ODJ product. For each stage your have added, you will get an environment with the name odj-{stage} automatically created in Azure DevOps. When the stage is removed, the environment will be removed. 

Environments can be used to add manual approvals to deploy to specific stages. This is a build in Azure DevOps feature.

Pipelines - Pipeline

Component level

For each component a pipeline file is added to your GIT repository within the provisioning process. The file is named odj-azure-pipeline.yml. For monorepos, the file is added to the defined subfolder/component name. The file content is taken from the pipeline template repository with the matching technology.

A pipeline is created in the pipeline section in the folder ODJ managed pipeline. It has the name pattern odj-pipeline-ci-{componentName}. The pipeline references the odj-azure-pipeline.yml file in your repository.

Conventions and restrictions

  • Renaming and deleting ODJ managed pipelines is not allowed
  • Renaming and deleting ODJ managed pipeline files (odj-azure-pipeline.yml) is not allowed
  • Renaming and deleting ODJ managed service connections is not allowed
  • Renaming and deleting ODJ managed variable groups is not allowed
  • Renaming and deleting ODJ managed environments is not allowed
  • Renaming and deleting ODJ managed secure files is not allowed
danger

If you ignore this conventions and restrictions, it causes issues in further support of your project through the automated functions of ODJ

Provisioning setup and configuration

Describes the provisioning of this tool and how it can be configured afterwards.

Product level

Provisioning

No configuration required

Configuration

No configuration changes are available afterwards

Component level

Provisioning

No configuration required. Autoprovisioning is supported here.

Configuration

No configuration changes are available afterwards


Azure DevOps - Boards

Azure DevOps Boards is used to provide a ticket system and agile board.

Managed elements

The managed elements table shows when the elements are created. Some will be on product provisioning level, some on component provisioning level. The selected product pattern affects also how the elements will be provisioned.

Element / PatternProduct (basic)Product (advanced)Component (basic)Component (advanced)
Azure DevOps project
Azure DevOps boards
Permission

Azure DevOps project

Creates an Azure DevOps project, if it is not already there.

Azure DevOps boards

Activates the boards feature in your Azure DevOps project.

Permission

Manages the permissions to access the Azure DevOps project.

Conventions and restrictions

None

Provisioning setup and configuration

Describes the provisioning of this tool and how it can be configured afterwards.

Product level

Provisioning

No configuration required

Configuration

No configuration changes are available afterwards

Component level

Provisioning

No configuration required. Autoprovisioning is supported here.

Configuration

No configuration changes are available afterwards