add webhooks examples

Signed-off-by: LRubin <lrubin@docker.com>
This commit is contained in:
LRubin 2016-10-10 16:04:57 -07:00
parent 232043cfa6
commit 25d65e7c45
1 changed files with 54 additions and 8 deletions

View File

@ -40,6 +40,21 @@ sut:
environment:
- SOURCE_BRANCH
```
## Override build, test or push commands
Docker Cloud allows you to override and customize the `build`, `test` and `push`
commands during automated build and test processes using hooks. For example, you
might use a build hook to set build arguments used only during the build
process. (You can also set up [custom build phase hooks](#custom-build-phase-hooks) to perform actions in between these commands.)
**Use these hooks with caution.** The contents of these hook files replace the
basic `docker` commands, so you must include a similar build, test or push
command in the hook or your automated process will not complete.
To override these phases, create a folder called `hooks` in your source code
repository at the same directory level as your Dockerfile. Create a file called
`hooks/build`, `hooks/test`, or `hooks/push` and include commands that the
builder process can execute, such as `docker` and `bash` commands (prefixed appropriately with `#!/bin/bash`).
## Custom build phase hooks
@ -49,7 +64,7 @@ autotest processes.
Create a folder called `hooks` in your source code repository at the same
directory level as your Dockerfile. Place files that define the hooks in that
folder. The builder executes them before and after each step.
folder. Hook files can include both `docker` commands, and `bash` commands as long as they are prefixed appropriately with `#!/bin/bash`. The builder executes the commands in the files before and after each step.
The following hooks are available:
@ -61,13 +76,44 @@ The following hooks are available:
* `hooks/pre_push` (only used when executing a build rule or [automated build](automated-build.md) )
* `hooks/post_push` (only used when executing a build rule or [automated build](automated-build.md) )
### Build hook examples
## Override build, test or push commands
#### Override the "build" phase to set variables
In addition to the custom build phase hooks above, you can also use
`hooks/build`, `hooks/test`, and `hooks/push` to override and customize the
`build`, `test` and `push` commands during automated build and test processes.
Docker Cloud allows you to define build environment variables in the UI which you can then reference in hooks.
**Use these hooks with caution.** The contents of these hook files replace the
basic `docker` commands, so you must include a similar build, test or push
command in the hook or your automated process will not complete.
In the following example, we define a build hook that uses `docker build` arguments to set the variable `CUSTOM` based on the value of variable we defined using the Docker Cloud build settings. `$IMAGE_NAME` is a variable that we provide with the name of the image being built.
```none
docker build --build-arg CUSTOM=$VAR -t $IMAGE_NAME
```
> **Caution**: A `hooks/build` file overrides the basic `docker build` command
used by the builder, so you must include a similar build command in the hook or
the automated build will fail.
To learn more about Docker build-time variables, see the [docker build documentation]( https://docs.docker.com/engine/reference/commandline/build/#/set-build-time-variables---build-arg).
#### Two-phase build
If your build process requires a component that is not a dependency for your application, you can use a `pre-build` hook to collect and compile required components. In the example below, the hook uses a Docker container to compile a Golang binary required before the build.
```bash
#!/bin/bash
echo "=> Building the binary"
docker run --privileged \
-v $(pwd):/src \
-v /var/run/docker.sock:/var/run/docker.sock \
centurylink/golang-builder
```
#### Push to multiple tags
By default the build process tags the resulting Docker image with a single tag and pushes the image only to the repository where the build settings are configured.
If you needed to give the resulting image multiple tags, or push the same image to multiple repositories, you could set up a `post_push` hook to add additional tags and push to more repositories.
```none
docker tag $IMAGE_NAME $DOCKER_REPO:$SOURCE_COMMIT
docker push $DOCKER_REPO:$SOURCE_COMMIT
```