| 
1 | 1 | ---  | 
2 | 2 | title: Build secrets  | 
3 | 3 | description: Manage credentials and other secrets securely  | 
4 |  | -keywords: build, secrets, credentials, passwords, tokens  | 
 | 4 | +keywords: build, secrets, credentials, passwords, tokens, ssh, git, auth, http  | 
5 | 5 | ---  | 
6 | 6 | 
 
  | 
7 | 7 | A build secret is any piece of sensitive information, such as a password or API  | 
@@ -116,3 +116,85 @@ options for [Bake](../bake/reference.md#targetssh).  | 
116 | 116 | ```console  | 
117 | 117 | $ docker buildx build --ssh default .  | 
118 | 118 | ```  | 
 | 119 | + | 
 | 120 | +## Git authentication for remote contexts  | 
 | 121 | + | 
 | 122 | +BuildKit supports two pre-defined build secrets, `GIT_AUTH_TOKEN` and  | 
 | 123 | +`GIT_AUTH_HEADER`. Use them to specify HTTP authentication parameters when  | 
 | 124 | +building with remote, private Git repositories, including:  | 
 | 125 | + | 
 | 126 | +- Building with a private Git repository as build context  | 
 | 127 | +- Fetching private Git repositories in a build with `ADD`  | 
 | 128 | + | 
 | 129 | +For example, say you have a private GitLab project at  | 
 | 130 | +`https://gitlab.com/example/todo-app.git`, and you want to run a build using  | 
 | 131 | +that repository as the build context. An unauthenticated `docker build` command  | 
 | 132 | +fails because the builder isn't authorized to pull the repository:  | 
 | 133 | + | 
 | 134 | +```console  | 
 | 135 | +$ docker build https://gitlab.com/example/todo-app.git  | 
 | 136 | +[+] Building 0.4s (1/1) FINISHED  | 
 | 137 | + => ERROR [internal] load git source https://gitlab.com/dvdk/todo-app.git  | 
 | 138 | +------  | 
 | 139 | + > [internal] load git source https://gitlab.com/dvdk/todo-app.git:  | 
 | 140 | +0.313 fatal: could not read Username for 'https://gitlab.com': terminal prompts disabled  | 
 | 141 | +------  | 
 | 142 | +```  | 
 | 143 | + | 
 | 144 | +To authenticate the builder to the Git server, set the `GIT_AUTH_TOKEN`  | 
 | 145 | +environment variable to contain a valid GitLab access token, and pass it as a  | 
 | 146 | +secret to the build:  | 
 | 147 | + | 
 | 148 | +```console  | 
 | 149 | +$ GIT_AUTH_TOKEN=$(cat gitlab-token.txt) docker build \  | 
 | 150 | +  --secret id=GIT_AUTH_TOKEN \  | 
 | 151 | +  https://gitlab.com/example/todo-app.git  | 
 | 152 | +```  | 
 | 153 | + | 
 | 154 | +The `GIT_AUTH_TOKEN` also works with `ADD` to fetch private Git repositories as  | 
 | 155 | +part of your build:  | 
 | 156 | + | 
 | 157 | +```dockerfile  | 
 | 158 | +FROM alpine  | 
 | 159 | +ADD https://gitlab.com/example/todo-app.git /src  | 
 | 160 | +```  | 
 | 161 | + | 
 | 162 | +### HTTP authentication scheme  | 
 | 163 | + | 
 | 164 | +By default, Git authentication over HTTP uses the Bearer authentication scheme:  | 
 | 165 | + | 
 | 166 | +```http  | 
 | 167 | +Authorization: Bearer <GIT_AUTH_TOKEN>  | 
 | 168 | +```  | 
 | 169 | + | 
 | 170 | +If you need to use a Basic scheme, with a username and password, you can set  | 
 | 171 | +the `GIT_AUTH_HEADER` build secret:  | 
 | 172 | + | 
 | 173 | +```console  | 
 | 174 | +$ export GIT_AUTH_TOKEN=$(cat gitlab-token.txt)  | 
 | 175 | +$ export GIT_AUTH_HEADER=basic  | 
 | 176 | +$ docker build \  | 
 | 177 | +  --secret id=GIT_AUTH_TOKEN \  | 
 | 178 | +  --secret id=GIT_AUTH_HEADER \  | 
 | 179 | +  https://gitlab.com/example/todo-app.git  | 
 | 180 | +```  | 
 | 181 | + | 
 | 182 | +BuildKit currently only supports the Bearer and Basic schemes.  | 
 | 183 | + | 
 | 184 | +### Multiple hosts  | 
 | 185 | + | 
 | 186 | +You can set the `GIT_AUTH_TOKEN` and `GIT_AUTH_HEADER` secrets on a per-host  | 
 | 187 | +basis, which lets you use different authentication parameters for different  | 
 | 188 | +hostnames. To specify a hostname, append the hostname as a suffix to the secret  | 
 | 189 | +ID:  | 
 | 190 | + | 
 | 191 | +```console  | 
 | 192 | +$ export GITLAB_TOKEN=$(cat gitlab-token.txt)  | 
 | 193 | +$ export GERRIT_TOKEN=$(cat gerrit-username-password.txt)  | 
 | 194 | +$ export GERRIT_SCHEME=basic  | 
 | 195 | +$ docker build \  | 
 | 196 | +  --secret id=GIT_AUTH_TOKEN.gitlab.com,env=GITLAB_TOKEN \  | 
 | 197 | +  --secret id=GIT_AUTH_TOKEN.gerrit.internal.example,env=GERRIT_TOKEN \  | 
 | 198 | +  --secret id=GIT_AUTH_HEADER.gerrit.internal.example,env=GERRIT_SCHEME \  | 
 | 199 | +  https://gitlab.com/example/todo-app.git  | 
 | 200 | +```  | 
0 commit comments