mirror of https://github.com/docker/docs.git
				
				
				
			hub: autobuild refresh (#21610)
<!--Delete sections as needed --> ## Description Quick refresh of autobuild content. - Updated some linkTitles and weights to make the titles more scannable in the nav and somewhat logically ordered. - Updated capitalization to sentence case for consistency. - `Automated builds`->`[Aa]utomated builds` - `Autobuild`->`[Aa]utobuild` - `Automated tests`->`[Aa]utomated tests` - `Autotest`->`[Aa]utotest` - Updated note formatting. - Fixed some vale nags. - `above`->`previous` - `click`->`select` Did a `git mv` with the following files, but I think the similar file names caused everything to be flagged as new/deleted rather than just renamed. Not planning to do a deeper refresh of the existing content at this time. - Renamed `_index.md` to `setup.md` - Renamed `how-builds-work.md` to `_index.md` https://deploy-preview-21610--docsdocker.netlify.app/docker-hub/repos/manage/builds/ ## Related issues or tickets ENGDOCS-2351 ## Reviews <!-- Notes for reviewers here --> <!-- List applicable reviews (optionally @tag reviewers) --> - [ ] Editorial review Signed-off-by: Craig <craig.osterhout@docker.com>
This commit is contained in:
		
							parent
							
								
									2db1648b57
								
							
						
					
					
						commit
						c5b31325ae
					
				|  | @ -3,7 +3,6 @@ Amazon | |||
| Anchore | ||||
| Apple | ||||
| Artifactory | ||||
| Autotest | ||||
| Azure | ||||
| Btrfs | ||||
| BuildKit | ||||
|  | @ -100,6 +99,9 @@ Zsh | |||
| [Aa]nonymized? | ||||
| [Aa]utobuild | ||||
| [Aa]llowlist | ||||
| [Aa]utobuilds? | ||||
| [Aa]utotests? | ||||
| [Bb]uildx | ||||
| [Bb]uildpack(s)? | ||||
| [Bb]uildx | ||||
| [Cc]odenames? | ||||
|  | @ -126,6 +128,7 @@ Zsh | |||
| [Pp]roxied | ||||
| [Pp]roxying | ||||
| [Rr]eal-time | ||||
| [Rr]egex(es)? | ||||
| [Rr]untimes? | ||||
| [Ss]andbox(ed)? | ||||
| [Ss]eccomp | ||||
|  |  | |||
|  | @ -1,13 +1,10 @@ | |||
| --- | ||||
| description: Set up Automated builds | ||||
| keywords: automated, build, images, Docker Hub | ||||
| title: Set up Automated Builds | ||||
| linkTitle: Automated builds | ||||
| description: how automated builds work | ||||
| keywords: docker hub, automated builds | ||||
| title: Automated builds | ||||
| weight: 90 | ||||
| aliases: | ||||
| - /docker-hub/builds/automated-build/ | ||||
| - /docker-hub/builds/classic/ | ||||
| - /docker-hub/builds/ | ||||
| - /docker-hub/builds/how-builds-work/ | ||||
| --- | ||||
| 
 | ||||
| > [!NOTE] | ||||
|  | @ -15,287 +12,33 @@ aliases: | |||
| > Automated builds require a | ||||
| > Docker Pro, Team, or Business subscription. | ||||
| 
 | ||||
| This page contains information on: | ||||
| - [Configuring Automated builds](#configure-automated-builds) | ||||
| - [Advanced Automated build options](#advanced-automated-build-options) | ||||
| - [Automated builds for teams](#autobuild-for-teams) | ||||
| Docker Hub can automatically build images from source code in an external | ||||
| repository and automatically push the built image to your Docker repositories. | ||||
| 
 | ||||
| ## Configure Automated builds | ||||
|  | ||||
| 
 | ||||
| You can configure repositories in Docker Hub so that they automatically | ||||
| build an image each time you push new code to your source provider. If you have | ||||
| [automated tests](automated-testing.md) configured, the new image is only pushed | ||||
| when the tests succeed. | ||||
| 
 | ||||
| 1. From the **Repositories** section, select a repository to view its details. | ||||
| 
 | ||||
| 2. Select the **Builds** tab. | ||||
| 
 | ||||
| 3. Select either GitHub or Bitbucket to connect where the image's source code is stored. | ||||
| 
 | ||||
|    > Note | ||||
|    > | ||||
|    > You may be redirected to the settings page to [link](link-source.md) the | ||||
|    > code repository service. Otherwise, if you are editing the build settings | ||||
|    > for an existing automated build, click **Configure automated builds**. | ||||
| 
 | ||||
| 4. Select the **source repository** to build the Docker images from. | ||||
| 
 | ||||
|    > Note | ||||
|    > | ||||
|    > You might need to specify an organization or user from | ||||
|    > the source code provider. Once you select a user, source code | ||||
|    > repositories appear in the **Select repository** drop-down list. | ||||
| 
 | ||||
| 5. Optional: Enable [autotests](automated-testing.md#enable-automated-tests-on-a-repository). | ||||
| 
 | ||||
| 6. Review the default **Build Rules**. | ||||
| 
 | ||||
|     Build rules control what Docker Hub builds into images from the contents | ||||
|     of the source code repository, and how the resulting images are tagged | ||||
|     within the Docker repository. | ||||
| 
 | ||||
|     A default build rule is set up for you, which you can edit or delete. This | ||||
|     default rule sets builds from the `Branch` in your source code repository called | ||||
|     `master` or `main`, and creates a Docker image tagged with `latest`. For more information, see [set up build rules](#set-up-build-rules) | ||||
| 
 | ||||
| 7. Optional: Select the **plus** icon to add and [configure more build rules](#set-up-build-rules). | ||||
| 
 | ||||
| 8. For each branch or tag, enable or disable the **Autobuild** toggle. | ||||
| 
 | ||||
|     Only branches or tags with autobuild enabled are built, tested, and have | ||||
|     the resulting image pushed to the repository. Branches with autobuild | ||||
|     disabled are built for test purposes (if enabled at the repository | ||||
|     level), but the built Docker image isn't pushed to the repository. | ||||
| 
 | ||||
| 9. For each branch or tag, enable or disable the **Build Caching** toggle. | ||||
| 
 | ||||
|     [Build caching](/manuals/build/building/best-practices.md#leverage-build-cache) | ||||
|     can save time if you are building a large image frequently or have | ||||
|     many dependencies. Leave the build caching disabled to | ||||
|     make sure all of your dependencies are resolved at build time, or if | ||||
|     you have a large layer that's quicker to build locally. | ||||
| 
 | ||||
| 10. Select **Save** to save the settings, or select **Save and build** to save and | ||||
|    run an initial test. | ||||
| 
 | ||||
|     > Note | ||||
|     > | ||||
|     > A webhook is automatically added to your source code repository to notify | ||||
|     > Docker Hub on every push. Only pushes to branches that are listed as the | ||||
|     > source for one or more tags, trigger a build. | ||||
| 
 | ||||
| ### Set up build rules | ||||
| 
 | ||||
| By default when you set up Automated builds, a basic build rule is created for you. | ||||
| This default rule watches for changes to the `master` or `main` branch in your source code | ||||
| repository, and builds the `master` or `main` branch into a Docker image tagged with | ||||
| `latest`. | ||||
| 
 | ||||
| In the **Build Rules** section, enter one or more sources to build. | ||||
| 
 | ||||
| For each source: | ||||
| 
 | ||||
| * Select the **Source type** to build either a tag or a branch. This | ||||
|   tells the build system what to look for in the source code repository. | ||||
| 
 | ||||
| * Enter the name of the **Source** branch or tag you want to build. | ||||
| 
 | ||||
|   The first time you configure Automated builds, a default build rule is set up | ||||
|   for you. This default set builds from the `Branch` in your source code called | ||||
|   `master`, and creates a Docker image tagged with `latest`. | ||||
| 
 | ||||
|   You can also use a regex to select which source branches or tags to build. | ||||
|   To learn more, see | ||||
|   [regexes](#regexes-and-automated-builds). | ||||
| 
 | ||||
| * Enter the tag to apply to Docker images built from this source. | ||||
| 
 | ||||
|   If you configured a regex to select the source, you can reference the | ||||
|   capture groups and use its result as part of the tag. To learn more, see | ||||
|   [regexes](#regexes-and-automated-builds). | ||||
| 
 | ||||
| * Specify the **Dockerfile location** as a path relative to the root of the source code repository. If the Dockerfile is at the repository root, leave this path set to `/`. | ||||
| When you set up automated builds, also called autobuilds, you create a list of | ||||
| branches and tags that you want to build into Docker images. When you push code | ||||
| to a source-code branch, for example in GitHub, for one of those listed image | ||||
| tags, the push uses a webhook to trigger a new build, which produces a Docker | ||||
| image. The built image is then pushed to Docker Hub. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > When Docker Hub pulls a branch from a source code repository, it performs a | ||||
| > shallow clone - only the tip of the specified branch. Refer to | ||||
| > [Advanced options for Autobuild and Autotest](advanced.md#source-repository-or-branch-clones) | ||||
| > for more information. | ||||
| > You can still use `docker push` to push pre-built images to | ||||
| repositories with automated builds configured. | ||||
| 
 | ||||
| ### Environment variables for builds | ||||
| If you have automated tests configured, these run after building, but before | ||||
| pushing to the registry. You can use these tests to create a continuous | ||||
| integration workflow where a build that fails its tests doesn't push the built | ||||
| image. Automated tests don't push images to the registry on their own. [Learn about automated image testing](automated-testing.md). | ||||
| 
 | ||||
| You can set the values for environment variables used in your build processes | ||||
| when you configure an automated build. Add your build environment variables by | ||||
| selecting the **plus** icon next to the **Build environment variables** section, and | ||||
| then entering a variable name and the value. | ||||
| Depending on your [subscription](https://www.docker.com/pricing), | ||||
| you may get concurrent builds, which means that `N` autobuilds can be run at the | ||||
| same time. `N` is configured according to your subscription. Once `N+1` builds | ||||
| are running, any additional builds go into a queue to be run later. | ||||
| 
 | ||||
| When you set variable values from the Docker Hub UI, you can use them by the | ||||
| commands you set in `hooks` files. However, they're stored so that only users who have `admin` access to the Docker Hub repository can see their values. This | ||||
| means you can use them to store access tokens or other information that | ||||
| should remain secret. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > The variables set on the build configuration screen are used during | ||||
| > the build processes only and shouldn't get confused with the environment | ||||
| > values used by your service, for example to create service links. | ||||
| 
 | ||||
| ## Advanced automated build options | ||||
| 
 | ||||
| At the minimum you need a build rule composed of a source branch, or tag, and a | ||||
| destination Docker tag to set up an automated build. You can also: | ||||
| 
 | ||||
| - Change where the build looks for the Dockerfile | ||||
| - Set a path to the files the build should use (the build context) | ||||
| - Set up multiple static tags or branches to build from | ||||
| - Use regular expressions (regexes) to dynamically select source code to build and | ||||
| create dynamic tags | ||||
| 
 | ||||
| All of these options are available from the **Build configuration** screen for | ||||
| each repository. Select **Repositories** from the left navigation, and select the name of the repository you want to edit. Select the **Builds** tab, and then select **Configure Automated builds**. | ||||
| 
 | ||||
| ### Tag and branch builds | ||||
| 
 | ||||
| You can configure your automated builds so that pushes to specific branches or tags triggers a build. | ||||
| 
 | ||||
| 1. In the **Build Rules** section, select the **plus** icon to add more sources to build. | ||||
| 
 | ||||
| 2.  Select the **Source type** to build either a tag or a branch. | ||||
| 
 | ||||
|     > Note | ||||
|     > | ||||
|     > This tells the build system what type of source to look for in the code | ||||
|     > repository. | ||||
| 
 | ||||
| 3. Enter the name of the **Source** branch or tag you want to build. | ||||
| 
 | ||||
|     > Note | ||||
|     > | ||||
|     > You can enter a name, or use a regex to match which source branch or tag | ||||
|     > names to build. To learn more, see [regexes](index.md#regexes-and-automated-builds). | ||||
| 
 | ||||
| 4. Enter the tag to apply to Docker images built from this source. | ||||
| 
 | ||||
|    > Note | ||||
|    > | ||||
|    > If you configured a regex to select the source, you can reference the | ||||
|    > capture groups and use its result as part of the tag. To learn more, see | ||||
|    > [regexes](index.md#regexes-and-automated-builds). | ||||
| 
 | ||||
| 5. Repeat steps 2 through 4 for each new build rule you set up. | ||||
| 
 | ||||
| ### Set the build context and Dockerfile location | ||||
| 
 | ||||
| Depending on how you arrange the files in your source code repository, the | ||||
| files required to build your images may not be at the repository root. If that's | ||||
| the case, you can specify a path where the build looks for the files. | ||||
| 
 | ||||
| The build context is the path to the files needed for the build, relative to | ||||
| the root of the repository. Enter the path to these files in the **Build context** field. Enter `/` to set the build context as the root of the source code repository. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > If you delete the default path `/` from the **Build context** field and leave | ||||
| > it blank, the build system uses the path to the Dockerfile as the build | ||||
| > context. However, to avoid confusion it's recommended that you specify the | ||||
| > complete path. | ||||
| 
 | ||||
| You can specify the **Dockerfile location** as a path relative to the build | ||||
| context. If the Dockerfile is at the root of the build context path, leave the | ||||
| Dockerfile path set to `/`. If the build context field is blank, set the path | ||||
| to the Dockerfile from the root of the source repository. | ||||
| 
 | ||||
| ### Regexes and Automated builds | ||||
| 
 | ||||
| You can specify a regular expression (regex) so that only matching branches or | ||||
| tags are built. You can also use the results of the regex to create the Docker | ||||
| tag that's applied to the built image. | ||||
| 
 | ||||
| You can use up to nine regular expression capture groups, or expressions enclosed in parentheses, to select a source to build, and reference | ||||
| these in the **Docker Tag** field using `{\1}` through `{\9}`. | ||||
| 
 | ||||
| <!-- Capture groups Not a priority | ||||
| #### Regex example: build from version number branch and tag with version number | ||||
| 
 | ||||
| You could also use capture groups to build and label images that come from various | ||||
| sources. For example, you might have | ||||
| 
 | ||||
| `/(alice|bob)-v([0-9.]+)/` --> | ||||
| 
 | ||||
| ### Build images with BuildKit | ||||
| 
 | ||||
| Autobuilds use the BuildKit build system by default. If you want to use the legacy | ||||
| Docker build system, add the [environment variable](index.md#environment-variables-for-builds) | ||||
| `DOCKER_BUILDKIT=0`. Refer to the [BuildKit](/manuals/build/buildkit/_index.md) | ||||
| page for more information on BuildKit. | ||||
| 
 | ||||
| ## Autobuild for teams | ||||
| 
 | ||||
| When you create an automated build repository in your own user account, you | ||||
| can start, cancel, and retry builds, and edit and delete your own repositories. | ||||
| 
 | ||||
| These same actions are also available for team repositories from Docker Hub if | ||||
| you are an owner. If you are a member of a | ||||
| team with `write` permissions you can start, cancel, and retry builds in your | ||||
| team's repositories, but you cannot edit the team repository settings or delete | ||||
| the team repositories. If your user account has `read` permission, or if you're | ||||
| a member of a team with `read` permission, you can view the build configuration | ||||
| including any testing settings. | ||||
| 
 | ||||
| | Action/Permission     | Read | Write | Admin | Owner | | ||||
| | --------------------- | ---- | ----- | ----- | ----- | | ||||
| | view build details    |  x   |   x   |   x   |   x   | | ||||
| | start, cancel, retry  |      |   x   |   x   |   x   | | ||||
| | edit build settings   |      |       |   x   |   x   | | ||||
| | delete build          |      |       |       |   x   | | ||||
| 
 | ||||
| ### Service users for team autobuilds | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > Only owners can set up Automated builds for teams. | ||||
| 
 | ||||
| When you set up Automated builds for teams, you grant Docker Hub access to | ||||
| your source code repositories using OAuth tied to a specific user account. This | ||||
| means that Docker Hub has access to everything that the linked source provider | ||||
| account can access. | ||||
| 
 | ||||
| For organizations and teams, it's recommended you create a dedicated service account to grant access to the source provider. This ensures that no | ||||
| builds break as individual users' access permissions change, and that an | ||||
| individual user's personal projects aren't exposed to an entire organization. | ||||
| 
 | ||||
| This service account should have access to any repositories to be built, | ||||
| and must have administrative access to the source code repositories so it can | ||||
| manage deploy keys. If needed, you can limit this account to only a specific | ||||
| set of repositories required for a specific build. | ||||
| 
 | ||||
| If you are building repositories with linked private submodules (private | ||||
| dependencies), you also need to add an override `SSH_PRIVATE` environment | ||||
| variable to automated builds associated with the account. For more information, see [Troubleshoot](troubleshoot.md#build-repositories-with-linked-private-submodules) | ||||
| 
 | ||||
| 1. Create a service user account on your source provider, and generate SSH keys for it. | ||||
| 2. Create a "build" team in your organization. | ||||
| 3. Ensure that the new "build" team has access to each repository and submodule you need to build. | ||||
| 
 | ||||
|     Go to the repository's **Settings** page. On GitHub, add the new "build" team | ||||
|     to the list of **Collaborators and Teams**. On Bitbucket, add the "build" team | ||||
|     to the list of approved users on the **Access management** screen. | ||||
| 
 | ||||
| 4. Add the service user to the "build" team on the source provider. | ||||
| 
 | ||||
| 5. Sign in to Docker Hub as an owner, switch to the organization, and follow the instructions to [link to source code repository](link-source.md) using the service account. | ||||
| 
 | ||||
|     > [!NOTE] | ||||
|     > | ||||
|     > You may need to log out of your individual account on the source code provider to create the link to the service account. | ||||
| 
 | ||||
| 6. Optional: Use the SSH keys you generated to set up any builds with private submodules, using the service account and [the instructions above](troubleshoot.md#build-repositories-with-linked-private-submodules). | ||||
| 
 | ||||
| ## What's Next? | ||||
| 
 | ||||
| - [Customize your build process](advanced.md) with environment variables, hooks, and more | ||||
| - [Add automated tests](automated-testing.md) | ||||
| - [Manage your builds](manage-builds.md) | ||||
| - [Troubleshoot](troubleshoot.md) | ||||
| The maximum number of pending builds in the queue is 30 and Docker Hub discards further | ||||
| requests. The number of concurrent builds for Pro is 5 and | ||||
| for Team and Business is 15. | ||||
| Automated builds can handle images of up to 10 GB in size. | ||||
|  |  | |||
|  | @ -1,7 +1,9 @@ | |||
| --- | ||||
| description: Automated builds | ||||
| keywords: automated, build, images | ||||
| title: Advanced options for Autobuild and Autotest | ||||
| title: Advanced options for autobuild and autotest | ||||
| linkTitle: Advanced options | ||||
| weight: 40 | ||||
| aliases: | ||||
| - /docker-hub/builds/advanced/ | ||||
| --- | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| description: Automated tests | ||||
| keywords: Automated, testing, repository | ||||
| title: Automated repository tests | ||||
| weight: 30 | ||||
| aliases: | ||||
| - /docker-hub/builds/automated-testing/ | ||||
| --- | ||||
|  | @ -36,7 +37,7 @@ services: | |||
|     command: run_tests.sh | ||||
| ``` | ||||
| 
 | ||||
| The example above builds the repository, and runs the `run_tests.sh` file inside | ||||
| The previous example builds the repository, and runs the `run_tests.sh` file inside | ||||
| a container using the built image. | ||||
| 
 | ||||
| You can define any number of linked services in this file. The only requirement | ||||
|  | @ -58,18 +59,18 @@ to further customize your test behavior. | |||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > If you enable Automated builds, they also run any tests defined | ||||
| > If you enable automated builds, they also run any tests defined | ||||
| in the `test.yml` files. | ||||
| 
 | ||||
| ## Enable Automated tests on a repository | ||||
| ## Enable automated tests on a repository | ||||
| 
 | ||||
| To enable testing on a source code repository, you must first create an | ||||
| associated build-repository in Docker Hub. Your `Autotest` settings are | ||||
| configured on the same page as [automated builds](index.md), however | ||||
| you do not need to enable Autobuilds to use `Autotest`. Autobuild is enabled per | ||||
| you do not need to enable autobuilds to use autotest. Autobuild is enabled per | ||||
| branch or tag, and you do not need to enable it at all. | ||||
| 
 | ||||
| Only branches that are configured to use Autobuild push images to the | ||||
| Only branches that are configured to use autobuild push images to the | ||||
| Docker repository, regardless of the Autotest settings. | ||||
| 
 | ||||
| 1. Sign in to Docker Hub and select **Repositories**. | ||||
|  | @ -80,7 +81,7 @@ Docker repository, regardless of the Autotest settings. | |||
| 
 | ||||
| 4. Select **Configure automated builds**. | ||||
| 
 | ||||
| 5. Configure the automated build settings as explained in [Automated Builds](index.md). | ||||
| 5. Configure the automated build settings as explained in [Automated builds](index.md). | ||||
| 
 | ||||
|     At minimum you must configure: | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,43 +0,0 @@ | |||
| --- | ||||
| description: how automated builds work | ||||
| keywords: docker hub, automated builds | ||||
| title: How Automated builds work | ||||
| aliases: | ||||
| - /docker-hub/builds/how-builds-work/ | ||||
| --- | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > Automated builds require a | ||||
| > Docker Pro, Team, or Business subscription. | ||||
| 
 | ||||
| Docker Hub can automatically build images from source code in an external | ||||
| repository and automatically push the built image to your Docker repositories. | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| When you set up Automated builds, also called autobuilds, you create a list of | ||||
| branches and tags that you want to build into Docker images. When you push code | ||||
| to a source-code branch, for example in GitHub, for one of those listed image | ||||
| tags, the push uses a webhook to trigger a new build, which produces a Docker | ||||
| image. The built image is then pushed to Docker Hub. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > You can still use `docker push` to push pre-built images to | ||||
| repositories with Automated builds configured. | ||||
| 
 | ||||
| If you have automated tests configured, these run after building but before | ||||
| pushing to the registry. You can use these tests to create a continuous | ||||
| integration workflow where a build that fails its tests doesn't push the built | ||||
| image. Automated tests don't push images to the registry on their own. [Learn about automated image testing](automated-testing.md). | ||||
| 
 | ||||
| Depending on your [subscription](https://www.docker.com/pricing), | ||||
| you may get concurrent builds, which means that `N` autobuilds can be run at the | ||||
| same time. `N` is configured according to your subscription. Once `N+1` builds | ||||
| are running, any additional builds go into a queue to be run later. | ||||
| 
 | ||||
| The maximum number of pending builds in the queue is 30 and Docker Hub discards further | ||||
| requests. The number of concurrent builds for Pro is 5 and | ||||
| for Team and Business is 15. | ||||
| Automated builds can handle images of up to 10 GB in size. | ||||
|  | @ -3,6 +3,8 @@ description: Link to GitHub and BitBucket | |||
| keywords: Docker, docker, registry, accounts, plans, Dockerfile, Docker Hub, trusted, | ||||
|   builds, trusted builds, automated builds, GitHub | ||||
| title: Configure automated builds from GitHub and BitBucket | ||||
| linkTitle: Link accounts | ||||
| weight: 20 | ||||
| aliases: | ||||
| - /docker-hub/github/ | ||||
| - /docker-hub/bitbucket/ | ||||
|  |  | |||
|  | @ -0,0 +1,299 @@ | |||
| --- | ||||
| description: Set up automated builds | ||||
| keywords: automated, build, images, Docker Hub | ||||
| title: Set up automated builds | ||||
| linkTitle: Set up | ||||
| weight: 10 | ||||
| aliases: | ||||
| - /docker-hub/builds/automated-build/ | ||||
| - /docker-hub/builds/classic/ | ||||
| - /docker-hub/builds/ | ||||
| --- | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > Automated builds require a | ||||
| > Docker Pro, Team, or Business subscription. | ||||
| 
 | ||||
| ## Configure automated builds | ||||
| 
 | ||||
| You can configure repositories in Docker Hub so that they automatically | ||||
| build an image each time you push new code to your source provider. If you have | ||||
| [automated tests](automated-testing.md) configured, the new image is only pushed | ||||
| when the tests succeed. | ||||
| 
 | ||||
| 1. From the **Repositories** section, select a repository to view its details. | ||||
| 
 | ||||
| 2. Select the **Builds** tab. | ||||
| 
 | ||||
| 3. Select either GitHub or Bitbucket to connect where the image's source code is stored. | ||||
| 
 | ||||
|    > [!NOTE] | ||||
|    > | ||||
|    > You may be redirected to the settings page to [link](link-source.md) the | ||||
|    > code repository service. Otherwise, if you are editing the build settings | ||||
|    > for an existing automated build, select **Configure automated builds**. | ||||
| 
 | ||||
| 4. Select the **source repository** to build the Docker images from. | ||||
| 
 | ||||
|    > [!NOTE] | ||||
|    > | ||||
|    > You might need to specify an organization or user from | ||||
|    > the source code provider. Once you select a user, source code | ||||
|    > repositories appear in the **Select repository** drop-down list. | ||||
| 
 | ||||
| 5. Optional. Enable [autotests](automated-testing.md#enable-automated-tests-on-a-repository). | ||||
| 
 | ||||
| 6. Review the default **Build Rules**. | ||||
| 
 | ||||
|     Build rules control what Docker Hub builds into images from the contents | ||||
|     of the source code repository, and how the resulting images are tagged | ||||
|     within the Docker repository. | ||||
| 
 | ||||
|     A default build rule is set up for you, which you can edit or delete. This | ||||
|     default rule sets builds from the `Branch` in your source code repository | ||||
|     called `master` or `main`, and creates a Docker image tagged with `latest`. | ||||
|     For more information, see [set up build rules](#set-up-build-rules). | ||||
| 
 | ||||
| 7. Optional. Select the **plus** icon to add and [configure more build rules](#set-up-build-rules). | ||||
| 
 | ||||
| 8. For each branch or tag, enable or disable the **Autobuild** toggle. | ||||
| 
 | ||||
|     Only branches or tags with autobuild enabled are built, tested, and have | ||||
|     the resulting image pushed to the repository. Branches with autobuild | ||||
|     disabled are built for test purposes (if enabled at the repository | ||||
|     level), but the built Docker image isn't pushed to the repository. | ||||
| 
 | ||||
| 9. For each branch or tag, enable or disable the **Build Caching** toggle. | ||||
| 
 | ||||
|     [Build caching](/manuals/build/building/best-practices.md#leverage-build-cache) | ||||
|     can save time if you are building a large image frequently or have | ||||
|     many dependencies. Leave the build caching disabled to | ||||
|     make sure all of your dependencies are resolved at build time, or if | ||||
|     you have a large layer that's quicker to build locally. | ||||
| 
 | ||||
| 10. Select **Save** to save the settings, or select **Save and build** to save and | ||||
|    run an initial test. | ||||
| 
 | ||||
|     > [!NOTE] | ||||
|     > | ||||
|     > A webhook is automatically added to your source code repository to notify | ||||
|     > Docker Hub on every push. Only pushes to branches that are listed as the | ||||
|     > source for one or more tags, trigger a build. | ||||
| 
 | ||||
| ### Set up build rules | ||||
| 
 | ||||
| By default when you set up automated builds, a basic build rule is created for you. | ||||
| This default rule watches for changes to the `master` or `main` branch in your source code | ||||
| repository, and builds the `master` or `main` branch into a Docker image tagged with | ||||
| `latest`. | ||||
| 
 | ||||
| In the **Build Rules** section, enter one or more sources to build. | ||||
| 
 | ||||
| For each source: | ||||
| 
 | ||||
| * Select the **Source type** to build either a tag or a branch. This | ||||
|   tells the build system what to look for in the source code repository. | ||||
| 
 | ||||
| * Enter the name of the **Source** branch or tag you want to build. | ||||
| 
 | ||||
|   The first time you configure automated builds, a default build rule is set up | ||||
|   for you. This default set builds from the `Branch` in your source code called | ||||
|   `master`, and creates a Docker image tagged with `latest`. | ||||
| 
 | ||||
|   You can also use a regex to select which source branches or tags to build. | ||||
|   To learn more, see | ||||
|   [regexes](#regexes-and-automated-builds). | ||||
| 
 | ||||
| * Enter the tag to apply to Docker images built from this source. | ||||
| 
 | ||||
|   If you configured a regex to select the source, you can reference the | ||||
|   capture groups and use its result as part of the tag. To learn more, see | ||||
|   [regexes](#regexes-and-automated-builds). | ||||
| 
 | ||||
| * Specify the **Dockerfile location** as a path relative to the root of the source code repository. If the Dockerfile is at the repository root, leave this path set to `/`. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > When Docker Hub pulls a branch from a source code repository, it performs a | ||||
| > shallow clone - only the tip of the specified branch. Refer to | ||||
| > [Advanced options for autobuild and autotest](advanced.md#source-repository-or-branch-clones) | ||||
| > for more information. | ||||
| 
 | ||||
| ### Environment variables for builds | ||||
| 
 | ||||
| You can set the values for environment variables used in your build processes | ||||
| when you configure an automated build. Add your build environment variables by | ||||
| selecting the **plus** icon next to the **Build environment variables** section, and | ||||
| then entering a variable name and the value. | ||||
| 
 | ||||
| When you set variable values from the Docker Hub UI, you can use them by the | ||||
| commands you set in `hooks` files. However, they're stored so that only users who have `admin` access to the Docker Hub repository can see their values. This | ||||
| means you can use them to store access tokens or other information that | ||||
| should remain secret. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > The variables set on the build configuration screen are used during | ||||
| > the build processes only and shouldn't get confused with the environment | ||||
| > values used by your service, for example to create service links. | ||||
| 
 | ||||
| ## Advanced automated build options | ||||
| 
 | ||||
| At the minimum you need a build rule composed of a source branch, or tag, and a | ||||
| destination Docker tag to set up an automated build. You can also: | ||||
| 
 | ||||
| - Change where the build looks for the Dockerfile | ||||
| - Set a path to the files the build should use (the build context) | ||||
| - Set up multiple static tags or branches to build from | ||||
| - Use regular expressions (regexes) to dynamically select source code to build and | ||||
| create dynamic tags | ||||
| 
 | ||||
| All of these options are available from the **Build configuration** screen for | ||||
| each repository. Select **Repositories** from the left navigation, and select the name of the repository you want to edit. Select the **Builds** tab, and then select **Configure Automated builds**. | ||||
| 
 | ||||
| ### Tag and branch builds | ||||
| 
 | ||||
| You can configure your automated builds so that pushes to specific branches or tags triggers a build. | ||||
| 
 | ||||
| 1. In the **Build Rules** section, select the **plus** icon to add more sources to build. | ||||
| 
 | ||||
| 2.  Select the **Source type** to build either a tag or a branch. | ||||
| 
 | ||||
|     > [!NOTE] | ||||
|     > | ||||
|     > This tells the build system what type of source to look for in the code | ||||
|     > repository. | ||||
| 
 | ||||
| 3. Enter the name of the **Source** branch or tag you want to build. | ||||
| 
 | ||||
|     > [!NOTE] | ||||
|     > | ||||
|     > You can enter a name, or use a regex to match which source branch or tag | ||||
|     > names to build. To learn more, see [regexes](index.md#regexes-and-automated-builds). | ||||
| 
 | ||||
| 4. Enter the tag to apply to Docker images built from this source. | ||||
| 
 | ||||
|    > [!NOTE] | ||||
|    > | ||||
|    > If you configured a regex to select the source, you can reference the | ||||
|    > capture groups and use its result as part of the tag. To learn more, see | ||||
|    > [regexes](index.md#regexes-and-automated-builds). | ||||
| 
 | ||||
| 5. Repeat steps 2 through 4 for each new build rule you set up. | ||||
| 
 | ||||
| ### Set the build context and Dockerfile location | ||||
| 
 | ||||
| Depending on how you arrange the files in your source code repository, the | ||||
| files required to build your images may not be at the repository root. If that's | ||||
| the case, you can specify a path where the build looks for the files. | ||||
| 
 | ||||
| The build context is the path to the files needed for the build, relative to | ||||
| the root of the repository. Enter the path to these files in the **Build context** field. Enter `/` to set the build context as the root of the source code repository. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > If you delete the default path `/` from the **Build context** field and leave | ||||
| > it blank, the build system uses the path to the Dockerfile as the build | ||||
| > context. However, to avoid confusion it's recommended that you specify the | ||||
| > complete path. | ||||
| 
 | ||||
| You can specify the **Dockerfile location** as a path relative to the build | ||||
| context. If the Dockerfile is at the root of the build context path, leave the | ||||
| Dockerfile path set to `/`. If the build context field is blank, set the path | ||||
| to the Dockerfile from the root of the source repository. | ||||
| 
 | ||||
| ### Regexes and automated builds | ||||
| 
 | ||||
| You can specify a regular expression (regex) so that only matching branches or | ||||
| tags are built. You can also use the results of the regex to create the Docker | ||||
| tag that's applied to the built image. | ||||
| 
 | ||||
| You can use up to nine regular expression capture groups, or expressions enclosed in parentheses, to select a source to build, and reference | ||||
| these in the **Docker Tag** field using `{\1}` through `{\9}`. | ||||
| 
 | ||||
| <!-- Capture groups Not a priority | ||||
| #### Regex example: build from version number branch and tag with version number | ||||
| 
 | ||||
| You could also use capture groups to build and label images that come from various | ||||
| sources. For example, you might have | ||||
| 
 | ||||
| `/(alice|bob)-v([0-9.]+)/` --> | ||||
| 
 | ||||
| ### Build images with BuildKit | ||||
| 
 | ||||
| Autobuilds use the BuildKit build system by default. If you want to use the legacy | ||||
| Docker build system, add the [environment variable](index.md#environment-variables-for-builds) | ||||
| `DOCKER_BUILDKIT=0`. Refer to the [BuildKit](/manuals/build/buildkit/_index.md) | ||||
| page for more information on BuildKit. | ||||
| 
 | ||||
| ## Autobuild for teams | ||||
| 
 | ||||
| When you create an automated build repository in your own user account, you | ||||
| can start, cancel, and retry builds, and edit and delete your own repositories. | ||||
| 
 | ||||
| These same actions are also available for team repositories from Docker Hub if | ||||
| you are an owner. If you are a member of a | ||||
| team with `write` permissions you can start, cancel, and retry builds in your | ||||
| team's repositories, but you cannot edit the team repository settings or delete | ||||
| the team repositories. If your user account has `read` permission, or if you're | ||||
| a member of a team with `read` permission, you can view the build configuration | ||||
| including any testing settings. | ||||
| 
 | ||||
| | Action/Permission     | Read | Write | Admin | Owner | | ||||
| | --------------------- | ---- | ----- | ----- | ----- | | ||||
| | view build details    |  x   |   x   |   x   |   x   | | ||||
| | start, cancel, retry  |      |   x   |   x   |   x   | | ||||
| | edit build settings   |      |       |   x   |   x   | | ||||
| | delete build          |      |       |       |   x   | | ||||
| 
 | ||||
| ### Service users for team autobuilds | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > | ||||
| > Only owners can set up automated builds for teams. | ||||
| 
 | ||||
| When you set up automated builds for teams, you grant Docker Hub access to | ||||
| your source code repositories using OAuth tied to a specific user account. This | ||||
| means that Docker Hub has access to everything that the linked source provider | ||||
| account can access. | ||||
| 
 | ||||
| For organizations and teams, it's recommended you create a dedicated service account to grant access to the source provider. This ensures that no | ||||
| builds break as individual users' access permissions change, and that an | ||||
| individual user's personal projects aren't exposed to an entire organization. | ||||
| 
 | ||||
| This service account should have access to any repositories to be built, | ||||
| and must have administrative access to the source code repositories so it can | ||||
| manage deploy keys. If needed, you can limit this account to only a specific | ||||
| set of repositories required for a specific build. | ||||
| 
 | ||||
| If you are building repositories with linked private submodules (private | ||||
| dependencies), you also need to add an override `SSH_PRIVATE` environment | ||||
| variable to automated builds associated with the account. For more information, see [Troubleshoot](troubleshoot.md#build-repositories-with-linked-private-submodules) | ||||
| 
 | ||||
| 1. Create a service user account on your source provider, and generate SSH keys for it. | ||||
| 2. Create a "build" team in your organization. | ||||
| 3. Ensure that the new "build" team has access to each repository and submodule you need to build. | ||||
| 
 | ||||
|     1. On GitHub or Bitbucket, go to the repository's **Settings** page. | ||||
|     2. Add the new "build" team to the list of approved users. | ||||
| 
 | ||||
|         - GitHub: Add the team in **Collaborators and Teams**. | ||||
|         - Bitbucket: Add the team in  **Access management**. | ||||
| 
 | ||||
| 4. Add the service user to the "build" team on the source provider. | ||||
| 
 | ||||
| 5. Sign in to Docker Hub as an owner, switch to the organization, and follow the instructions to [link to source code repository](link-source.md) using the service account. | ||||
| 
 | ||||
|     > [!NOTE] | ||||
|     > | ||||
|     > You may need to sign out of your individual account on the source code provider to create the link to the service account. | ||||
| 
 | ||||
| 6. Optional. Use the SSH keys you generated to set up any builds with private submodules, using the service account and [the previous instructions](troubleshoot.md#build-repositories-with-linked-private-submodules). | ||||
| 
 | ||||
| ## What's Next? | ||||
| 
 | ||||
| - [Customize your build process](advanced.md) with environment variables, hooks, and more | ||||
| - [Add automated tests](automated-testing.md) | ||||
| - [Manage your builds](manage-builds.md) | ||||
| - [Troubleshoot](troubleshoot.md) | ||||
|  | @ -3,6 +3,7 @@ title: Troubleshoot your autobuilds | |||
| description: How to troubleshoot Automated builds | ||||
| keywords: docker hub, troubleshoot, automated builds, autobuilds | ||||
| tags: [ Troubleshooting ] | ||||
| linkTitle: Troubleshoot | ||||
| aliases: | ||||
| - /docker-hub/builds/troubleshoot/ | ||||
| --- | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue