You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: learn-pr/azure-devops/manage-build-dependencies/includes/1-introduction.md
+8-8Lines changed: 8 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,12 @@
1
-
In this module, you'll create a build pipeline that produces a package that multiple apps can use.
1
+
In this module, you create a build pipeline that produces a package that multiple apps can use.
2
2
3
-
It's likely that you've used open-source or other third-party components in your software. Using components that are popular in the community and have already been built and tested is often the fastest way to get things done.
3
+
It's likely that you used open-source or other partner components in your software. Using components that are popular in the community and have already been built and tested is often the fastest way to get things done.
4
4
5
-
You might also have your own app code that you can move into a library or package so that others can use it. This might be an open-source project, or software that only your team can access.
5
+
You might also have your own app code that you can move into a library or package so that others can use it. This code might be an open-source project, or software that only your team can access.
6
6
7
-
There are many ways to build and host your packages. The right solution depends both on the kinds of programming languages and frameworks you use and who you want to access your packages. Here, you'll continue your work with the Tailspin web team by creating a NuGet package for .NET that's hosted on Azure Artifacts.
7
+
There are many ways to build and host your packages. The right solution depends both on the kinds of programming languages and frameworks you use and who you want to access your packages. Here, you continue your work with the Tailspin web team by creating a NuGet package for .NET thatAzure Artifacts hosts.
8
8
9
-
After completing this module, you'll be able to:
9
+
After you complete this module, you'll be able to:
10
10
11
11
- Create and share packages that multiple applications can use.
12
12
- Create a build pipeline for your package and publish your package to Azure Artifacts.
@@ -17,7 +17,7 @@ After completing this module, you'll be able to:
17
17
18
18
The modules in this learning path form a progression.
19
19
20
-
To follow the progression from the beginning, be sure to first complete the [Get started with Azure DevOps](../../../paths/evolve-your-devops-practices/index.yml?azure-portal=true) learning path.
20
+
To follow the progression from the beginning, first complete the [Get started with Azure DevOps](../../../paths/evolve-your-devops-practices/index.yml?azure-portal=true) learning path.
21
21
22
22
We also recommend you start at the beginning of this learning path, [Build applications with Azure DevOps](../../../paths/build-applications-with-azure-devops/index.yml?azure-portal=true).
23
23
@@ -33,7 +33,7 @@ This environment lets you complete the exercises in this and future modules. You
33
33
34
34
## Meet the team
35
35
36
-
You met the _Space Game_ web team at Tailspin Toys in previous modules. As a refresher, here's who you'll work with in this module.
36
+
You met the _Space Game_ web team at Tailspin Toys in previous modules. As a refresher, here's who you work with in this module.
37
37
38
38
:::row:::
39
39
@@ -47,4 +47,4 @@ You met the _Space Game_ web team at Tailspin Toys in previous modules. As a ref
47
47
48
48
:::row-end:::
49
49
50
-
Mara has prior experience with DevOps, and is helping the team adopt a more streamlined process by using Azure DevOps.
50
+
Mara has prior experience with DevOps, and is helping the team adopt a more streamlined process by using Azure DevOps.
Copy file name to clipboardExpand all lines: learn-pr/azure-devops/manage-build-dependencies/includes/2-plan-build-dependencies-for-your-pipeline.md
+23-23Lines changed: 23 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,8 @@
1
-
In this unit, you'll learn about packaging code to make it easier to share. You'll discover why you should make packages, the kinds of packages you can create, where you can host the packages, and how you can access them when they're hosted. You'll also learn about package versioning.
1
+
In this unit, you learn about packaging code to make it easier to share. You discover why you should make packages, the kinds of packages you can create, where you can host the packages, and how you can access them when they're hosted. You also learn about package versioning.
2
2
3
-
Codebases are always growing larger and more complex. It's unusual for a team to write all the code that their app uses. Instead, the team includes existing code written by other developers. There can be many of these packages, or dependencies, in an app. It's important to actively manage these dependencies to be able to maintain them properly and make sure they meet security requirements.
3
+
Codebases are always growing larger and more complex. It's unusual for a team to write all the code that their app uses. Instead, the team includes existing code written by other developers. There can be many of these packages, or *dependencies*, in an app. It's important to actively manage dependencies to be able to maintain them properly and make sure they meet security requirements.
4
4
5
-
Let's check in and see how the team is doing. Andy has called the team together to talk about a potential change to their code that would help out another team.
5
+
Check in and see how the team is doing. Andy called the team together to talk about a potential change to their code that would help out another team.
6
6
7
7
## Team meeting
8
8
@@ -24,33 +24,33 @@ Let's check in and see how the team is doing. Andy has called the team together
24
24
25
25
## What is a package?
26
26
27
-
A _package_ contains reusable code that other developers can use in their own projects, even though they didn't write it.
27
+
A *package* contains reusable code that other developers can use in their own projects, even though they didn't write it.
28
28
29
-
For compiled languages, a package typically contains the compiled binary code, such as .dll files in .NET, or .class files in Java. For languages that are interpreted instead of compiled, such as JavaScript or Python, a package might include source code.
29
+
For compiled languages, a package typically contains the compiled binary code, such as *.dll* files in .NET or *.class* files in Java. For languages that are interpreted instead of compiled, such as JavaScript or Python, a package might include source code.
30
30
31
31
Either way, packages are typically compressed to ZIP or a similar format. Package systems often define a unique file extension, such as *.nupkg* or *.jar*, to make the package's use clear. Compression can help reduce download time and also produce a single file to simplify management.
32
32
33
-
Packages also often contain one or more files that provide metadata, or information about the package. This metadata might describe what the package does, specify its license terms, the author's contact information, and the package's version.
33
+
Packages also often contain one or more files that provide metadata, or information about the package. This metadata might describe what the package does, specify its license terms, the author's contact information, and the package version.
34
34
35
35
## Why should I build a package?
36
36
37
37
There are advantages to building a package as opposed to duplicating the code.
38
38
39
-
One reason to create a package instead of duplicating code is to prevent _drift_. When code is duplicated, each copy can quickly diverge to satisfy the requirements of a particular app. It becomes difficult to migrate changes from one copy to the others. In other words, you lose the ability to improve the code in ways that benefit everyone.
39
+
One reason to create a package instead of duplicating code is to prevent *drift*. When code is duplicated, each copy can quickly diverge to satisfy the requirements of a particular app. It becomes difficult to migrate changes from one copy to the others. In other words, you lose the ability to improve the code in ways that benefit everyone.
40
40
41
41
Packages also group related functionality into one reusable component. Depending on the programming language, a package can provide apps with access to certain types and functions, while restricting access to their implementation details.
42
42
43
-
Another reason to build a package is to provide a consistent way to build and test that package's functionality. When code is duplicated, each app might build and test that code in different ways. One set of tests might include checks from which another set could benefit.
43
+
Another reason to build a package is to provide a consistent way to build and test the functionality of that package. When code is duplicated, each app might build and test that code in different ways. One set of tests might include checks from which another set could benefit.
44
44
45
45
One tradeoff is that you have another codebase to test and maintain with a package. You must also be careful when adding features. Generally speaking, a package should contain features that benefit many kinds of apps. For example, [Json.NET](https://www.newtonsoft.com/json?azure-portal=true) is a popular NuGet package for .NET that allows you to work with JSON files. Json.NET is open source, so the community can propose improvements and report issues.
46
46
47
47
When multiple apps can benefit from the same code, the advantages far outweigh the disadvantages. You have just one codebase, just one set of tests, and just one build process to manage.
48
48
49
49
## How can I identify dependencies?
50
50
51
-
If the goal is to reorganize your code into separate components, you need to identify those pieces of your app that can be removed, packaged to be made reusable, stored in a central location, and versioned. You might even want to replace your own code with third-party components that are either open source or that you license.
51
+
If the goal is to reorganize your code into separate components, you need to identify those pieces of your app that can be removed, packaged to be made reusable, stored in a central location, and versioned. You might even want to replace your own code with partner components that are either open source or that you license.
52
52
53
-
There are many ways to identify the potential dependencies in your codebase. These include scanning your code for patterns of reuse, and analyzing the architecture of your solution. Here are some ways to identify dependencies:
53
+
There are many ways to identify the potential dependencies in your codebase. These approaches include scanning your code for patterns of reuse, and analyzing the architecture of your solution. Here are some ways to identify dependencies:
54
54
55
55
***Duplicate code**.
56
56
@@ -62,7 +62,7 @@ There are many ways to identify the potential dependencies in your codebase. The
62
62
63
63
***Individual lifecycle**.
64
64
65
-
Look for parts of the code that have a similar lifecycle that you can deploy and release individually. If this code can be maintained by a separate team, it's a good indication you can package it as a component outside of the solution.
65
+
Look for parts of the code that have a similar lifecycle that you can deploy and release individually. If a separate team can maintain this code, it's a good indication you can package it as a component outside of the solution.
66
66
67
67
***Stable parts**.
68
68
@@ -72,7 +72,7 @@ There are many ways to identify the potential dependencies in your codebase. The
72
72
73
73
Whenever code and components are independent and unrelated to other parts of the system, you can potentially isolate them into separate dependencies.
74
74
75
-
You can use various tools to assist you in scanning and examining your codebase. These range from tools that scan for duplicate code and draw solution dependency graphs to tools that can compute metrics for coupling and cohesion.
75
+
You can use various tools to assist you in scanning and examining your codebase. Examples range from tools that scan for duplicate code and draw solution dependency graphs to tools that can compute metrics for coupling and cohesion.
76
76
77
77
## What kinds of packages are there?
78
78
@@ -83,11 +83,11 @@ You might already be familiar with these popular package systems:
83
83
***NuGet**: packages .NET libraries
84
84
***NPM**: packages JavaScript libraries
85
85
***Maven**: packages Java libraries
86
-
***Docker**: packages software in isolated units called _containers_
86
+
***Docker**: packages software in isolated units called *containers*
87
87
88
88
## Where are packages hosted?
89
89
90
-
You can host packages on your own network, or you can use a hosting service. A hosting service is often called a _package repository_ or _package registry_. Many of these services provide free hosting for open-source projects.
90
+
You can host packages on your own network, or you can use a hosting service. A hosting service is often called a *package repository* or *package registry*. Many of these services provide free hosting for open-source projects.
91
91
92
92
Here are some popular hosting services for the package types we just described:
93
93
@@ -105,9 +105,9 @@ Here are some popular hosting services for the package types we just described:
Docker packages are called images, and contain complete, self-contained deployments. Most commonly, a Docker image represents a software component that can be hosted and executed by itself, without any dependencies on other images. Docker images are layered and might be dependent on other images.
108
+
Docker packages are called images, and contain complete, self-contained deployments. Most commonly, a Docker image represents a software component that can be hosted and run by itself, without any dependencies on other images. Docker images are layered and might be dependent on other images.
109
109
110
-
A _package feed_ refers to your package repository server. This server can be on the internet or behind your firewall on your network. For example, you can [host your own NuGet feeds](/nuget/hosting-packages/overview?azure-portal=true) by using hosting products such as Azure Artifacts and MyGet. You can also host packages on a file share.
110
+
A *package feed* refers to your package repository server. This server can be on the internet or behind your firewall on your network. For example, you can [host your own NuGet feeds](/nuget/hosting-packages/overview?azure-portal=true) by using hosting products such as Azure Artifacts and MyGet. You can also host packages on a file share.
111
111
112
112
When you host packages behind the firewall, you can include feeds to your own packages. You can also cache packages that you trust on your network when your systems can't connect to the internet.
113
113
@@ -117,7 +117,7 @@ A good dependency management strategy depends on these three elements:
117
117
118
118
***Standardization**.
119
119
120
-
Standardizing how you declare and resolve dependencies will help your automated release process remain repeatable and predictable.
120
+
Standardize how you declare and resolve dependencies helps your automated release process remain repeatable and predictable.
121
121
122
122
***Packaging formats and sources**.
123
123
@@ -131,7 +131,7 @@ A good dependency management strategy depends on these three elements:
131
131
132
132
Many package feeds provide unrestricted access to packages. For example, you can download [Json.NET](https://www.nuget.org/packages/Newtonsoft.Json/?azure-portal=true) from nuget.org, without the need to sign in or authenticate.
133
133
134
-
Other package feeds require authentication. You can authenticate access to feeds in a few ways. For example, some kinds of feeds require a username and password. Other feeds require an _access token_, which is typically a long series of characters that identifies who you are and to what resources you have access. You can set access tokens to expire after a given time period.
134
+
Other package feeds require authentication. You can authenticate access to feeds in a few ways. For example, some feeds require a username and password. Other feeds require an *access token*, which is typically a long series of characters that identifies who you are and to what resources you have access. You can set access tokens to expire after a given period.
135
135
136
136
## How are packages versioned?
137
137
@@ -143,12 +143,12 @@ Semantic Versioning is a popular versioning scheme. Here's the format:
143
143
144
144
> **Major.Minor.Patch[-Suffix]**
145
145
146
-
Here is what each of these parameters means:
146
+
Here's what each of these parameters means:
147
147
148
148
* A new **Major** version introduces breaking changes. Apps typically need to update how they use the package to work with a new major version.
149
149
* A new **Minor** version introduces new features, but is backward-compatible with earlier versions.
150
150
* A new **Patch** introduces backward-compatible bug fixes, but not new features.
151
-
* The **-Suffix** part is optional and identifies the package as a pre-release version. For example, 1.0.0-beta1 might identify the package as the first beta prerelease build for the 1.0.0 release.
151
+
* The **-Suffix** part is optional and identifies the package as a prerelease version. For example, 1.0.0-beta1 might identify the package as the first beta prerelease build for the 1.0.0 release.
152
152
153
153
When you reference a package, you do so by version number.
When you reference a package from your app, you typically _pin_—or specify—the version of that package you want to use.
163
+
When you reference a package from your app, you typically *pin*, or specify, the version of that package you want to use.
164
164
165
-
Many frameworks let you specify allowable ranges of package versions to install. Some also allow you to specify wildcards, which we call a _floating version_.
165
+
Many frameworks let you specify allowable ranges of package versions to install. Some also allow you to specify wildcards, which we call a *floating version*.
166
166
167
167
For example, in NuGet, version "1.0" means the first version that's equal to or greater than 1.0. "[1.0]" specifies to install version 1.0 only, and not a newer version.
168
168
@@ -177,7 +177,7 @@ Here are a few other examples:
177
177
178
178
As each maintainer releases a new package version, you can evaluate what's changed and test your app against it. When you're ready, you can update the package's version number in your configuration and submit the change to your build pipeline.
179
179
180
-
Here's an example of how you might include the Newtonsoft.Json package in your C# application's project (.csproj) file. This example specifies version 13.0.1 of that package:
180
+
Here's an example of how you might include the *Newtonsoft.Json* package in your C# application's project (*.csproj*) file. This example specifies version 13.0.1 of that package:
0 commit comments