Build stages and final images using each specified tag with the tagging strategy and push into
images repo.
Command combines ‘werf stages build’ and ‘werf images publish’.
After stages has been built, new docker layer with service info about tagging strategy will be
built for each tag of each image from werf.yaml. Images will be pushed into docker repo with the
names IMAGES_REPO/IMAGE_NAME:TAG.
The result of build-and-publish command is stages in stages storage and named images pushed into
the docker repo.
If one or more IMAGE_NAME parameters specified, werf will build images stages and publish only
these images from werf.yaml
Syntax
werf build-and-publish [IMAGE_NAME...] [options]
Examples
# Build and publish all images from werf.yaml into specified docker repo, built stages will be placed locally; tag images with the mytag tag using custom tagging strategy
$ werf build-and-publish --stages-storage :local --images-repo registry.mydomain.com/myproject --tag-custom mytag
# Build and publish all images from werf.yaml into minikube registry; tag images with the mybranch tag, using git-branch tagging strategy
$ werf build-and-publish --stages-storage :local --images-repo :minikube --tag-git-branch mybranch
# Build and publish with enabled drop-in shell session in the failed assembly container in the case when an error occurred
$ werf build-and-publish --stages-storage :local --introspect-error --images-repo :minikube --tag-git-branch mybranch
# Set --stages-storage default value using $WERF_STAGES_STORAGE param and --images-repo default value using $WERF_IMAGE_REPO param
$ export WERF_STAGES_STORAGE=:local
$ export WERF_IMAGES_REPO=myregistry.mydomain.com/myproject
$ werf build-and-publish --tag-git-tag v1.4.9
Environments
$WERF_DEBUG_ANSIBLE_ARGS Pass specified cli args to ansible ($ANSIBLE_ARGS)
Options
--allow-git-shallow-clone=false
Sign the intention of using shallow clone despite restrictions (default
$WERF_ALLOW_GIT_SHALLOW_CLONE)
--config=''
Use custom configuration file (default $WERF_CONFIG or werf.yaml in working directory)
--config-templates-dir=''
Change to the custom configuration templates directory (default
$WERF_CONFIG_TEMPLATES_DIR or .werf in working directory)
--dir=''
Use custom working directory (default $WERF_DIR or current directory)
--docker-config=''
Specify docker config directory path. Default $WERF_DOCKER_CONFIG or $DOCKER_CONFIG or
~/.docker (in the order of priority)
Command needs granted permissions to read, pull and push images into the specified
stages storage, to push images into the specified images repo, to pull base images
--git-unshallow=false
Convert project git clone to full one (default $WERF_GIT_UNSHALLOW)
-h, --help=false
help for build-and-publish
--home-dir=''
Use specified dir to store werf cache files and dirs (default $WERF_HOME or ~/.werf)
-i, --images-repo=''
Docker Repo to store images (default $WERF_IMAGES_REPO)
--images-repo-docker-hub-password=''
Docker Hub password for images repo (default $WERF_IMAGES_REPO_DOCKER_HUB_PASSWORD,
$WERF_REPO_DOCKER_HUB_PASSWORD)
--images-repo-docker-hub-token=''
Docker Hub token for images repo (default $WERF_IMAGES_REPO_DOCKER_HUB_TOKEN,
$WERF_REPO_DOCKER_HUB_TOKEN)
--images-repo-docker-hub-username=''
Docker Hub username for images repo (default $WERF_IMAGES_REPO_DOCKER_HUB_USERNAME,
$WERF_REPO_DOCKER_HUB_USERNAME)
--images-repo-github-token=''
GitHub token for images repo (default $WERF_IMAGES_REPO_GITHUB_TOKEN,
$WERF_REPO_GITHUB_TOKEN)
--images-repo-implementation=''
Choose repo implementation for images repo.
The following docker registry implementations are supported: ecr, acr, default,
dockerhub, gcr, github, gitlab, harbor, quay.
Default $WERF_IMAGES_REPO_IMPLEMENTATION, $WERF_REPO_IMPLEMENTATION or auto mode
(detect implementation by a registry).
--images-repo-mode='auto'
Define how to store in images repo: multirepo or monorepo.
Default $WERF_IMAGES_REPO_MODE or auto mode
--insecure-registry=false
Use plain HTTP requests when accessing a registry (default $WERF_INSECURE_REGISTRY)
--introspect-before-error=false
Introspect failed stage in the clean state, before running all assembly instructions of
the stage
--introspect-error=false
Introspect failed stage in the state, right after running failed assembly instruction
--introspect-stage=[]
Introspect a specific stage. The option can be used multiple times to introspect
several stages.
There are the following formats to use:
* specify IMAGE_NAME/STAGE_NAME to introspect stage STAGE_NAME of either image or
artifact IMAGE_NAME
* specify STAGE_NAME or */STAGE_NAME for the introspection of all existing stages with
name STAGE_NAME
IMAGE_NAME is the name of an image or artifact described in werf.yaml, the nameless
image specified with ~.
STAGE_NAME should be one of the following: from, beforeInstall, importsBeforeInstall,
gitArchive, install, importsAfterInstall, beforeSetup, importsBeforeSetup, setup,
importsAfterSetup, gitCache, gitLatestPatch, dockerInstructions, dockerfile
--kube-config=''
Kubernetes config file path (default $WERF_KUBE_CONFIG, or $WERF_KUBECONFIG, or
$KUBECONFIG)
--kube-config-base64=''
Kubernetes config data as base64 string (default $WERF_KUBE_CONFIG_BASE64 or
$WERF_KUBECONFIG_BASE64 or $KUBECONFIG_BASE64)
--kube-context=''
Kubernetes config context (default $WERF_KUBE_CONTEXT)
--log-color-mode='auto'
Set log color mode.
Supported on, off and auto (based on the stdout’s file descriptor referring to a
terminal) modes.
Default $WERF_LOG_COLOR_MODE or auto mode.
--log-debug=false
Enable debug (default $WERF_LOG_DEBUG).
--log-pretty=true
Enable emojis, auto line wrapping and log process border (default $WERF_LOG_PRETTY or
true).
--log-project-dir=false
Print current project directory path (default $WERF_LOG_PROJECT_DIR)
--log-quiet=false
Disable explanatory output (default $WERF_LOG_QUIET).
--log-terminal-width=-1
Set log terminal width.
Defaults to:
* $WERF_LOG_TERMINAL_WIDTH
* interactive terminal width or 140
--log-verbose=false
Enable verbose output (default $WERF_LOG_VERBOSE).
-p, --parallel=true
Run in parallel (default $WERF_PARALLEL)
--parallel-tasks-limit=5
Parallel tasks limit, set -1 to remove the limitation (default
$WERF_PARALLEL_TASKS_LIMIT or 5)
--publish-report-format='json'
Publish report format (only json available for now, $WERF_PUBLISH_REPORT_FORMAT by
default)
--publish-report-path=''
Publish report contains image info: full docker repo, tag, ID — for each published
image ($WERF_PUBLISH_REPORT_PATH by default)
--repo-docker-hub-password=''
Common Docker Hub password for any stages storage or images repo specified for the
command (default $WERF_REPO_DOCKER_HUB_PASSWORD)
--repo-docker-hub-token=''
Common Docker Hub token for any stages storage or images repo specified for the command
(default $WERF_REPO_DOCKER_HUB_TOKEN)
--repo-docker-hub-username=''
Common Docker Hub username for any stages storage or images repo specified for the
command (default $WERF_REPO_DOCKER_HUB_USERNAME)
--repo-github-token=''
Common GitHub token for any stages storage or images repo specified for the command
(default $WERF_REPO_GITHUB_TOKEN)
--repo-implementation=''
Choose common repo implementation for any stages storage or images repo specified for
the command.
The following docker registry implementations are supported: ecr, acr, default,
dockerhub, gcr, github, gitlab, harbor, quay.
Default $WERF_REPO_IMPLEMENTATION or auto mode (detect implementation by a registry).
--skip-tls-verify-registry=false
Skip TLS certificate validation when accessing a registry (default
$WERF_SKIP_TLS_VERIFY_REGISTRY)
--ssh-key=[]
Use only specific ssh key(s).
Can be specified with $WERF_SSH_KEY_* (e.g. $WERF_SSH_KEY_REPO=~/.ssh/repo_rsa",
$WERF_SSH_KEY_NODEJS=~/.ssh/nodejs_rsa").
Defaults to $WERF_SSH_KEY_*, system ssh-agent or ~/.ssh/{id_rsa|id_dsa}
-s, --stages-storage=''
Docker Repo to store stages or :local for non-distributed build (only :local is
supported for now; default $WERF_STAGES_STORAGE environment)
--stages-storage-repo-docker-hub-password=''
Docker Hub password for stages storage (default
$WERF_STAGES_STORAGE_REPO_DOCKER_HUB_PASSWORD, $WERF_REPO_DOCKER_HUB_PASSWORD)
--stages-storage-repo-docker-hub-token=''
Docker Hub token for stages storage (default
$WERF_STAGES_STORAGE_REPO_DOCKER_HUB_TOKEN, $WERF_REPO_DOCKER_HUB_TOKEN)
--stages-storage-repo-docker-hub-username=''
Docker Hub username for stages storage (default
$WERF_STAGES_STORAGE_REPO_DOCKER_HUB_USERNAME, $WERF_REPO_DOCKER_HUB_USERNAME)
--stages-storage-repo-github-token=''
GitHub token for stages storage (default $WERF_STAGES_STORAGE_REPO_GITHUB_TOKEN,
$WERF_REPO_GITHUB_TOKEN)
--stages-storage-repo-implementation=''
Choose repo implementation for stages storage.
The following docker registry implementations are supported: ecr, acr, default,
dockerhub, gcr, github, gitlab, harbor, quay.
Default $WERF_STAGES_STORAGE_REPO_IMPLEMENTATION, $WERF_REPO_IMPLEMENTATION or auto
mode (detect implementation by a registry).
-S, --synchronization=''
Address of synchronizer for multiple werf processes to work with a single stages
storage (default :local if --stages-storage=:local or kubernetes://werf-synchronization
if non-local stages-storage specified or $WERF_SYNCHRONIZATION if set). The same
address should be specified for all werf processes that work with a single stages
storage. :local address allows execution of werf processes from a single host only.
--tag-by-stages-signature=false
Use stages-signature tagging strategy and tag each image by the corresponding signature
of last image stage (option can be enabled by specifying
$WERF_TAG_BY_STAGES_SIGNATURE=true)
--tag-custom=[]
Use custom tagging strategy and tag by the specified arbitrary tags.
Option can be used multiple times to produce multiple images with the specified tags.
Also can be specified in $WERF_TAG_CUSTOM_* (e.g. $WERF_TAG_CUSTOM_TAG1=tag1,
$WERF_TAG_CUSTOM_TAG2=tag2)
--tag-git-branch=''
Use git-branch tagging strategy and tag by the specified git branch (option can be
enabled by specifying git branch in the $WERF_TAG_GIT_BRANCH)
--tag-git-commit=''
Use git-commit tagging strategy and tag by the specified git commit hash (option can be
enabled by specifying git commit hash in the $WERF_TAG_GIT_COMMIT)
--tag-git-tag=''
Use git-tag tagging strategy and tag by the specified git tag (option can be enabled by
specifying git tag in the $WERF_TAG_GIT_TAG)
--tmp-dir=''
Use specified dir to store tmp files and dirs (default $WERF_TMP_DIR or system tmp dir)
--virtual-merge=false
Enable virtual/ephemeral merge commit mode when building current application state
($WERF_VIRTUAL_MERGE by default)
--virtual-merge-from-commit=''
Commit hash for virtual/ephemeral merge commit with new changes introduced in the pull
request ($WERF_VIRTUAL_MERGE_FROM_COMMIT by default)
--virtual-merge-into-commit=''
Commit hash for virtual/ephemeral merge commit which is base for changes introduced in
the pull request ($WERF_VIRTUAL_MERGE_INTO_COMMIT by default)