github.com/GoogleContainerTools/skaffold@v1.39.18/pkg/skaffold/schema/v2alpha3/config.go (about) 1 /* 2 Copyright 2019 The Skaffold Authors 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package v2alpha3 18 19 import ( 20 v1 "k8s.io/api/core/v1" 21 22 "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/util" 23 ) 24 25 // !!! WARNING !!! This config version is already released, please DO NOT MODIFY the structs in this file. 26 const Version string = "skaffold/v2alpha3" 27 28 // NewSkaffoldConfig creates a SkaffoldConfig 29 func NewSkaffoldConfig() util.VersionedConfig { 30 return new(SkaffoldConfig) 31 } 32 33 // SkaffoldConfig holds the fields parsed from the Skaffold configuration file (skaffold.yaml). 34 type SkaffoldConfig struct { 35 // APIVersion is the version of the configuration. 36 APIVersion string `yaml:"apiVersion" yamltags:"required"` 37 38 // Kind is always `Config`. Defaults to `Config`. 39 Kind string `yaml:"kind" yamltags:"required"` 40 41 // Metadata holds additional information about the config. 42 Metadata Metadata `yaml:"metadata,omitempty"` 43 44 // Pipeline defines the Build/Test/Deploy phases. 45 Pipeline `yaml:",inline"` 46 47 // Profiles *beta* can override be used to `build`, `test` or `deploy` configuration. 48 Profiles []Profile `yaml:"profiles,omitempty"` 49 } 50 51 // Metadata holds an optional name of the project. 52 type Metadata struct { 53 // Name is an identifier for the project. 54 Name string `yaml:"name,omitempty"` 55 } 56 57 // Pipeline describes a Skaffold pipeline. 58 type Pipeline struct { 59 // Build describes how images are built. 60 Build BuildConfig `yaml:"build,omitempty"` 61 62 // Test describes how images are tested. 63 Test []*TestCase `yaml:"test,omitempty"` 64 65 // Deploy describes how images are deployed. 66 Deploy DeployConfig `yaml:"deploy,omitempty"` 67 68 // PortForward describes user defined resources to port-forward. 69 PortForward []*PortForwardResource `yaml:"portForward,omitempty"` 70 } 71 72 func (c *SkaffoldConfig) GetVersion() string { 73 return c.APIVersion 74 } 75 76 // ResourceType describes the Kubernetes resource types used for port forwarding. 77 type ResourceType string 78 79 // PortForwardResource describes a resource to port forward. 80 type PortForwardResource struct { 81 // Type is the Kubernetes type that should be port forwarded. 82 // Acceptable resource types include: `Service`, `Pod` and Controller resource type that has a pod spec: `ReplicaSet`, `ReplicationController`, `Deployment`, `StatefulSet`, `DaemonSet`, `Job`, `CronJob`. 83 Type ResourceType `yaml:"resourceType,omitempty"` 84 85 // Name is the name of the Kubernetes resource to port forward. 86 Name string `yaml:"resourceName,omitempty"` 87 88 // Namespace is the namespace of the resource to port forward. 89 Namespace string `yaml:"namespace,omitempty"` 90 91 // Port is the resource port that will be forwarded. 92 Port int `yaml:"port,omitempty"` 93 94 // Address is the local address to bind to. Defaults to the loopback address 127.0.0.1. 95 Address string `yaml:"address,omitempty"` 96 97 // LocalPort is the local port to forward to. If the port is unavailable, Skaffold will choose a random open port to forward to. *Optional*. 98 LocalPort int `yaml:"localPort,omitempty"` 99 } 100 101 // BuildConfig contains all the configuration for the build steps. 102 type BuildConfig struct { 103 // Artifacts lists the images you're going to be building. 104 Artifacts []*Artifact `yaml:"artifacts,omitempty"` 105 106 // InsecureRegistries is a list of registries declared by the user to be insecure. 107 // These registries will be connected to via HTTP instead of HTTPS. 108 InsecureRegistries []string `yaml:"insecureRegistries,omitempty"` 109 110 // TagPolicy *beta* determines how images are tagged. 111 // A few strategies are provided here, although you most likely won't need to care! 112 // If not specified, it defaults to `gitCommit: {variant: Tags}`. 113 TagPolicy TagPolicy `yaml:"tagPolicy,omitempty"` 114 115 BuildType `yaml:",inline"` 116 } 117 118 // TagPolicy contains all the configuration for the tagging step. 119 type TagPolicy struct { 120 // GitTagger *beta* tags images with the git tag or commit of the artifact's workspace. 121 GitTagger *GitTagger `yaml:"gitCommit,omitempty" yamltags:"oneOf=tag"` 122 123 // ShaTagger *beta* tags images with their sha256 digest. 124 ShaTagger *ShaTagger `yaml:"sha256,omitempty" yamltags:"oneOf=tag"` 125 126 // EnvTemplateTagger *beta* tags images with a configurable template string. 127 EnvTemplateTagger *EnvTemplateTagger `yaml:"envTemplate,omitempty" yamltags:"oneOf=tag"` 128 129 // DateTimeTagger *beta* tags images with the build timestamp. 130 DateTimeTagger *DateTimeTagger `yaml:"dateTime,omitempty" yamltags:"oneOf=tag"` 131 } 132 133 // ShaTagger *beta* tags images with their sha256 digest. 134 type ShaTagger struct{} 135 136 // GitTagger *beta* tags images with the git tag or commit of the artifact's workspace. 137 type GitTagger struct { 138 // Variant determines the behavior of the git tagger. Valid variants are 139 // `Tags` (default): use git tags or fall back to abbreviated commit hash. 140 // `CommitSha`: use the full git commit sha. 141 // `AbbrevCommitSha`: use the abbreviated git commit sha. 142 // `TreeSha`: use the full tree hash of the artifact workingdir. 143 // `AbbrevTreeSha`: use the abbreviated tree hash of the artifact workingdir. 144 Variant string `yaml:"variant,omitempty"` 145 } 146 147 // EnvTemplateTagger *beta* tags images with a configurable template string. 148 type EnvTemplateTagger struct { 149 // Template used to produce the image name and tag. 150 // See golang [text/template](https://golang.org/pkg/text/template/). 151 // The template is executed against the current environment, 152 // with those variables injected: 153 // IMAGE_NAME | Name of the image being built, as supplied in the artifacts section. 154 // For example: `{{.RELEASE}}-{{.IMAGE_NAME}}`. 155 Template string `yaml:"template,omitempty" yamltags:"required"` 156 } 157 158 // DateTimeTagger *beta* tags images with the build timestamp. 159 type DateTimeTagger struct { 160 // Format formats the date and time. 161 // See [#Time.Format](https://golang.org/pkg/time/#Time.Format). 162 // Defaults to `2006-01-02_15-04-05.999_MST`. 163 Format string `yaml:"format,omitempty"` 164 165 // TimeZone sets the timezone for the date and time. 166 // See [Time.LoadLocation](https://golang.org/pkg/time/#Time.LoadLocation). 167 // Defaults to the local timezone. 168 TimeZone string `yaml:"timezone,omitempty"` 169 } 170 171 // BuildType contains the specific implementation and parameters needed 172 // for the build step. Only one field should be populated. 173 type BuildType struct { 174 // LocalBuild *beta* describes how to do a build on the local docker daemon 175 // and optionally push to a repository. 176 LocalBuild *LocalBuild `yaml:"local,omitempty" yamltags:"oneOf=build"` 177 178 // GoogleCloudBuild *beta* describes how to do a remote build on 179 // [Google Cloud Build](https://cloud.google.com/cloud-build/). 180 GoogleCloudBuild *GoogleCloudBuild `yaml:"googleCloudBuild,omitempty" yamltags:"oneOf=build"` 181 182 // Cluster *beta* describes how to do an on-cluster build. 183 Cluster *ClusterDetails `yaml:"cluster,omitempty" yamltags:"oneOf=build"` 184 } 185 186 // LocalBuild *beta* describes how to do a build on the local docker daemon 187 // and optionally push to a repository. 188 type LocalBuild struct { 189 // Push should images be pushed to a registry. 190 // If not specified, images are pushed only if the current Kubernetes context 191 // connects to a remote cluster. 192 Push *bool `yaml:"push,omitempty"` 193 194 // UseDockerCLI use `docker` command-line interface instead of Docker Engine APIs. 195 UseDockerCLI bool `yaml:"useDockerCLI,omitempty"` 196 197 // UseBuildkit use BuildKit to build Docker images. If unspecified, uses the Docker default. 198 UseBuildkit *bool `yaml:"useBuildkit,omitempty"` 199 200 // Concurrency is how many artifacts can be built concurrently. 0 means "no-limit". 201 // Defaults to `1`. 202 Concurrency *int `yaml:"concurrency,omitempty"` 203 } 204 205 // GoogleCloudBuild *beta* describes how to do a remote build on 206 // [Google Cloud Build](https://cloud.google.com/cloud-build/docs/). 207 // Docker and Jib artifacts can be built on Cloud Build. The `projectId` needs 208 // to be provided and the currently logged in user should be given permissions to trigger 209 // new builds. 210 type GoogleCloudBuild struct { 211 // ProjectID is the ID of your Cloud Platform Project. 212 // If it is not provided, Skaffold will guess it from the image name. 213 // For example, given the artifact image name `gcr.io/myproject/image`, Skaffold 214 // will use the `myproject` GCP project. 215 ProjectID string `yaml:"projectId,omitempty"` 216 217 // DiskSizeGb is the disk size of the VM that runs the build. 218 // See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions). 219 DiskSizeGb int64 `yaml:"diskSizeGb,omitempty"` 220 221 // MachineType is the type of the VM that runs the build. 222 // See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions). 223 MachineType string `yaml:"machineType,omitempty"` 224 225 // Timeout is the amount of time (in seconds) that this build should be allowed to run. 226 // See [Cloud Build Reference](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#resource-build). 227 Timeout string `yaml:"timeout,omitempty"` 228 229 // DockerImage is the image that runs a Docker build. 230 // See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders). 231 // Defaults to `gcr.io/cloud-builders/docker`. 232 DockerImage string `yaml:"dockerImage,omitempty"` 233 234 // KanikoImage is the image that runs a Kaniko build. 235 // See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders). 236 // Defaults to `gcr.io/kaniko-project/executor`. 237 KanikoImage string `yaml:"kanikoImage,omitempty"` 238 239 // MavenImage is the image that runs a Maven build. 240 // See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders). 241 // Defaults to `gcr.io/cloud-builders/mvn`. 242 MavenImage string `yaml:"mavenImage,omitempty"` 243 244 // GradleImage is the image that runs a Gradle build. 245 // See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders). 246 // Defaults to `gcr.io/cloud-builders/gradle`. 247 GradleImage string `yaml:"gradleImage,omitempty"` 248 249 // PackImage is the image that runs a Cloud Native Buildpacks build. 250 // See [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders). 251 // Defaults to `gcr.io/k8s-skaffold/pack`. 252 PackImage string `yaml:"packImage,omitempty"` 253 254 // Concurrency is how many artifacts can be built concurrently. 0 means "no-limit". 255 // Defaults to `0`. 256 Concurrency int `yaml:"concurrency,omitempty"` 257 } 258 259 // KanikoCache configures Kaniko caching. If a cache is specified, Kaniko will 260 // use a remote cache which will speed up builds. 261 type KanikoCache struct { 262 // Repo is a remote repository to store cached layers. If none is specified, one will be 263 // inferred from the image name. See [Kaniko Caching](https://github.com/GoogleContainerTools/kaniko#caching). 264 Repo string `yaml:"repo,omitempty"` 265 // HostPath specifies a path on the host that is mounted to each pod as read only cache volume containing base images. 266 // If set, must exist on each node and prepopulated with kaniko-warmer. 267 HostPath string `yaml:"hostPath,omitempty"` 268 } 269 270 // ClusterDetails *beta* describes how to do an on-cluster build. 271 type ClusterDetails struct { 272 // HTTPProxy for kaniko pod. 273 HTTPProxy string `yaml:"HTTP_PROXY,omitempty"` 274 275 // HTTPSProxy for kaniko pod. 276 HTTPSProxy string `yaml:"HTTPS_PROXY,omitempty"` 277 278 // PullSecret is the path to the Google Cloud service account secret key file. 279 PullSecret string `yaml:"pullSecret,omitempty"` 280 281 // PullSecretName is the name of the Kubernetes secret for pulling base images 282 // and pushing the final image. If given, the secret needs to contain the Google Cloud 283 // service account secret key under the key `kaniko-secret`. 284 // Defaults to `kaniko-secret`. 285 PullSecretName string `yaml:"pullSecretName,omitempty"` 286 287 // PullSecretMountPath is the path the pull secret will be mounted at within the running container. 288 PullSecretMountPath string `yaml:"pullSecretMountPath,omitempty"` 289 290 // Namespace is the Kubernetes namespace. 291 // Defaults to current namespace in Kubernetes configuration. 292 Namespace string `yaml:"namespace,omitempty"` 293 294 // Timeout is the amount of time (in seconds) that this build is allowed to run. 295 // Defaults to 20 minutes (`20m`). 296 Timeout string `yaml:"timeout,omitempty"` 297 298 // DockerConfig describes how to mount the local Docker configuration into a pod. 299 DockerConfig *DockerConfig `yaml:"dockerConfig,omitempty"` 300 301 // Resources define the resource requirements for the kaniko pod. 302 Resources *ResourceRequirements `yaml:"resources,omitempty"` 303 304 // Concurrency is how many artifacts can be built concurrently. 0 means "no-limit". 305 // Defaults to `0`. 306 Concurrency int `yaml:"concurrency,omitempty"` 307 308 // Volumes defines container mounts for ConfigMap and Secret resources. 309 Volumes []v1.Volume `yaml:"volumes,omitempty"` 310 311 // RandomPullSecret adds a random UUID postfix to the default name of the pull secret to facilitate parallel builds, e.g. kaniko-secretdocker-cfgfd154022-c761-416f-8eb3-cf8258450b85. 312 RandomPullSecret bool `yaml:"randomPullSecret,omitempty"` 313 314 // RandomDockerConfigSecret adds a random UUID postfix to the default name of the docker secret to facilitate parallel builds, e.g. docker-cfgfd154022-c761-416f-8eb3-cf8258450b85. 315 RandomDockerConfigSecret bool `yaml:"randomDockerConfigSecret,omitempty"` 316 } 317 318 // DockerConfig contains information about the docker `config.json` to mount. 319 type DockerConfig struct { 320 // Path is the path to the docker `config.json`. 321 Path string `yaml:"path,omitempty"` 322 323 // SecretName is the Kubernetes secret that contains the `config.json` Docker configuration. 324 // Note that the expected secret type is not 'kubernetes.io/dockerconfigjson' but 'Opaque'. 325 SecretName string `yaml:"secretName,omitempty"` 326 } 327 328 // ResourceRequirements describes the resource requirements for the kaniko pod. 329 type ResourceRequirements struct { 330 // Requests [resource requests](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) for the Kaniko pod. 331 Requests *ResourceRequirement `yaml:"requests,omitempty"` 332 333 // Limits [resource limits](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) for the Kaniko pod. 334 Limits *ResourceRequirement `yaml:"limits,omitempty"` 335 } 336 337 // ResourceRequirement stores the CPU/Memory requirements for the pod. 338 type ResourceRequirement struct { 339 // CPU the number cores to be used. 340 // For example: `2`, `2.0` or `200m`. 341 CPU string `yaml:"cpu,omitempty"` 342 343 // Memory the amount of memory to allocate to the pod. 344 // For example: `1Gi` or `1000Mi`. 345 Memory string `yaml:"memory,omitempty"` 346 347 // EphemeralStorage the amount of Ephemeral storage to allocate to the pod. 348 // For example: `1Gi` or `1000Mi`. 349 EphemeralStorage string `yaml:"ephemeralStorage,omitempty"` 350 351 // ResourceStorage the amount of resource storage to allocate to the pod. 352 // For example: `1Gi` or `1000Mi`. 353 ResourceStorage string `yaml:"resourceStorage,omitempty"` 354 } 355 356 // TestCase is a list of structure tests to run on images that Skaffold builds. 357 type TestCase struct { 358 // ImageName is the artifact on which to run those tests. 359 // For example: `gcr.io/k8s-skaffold/example`. 360 ImageName string `yaml:"image" yamltags:"required"` 361 362 // StructureTests lists the [Container Structure Tests](https://github.com/GoogleContainerTools/container-structure-test) 363 // to run on that artifact. 364 // For example: `["./test/*"]`. 365 StructureTests []string `yaml:"structureTests,omitempty"` 366 } 367 368 // DeployConfig contains all the configuration needed by the deploy steps. 369 type DeployConfig struct { 370 DeployType `yaml:",inline"` 371 372 // StatusCheckDeadlineSeconds *beta* is the deadline for deployments to stabilize in seconds. 373 StatusCheckDeadlineSeconds int `yaml:"statusCheckDeadlineSeconds,omitempty"` 374 375 // KubeContext is the Kubernetes context that Skaffold should deploy to. 376 // For example: `minikube`. 377 KubeContext string `yaml:"kubeContext,omitempty"` 378 } 379 380 // DeployType contains the specific implementation and parameters needed 381 // for the deploy step. All three deployer types can be used at the same 382 // time for hybrid workflows. 383 type DeployType struct { 384 // HelmDeploy *beta* uses the `helm` CLI to apply the charts to the cluster. 385 HelmDeploy *HelmDeploy `yaml:"helm,omitempty"` 386 387 // KubectlDeploy *beta* uses a client side `kubectl apply` to deploy manifests. 388 // You'll need a `kubectl` CLI version installed that's compatible with your cluster. 389 KubectlDeploy *KubectlDeploy `yaml:"kubectl,omitempty"` 390 391 // KustomizeDeploy *beta* uses the `kustomize` CLI to "patch" a deployment for a target environment. 392 KustomizeDeploy *KustomizeDeploy `yaml:"kustomize,omitempty"` 393 } 394 395 // KubectlDeploy *beta* uses a client side `kubectl apply` to deploy manifests. 396 // You'll need a `kubectl` CLI version installed that's compatible with your cluster. 397 type KubectlDeploy struct { 398 // Manifests lists the Kubernetes yaml or json manifests. 399 // Defaults to `["k8s/*.yaml"]`. 400 Manifests []string `yaml:"manifests,omitempty"` 401 402 // RemoteManifests lists Kubernetes manifests in remote clusters. 403 RemoteManifests []string `yaml:"remoteManifests,omitempty"` 404 405 // Flags are additional flags passed to `kubectl`. 406 Flags KubectlFlags `yaml:"flags,omitempty"` 407 } 408 409 // KubectlFlags are additional flags passed on the command 410 // line to kubectl either on every command (Global), on creations (Apply) 411 // or deletions (Delete). 412 type KubectlFlags struct { 413 // Global are additional flags passed on every command. 414 Global []string `yaml:"global,omitempty"` 415 416 // Apply are additional flags passed on creations (`kubectl apply`). 417 Apply []string `yaml:"apply,omitempty"` 418 419 // Delete are additional flags passed on deletions (`kubectl delete`). 420 Delete []string `yaml:"delete,omitempty"` 421 422 // DisableValidation passes the `--validate=false` flag to supported 423 // `kubectl` commands when enabled. 424 DisableValidation bool `yaml:"disableValidation,omitempty"` 425 } 426 427 // HelmDeploy *beta* uses the `helm` CLI to apply the charts to the cluster. 428 type HelmDeploy struct { 429 // Releases is a list of Helm releases. 430 Releases []HelmRelease `yaml:"releases,omitempty" yamltags:"required"` 431 432 // Flags are additional option flags that are passed on the command 433 // line to `helm`. 434 Flags HelmDeployFlags `yaml:"flags,omitempty"` 435 } 436 437 // HelmDeployFlags are additional option flags that are passed on the command 438 // line to `helm`. 439 type HelmDeployFlags struct { 440 // Global are additional flags passed on every command. 441 Global []string `yaml:"global,omitempty"` 442 443 // Install are additional flags passed to (`helm install`). 444 Install []string `yaml:"install,omitempty"` 445 446 // Upgrade are additional flags passed to (`helm upgrade`). 447 Upgrade []string `yaml:"upgrade,omitempty"` 448 } 449 450 // KustomizeDeploy *beta* uses the `kustomize` CLI to "patch" a deployment for a target environment. 451 type KustomizeDeploy struct { 452 // KustomizePaths is the path to Kustomization files. 453 // Defaults to `["."]`. 454 KustomizePaths []string `yaml:"paths,omitempty"` 455 456 // Flags are additional flags passed to `kubectl`. 457 Flags KubectlFlags `yaml:"flags,omitempty"` 458 459 // BuildArgs are additional args passed to `kustomize build`. 460 BuildArgs []string `yaml:"buildArgs,omitempty"` 461 } 462 463 // HelmRelease describes a helm release to be deployed. 464 type HelmRelease struct { 465 // Name is the name of the Helm release. 466 Name string `yaml:"name,omitempty" yamltags:"required"` 467 468 // ChartPath is the path to the Helm chart. 469 ChartPath string `yaml:"chartPath,omitempty" yamltags:"required"` 470 471 // ValuesFiles are the paths to the Helm `values` files. 472 ValuesFiles []string `yaml:"valuesFiles,omitempty"` 473 474 // Values are key-value pairs supplementing the Helm `values` file. 475 Values map[string]string `yaml:"values,omitempty,omitempty"` 476 477 // Namespace is the Kubernetes namespace. 478 Namespace string `yaml:"namespace,omitempty"` 479 480 // Version is the version of the chart. 481 Version string `yaml:"version,omitempty"` 482 483 // SetValues are key-value pairs. 484 // If present, Skaffold will send `--set` flag to Helm CLI and append all pairs after the flag. 485 SetValues map[string]string `yaml:"setValues,omitempty"` 486 487 // SetValueTemplates are key-value pairs. 488 // If present, Skaffold will try to parse the value part of each key-value pair using 489 // environment variables in the system, then send `--set` flag to Helm CLI and append 490 // all parsed pairs after the flag. 491 SetValueTemplates map[string]string `yaml:"setValueTemplates,omitempty"` 492 493 // SetFiles are key-value pairs. 494 // If present, Skaffold will send `--set-file` flag to Helm CLI and append all pairs after the flag. 495 SetFiles map[string]string `yaml:"setFiles,omitempty"` 496 497 // Wait if `true`, Skaffold will send `--wait` flag to Helm CLI. 498 // Defaults to `false`. 499 Wait bool `yaml:"wait,omitempty"` 500 501 // RecreatePods if `true`, Skaffold will send `--recreate-pods` flag to Helm CLI 502 // when upgrading a new version of a chart in subsequent dev loop deploy. 503 // Defaults to `false`. 504 RecreatePods bool `yaml:"recreatePods,omitempty"` 505 506 // SkipBuildDependencies should build dependencies be skipped. 507 SkipBuildDependencies bool `yaml:"skipBuildDependencies,omitempty"` 508 509 // UseHelmSecrets instructs skaffold to use secrets plugin on deployment. 510 UseHelmSecrets bool `yaml:"useHelmSecrets,omitempty"` 511 512 // Remote specifies whether the chart path is remote, or exists on the host filesystem. 513 // `remote: true` implies `skipBuildDependencies: true`. 514 Remote bool `yaml:"remote,omitempty"` 515 516 // Overrides are key-value pairs. 517 // If present, Skaffold will build a Helm `values` file that overrides 518 // the original and use it to call Helm CLI (`--f` flag). 519 Overrides util.HelmOverrides `yaml:"overrides,omitempty"` 520 521 // Packaged parameters for packaging helm chart (`helm package`). 522 Packaged *HelmPackaged `yaml:"packaged,omitempty"` 523 524 // ImageStrategy adds image configurations to the Helm `values` file. 525 ImageStrategy HelmImageStrategy `yaml:"imageStrategy,omitempty"` 526 } 527 528 // HelmPackaged parameters for packaging helm chart (`helm package`). 529 type HelmPackaged struct { 530 // Version sets the `version` on the chart to this semver version. 531 Version string `yaml:"version,omitempty"` 532 533 // AppVersion sets the `appVersion` on the chart to this version. 534 AppVersion string `yaml:"appVersion,omitempty"` 535 } 536 537 // HelmImageStrategy adds image configurations to the Helm `values` file. 538 type HelmImageStrategy struct { 539 HelmImageConfig `yaml:",inline"` 540 } 541 542 // HelmImageConfig describes an image configuration. 543 type HelmImageConfig struct { 544 // HelmFQNConfig is the image configuration uses the syntax `IMAGE-NAME=IMAGE-REPOSITORY:IMAGE-TAG`. 545 HelmFQNConfig *HelmFQNConfig `yaml:"fqn,omitempty" yamltags:"oneOf=helmImageStrategy"` 546 547 // HelmConventionConfig is the image configuration uses the syntax `IMAGE-NAME.repository=IMAGE-REPOSITORY, IMAGE-NAME.tag=IMAGE-TAG`. 548 HelmConventionConfig *HelmConventionConfig `yaml:"helm,omitempty" yamltags:"oneOf=helmImageStrategy"` 549 } 550 551 // HelmFQNConfig is the image config to use the FullyQualifiedImageName as param to set. 552 type HelmFQNConfig struct { 553 // Property defines the image config. 554 Property string `yaml:"property,omitempty"` 555 } 556 557 // HelmConventionConfig is the image config in the syntax of image.repository and image.tag. 558 type HelmConventionConfig struct { 559 // ExplicitRegistry separates `image.registry` to the image config syntax. Useful for some charts e.g. `postgresql`. 560 ExplicitRegistry bool `yaml:"explicitRegistry,omitempty"` 561 } 562 563 // Artifact are the items that need to be built, along with the context in which 564 // they should be built. 565 type Artifact struct { 566 // ImageName is the name of the image to be built. 567 // For example: `gcr.io/k8s-skaffold/example`. 568 ImageName string `yaml:"image,omitempty" yamltags:"required"` 569 570 // Workspace is the directory containing the artifact's sources. 571 // Defaults to `.`. 572 Workspace string `yaml:"context,omitempty"` 573 574 // Sync *beta* lists local files synced to pods instead 575 // of triggering an image build when modified. 576 // If no files are listed, sync all the files and infer the destination. 577 // Defaults to `infer: ["**/*"]`. 578 Sync *Sync `yaml:"sync,omitempty"` 579 580 // ArtifactType describes how to build an artifact. 581 ArtifactType `yaml:",inline"` 582 } 583 584 // Sync *beta* specifies what files to sync into the container. 585 // This is a list of sync rules indicating the intent to sync for source files. 586 // If no files are listed, sync all the files and infer the destination. 587 // Defaults to `infer: ["**/*"]`. 588 type Sync struct { 589 // Manual lists manual sync rules indicating the source and destination. 590 Manual []*SyncRule `yaml:"manual,omitempty" yamltags:"oneOf=sync"` 591 592 // Infer lists file patterns which may be synced into the container. 593 // The container destination is inferred by the builder. 594 // Currently only available for docker artifacts. 595 Infer []string `yaml:"infer,omitempty" yamltags:"oneOf=sync"` 596 } 597 598 // SyncRule specifies which local files to sync to remote folders. 599 type SyncRule struct { 600 // Src is a glob pattern to match local paths against. 601 // Directories should be delimited by `/` on all platforms. 602 // For example: `"css/**/*.css"`. 603 Src string `yaml:"src,omitempty" yamltags:"required"` 604 605 // Dest is the destination path in the container where the files should be synced to. 606 // For example: `"app/"` 607 Dest string `yaml:"dest,omitempty" yamltags:"required"` 608 609 // Strip specifies the path prefix to remove from the source path when 610 // transplanting the files into the destination folder. 611 // For example: `"css/"` 612 Strip string `yaml:"strip,omitempty"` 613 } 614 615 // Profile is used to override any `build`, `test` or `deploy` configuration. 616 type Profile struct { 617 // Name is a unique profile name. 618 // For example: `profile-prod`. 619 Name string `yaml:"name,omitempty" yamltags:"required"` 620 621 // Pipeline contains the definitions to replace the default skaffold pipeline. 622 Pipeline `yaml:",inline"` 623 624 // Patches lists patches applied to the configuration. 625 // Patches use the JSON patch notation. 626 Patches []JSONPatch `yaml:"patches,omitempty"` 627 628 // Activation criteria by which a profile can be auto-activated. 629 // The profile is auto-activated if any one of the activations are triggered. 630 // An activation is triggered if all of the criteria (env, kubeContext, command) are triggered. 631 Activation []Activation `yaml:"activation,omitempty"` 632 } 633 634 // JSONPatch patch to be applied by a profile. 635 type JSONPatch struct { 636 // Op is the operation carried by the patch: `add`, `remove`, `replace`, `move`, `copy` or `test`. 637 // Defaults to `replace`. 638 Op string `yaml:"op,omitempty"` 639 640 // Path is the position in the yaml where the operation takes place. 641 // For example, this targets the `dockerfile` of the first artifact built. 642 // For example: `/build/artifacts/0/docker/dockerfile`. 643 Path string `yaml:"path,omitempty" yamltags:"required"` 644 645 // From is the source position in the yaml, used for `copy` or `move` operations. 646 From string `yaml:"from,omitempty"` 647 648 // Value is the value to apply. Can be any portion of yaml. 649 Value *util.YamlpatchNode `yaml:"value,omitempty"` 650 } 651 652 // Activation criteria by which a profile is auto-activated. 653 type Activation struct { 654 // Env is a `key=pattern` pair. The profile is auto-activated if an Environment 655 // Variable `key` matches the pattern. If the pattern starts with `!`, activation 656 // happens if the remaining pattern is _not_ matched. The pattern matches if the 657 // Environment Variable value is exactly `pattern`, or the regex `pattern` is 658 // found in it. An empty `pattern` (e.g. `env: "key="`) always only matches if 659 // the Environment Variable is undefined or empty. 660 // For example: `ENV=production` 661 Env string `yaml:"env,omitempty"` 662 663 // KubeContext is a Kubernetes context for which the profile is auto-activated. 664 // For example: `minikube`. 665 KubeContext string `yaml:"kubeContext,omitempty"` 666 667 // Command is a Skaffold command for which the profile is auto-activated. 668 // For example: `dev`. 669 Command string `yaml:"command,omitempty"` 670 } 671 672 // ArtifactType describes how to build an artifact. 673 type ArtifactType struct { 674 // DockerArtifact *beta* describes an artifact built from a Dockerfile. 675 DockerArtifact *DockerArtifact `yaml:"docker,omitempty" yamltags:"oneOf=artifact"` 676 677 // BazelArtifact *beta* requires bazel CLI to be installed and the sources to 678 // contain [Bazel](https://bazel.build/) configuration files. 679 BazelArtifact *BazelArtifact `yaml:"bazel,omitempty" yamltags:"oneOf=artifact"` 680 681 // JibArtifact builds images using the 682 // [Jib plugins for Maven or Gradle](https://github.com/GoogleContainerTools/jib/). 683 JibArtifact *JibArtifact `yaml:"jib,omitempty" yamltags:"oneOf=artifact"` 684 685 // KanikoArtifact builds images using [kaniko](https://github.com/GoogleContainerTools/kaniko). 686 KanikoArtifact *KanikoArtifact `yaml:"kaniko,omitempty" yamltags:"oneOf=artifact"` 687 688 // BuildpackArtifact builds images using [Cloud Native Buildpacks](https://buildpacks.io/). 689 BuildpackArtifact *BuildpackArtifact `yaml:"buildpack,omitempty" yamltags:"oneOf=artifact"` 690 691 // CustomArtifact *beta* builds images using a custom build script written by the user. 692 CustomArtifact *CustomArtifact `yaml:"custom,omitempty" yamltags:"oneOf=artifact"` 693 } 694 695 // BuildpackArtifact *alpha* describes an artifact built using [Cloud Native Buildpacks](https://buildpacks.io/). 696 // It can be used to build images out of project's sources without any additional configuration. 697 type BuildpackArtifact struct { 698 // Builder is the builder image used. 699 Builder string `yaml:"builder" yamltags:"required"` 700 701 // RunImage overrides the stack's default run image. 702 RunImage string `yaml:"runImage,omitempty"` 703 704 // Env are environment variables, in the `key=value` form, passed to the build. 705 // Values can use the go template syntax. 706 // For example: `["key1=value1", "key2=value2", "key3={{.ENV_VARIABLE}}"]`. 707 Env []string `yaml:"env,omitempty"` 708 709 // Buildpacks is a list of strings, where each string is a specific buildpack to use with the builder. 710 // If you specify buildpacks the builder image automatic detection will be ignored. These buildpacks will be used to build the Image from your source code. 711 // Order matters. 712 Buildpacks []string `yaml:"buildpacks,omitempty"` 713 714 // Dependencies are the file dependencies that skaffold should watch for both rebuilding and file syncing for this artifact. 715 Dependencies *BuildpackDependencies `yaml:"dependencies,omitempty"` 716 } 717 718 // BuildpackDependencies *alpha* is used to specify dependencies for an artifact built by a buildpack. 719 type BuildpackDependencies struct { 720 // Paths should be set to the file dependencies for this artifact, so that the skaffold file watcher knows when to rebuild and perform file synchronization. 721 Paths []string `yaml:"paths,omitempty" yamltags:"oneOf=dependency"` 722 723 // Ignore specifies the paths that should be ignored by skaffold's file watcher. If a file exists in both `paths` and in `ignore`, it will be ignored, and will be excluded from both rebuilds and file synchronization. 724 // Will only work in conjunction with `paths`. 725 Ignore []string `yaml:"ignore,omitempty"` 726 } 727 728 // CustomArtifact *beta* describes an artifact built from a custom build script 729 // written by the user. It can be used to build images with builders that aren't directly integrated with skaffold. 730 type CustomArtifact struct { 731 // BuildCommand is the command executed to build the image. 732 BuildCommand string `yaml:"buildCommand,omitempty"` 733 // Dependencies are the file dependencies that skaffold should watch for both rebuilding and file syncing for this artifact. 734 Dependencies *CustomDependencies `yaml:"dependencies,omitempty"` 735 } 736 737 // CustomDependencies *beta* is used to specify dependencies for an artifact built by a custom build script. 738 // Either `dockerfile` or `paths` should be specified for file watching to work as expected. 739 type CustomDependencies struct { 740 // Dockerfile should be set if the artifact is built from a Dockerfile, from which skaffold can determine dependencies. 741 Dockerfile *DockerfileDependency `yaml:"dockerfile,omitempty" yamltags:"oneOf=dependency"` 742 // Command represents a custom command that skaffold executes to obtain dependencies. The output of this command *must* be a valid JSON array. 743 Command string `yaml:"command,omitempty" yamltags:"oneOf=dependency"` 744 // Paths should be set to the file dependencies for this artifact, so that the skaffold file watcher knows when to rebuild and perform file synchronization. 745 Paths []string `yaml:"paths,omitempty" yamltags:"oneOf=dependency"` 746 // Ignore specifies the paths that should be ignored by skaffold's file watcher. If a file exists in both `paths` and in `ignore`, it will be ignored, and will be excluded from both rebuilds and file synchronization. 747 // Will only work in conjunction with `paths`. 748 Ignore []string `yaml:"ignore,omitempty"` 749 } 750 751 // DockerfileDependency *beta* is used to specify a custom build artifact that is built from a Dockerfile. This allows skaffold to determine dependencies from the Dockerfile. 752 type DockerfileDependency struct { 753 // Path locates the Dockerfile relative to workspace. 754 Path string `yaml:"path,omitempty"` 755 756 // BuildArgs are arguments passed to the docker build. 757 // It also accepts environment variables via the go template syntax. 758 // For example: `{"key1": "value1", "key2": "value2", "key3": "'{{.ENV_VARIABLE}}'"}`. 759 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 760 } 761 762 // KanikoArtifact describes an artifact built from a Dockerfile, 763 // with kaniko. 764 type KanikoArtifact struct { 765 // AdditionalFlags are additional flags to be passed to Kaniko command line. 766 // See [Kaniko Additional Flags](https://github.com/GoogleContainerTools/kaniko#additional-flags). 767 // Deprecated - instead the named, unique fields should be used, e.g. `buildArgs`, `cache`, `target`. 768 AdditionalFlags []string `yaml:"flags,omitempty"` 769 770 // DockerfilePath locates the Dockerfile relative to workspace. 771 // Defaults to `Dockerfile`. 772 DockerfilePath string `yaml:"dockerfile,omitempty"` 773 774 // Target is the Dockerfile target name to build. 775 Target string `yaml:"target,omitempty"` 776 777 // BuildArgs are arguments passed to the docker build. 778 // It also accepts environment variables via the go template syntax. 779 // For example: `{"key1": "value1", "key2": "value2", "key3": "'{{.ENV_VARIABLE}}'"}`. 780 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 781 782 // Env are environment variables passed to the kaniko pod. 783 Env []v1.EnvVar `yaml:"env,omitempty"` 784 785 // InitImage is the image used to run init container which mounts kaniko context. 786 InitImage string `yaml:"initImage,omitempty"` 787 788 // Image is the Docker image used by the Kaniko pod. 789 // Defaults to the latest released version of `gcr.io/kaniko-project/executor`. 790 Image string `yaml:"image,omitempty"` 791 792 // Cache configures Kaniko caching. If a cache is specified, Kaniko will 793 // use a remote cache which will speed up builds. 794 Cache *KanikoCache `yaml:"cache,omitempty"` 795 796 // Reproducible is used to strip timestamps out of the built image. 797 Reproducible bool `yaml:"reproducible,omitempty"` 798 799 // SkipTLS skips TLS verification when pulling and pushing the image. 800 SkipTLS bool `yaml:"skipTLS,omitempty"` 801 802 // VolumeMounts are volume mounts passed to kaniko pod. 803 VolumeMounts []v1.VolumeMount `yaml:"volumeMounts,omitempty"` 804 } 805 806 // DockerArtifact describes an artifact built from a Dockerfile, 807 // usually using `docker build`. 808 type DockerArtifact struct { 809 // DockerfilePath locates the Dockerfile relative to workspace. 810 // Defaults to `Dockerfile`. 811 DockerfilePath string `yaml:"dockerfile,omitempty"` 812 813 // Target is the Dockerfile target name to build. 814 Target string `yaml:"target,omitempty"` 815 816 // BuildArgs are arguments passed to the docker build. 817 // For example: `{"key1": "value1", "key2": "value2"}`. 818 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 819 820 // NetworkMode is passed through to docker and overrides the 821 // network configuration of docker builder. If unset, use whatever 822 // is configured in the underlying docker daemon. Valid modes are 823 // `host`: use the host's networking stack. 824 // `bridge`: use the bridged network configuration. 825 // `none`: no networking in the container. 826 NetworkMode string `yaml:"network,omitempty"` 827 828 // CacheFrom lists the Docker images used as cache sources. 829 // For example: `["golang:1.10.1-alpine3.7", "alpine:3.7"]`. 830 CacheFrom []string `yaml:"cacheFrom,omitempty"` 831 832 // NoCache used to pass in --no-cache to docker build to prevent caching. 833 NoCache bool `yaml:"noCache,omitempty"` 834 } 835 836 // BazelArtifact describes an artifact built with [Bazel](https://bazel.build/). 837 type BazelArtifact struct { 838 // BuildTarget is the `bazel build` target to run. 839 // For example: `//:skaffold_example.tar`. 840 BuildTarget string `yaml:"target,omitempty" yamltags:"required"` 841 842 // BuildArgs are additional args to pass to `bazel build`. 843 // For example: `["-flag", "--otherflag"]`. 844 BuildArgs []string `yaml:"args,omitempty"` 845 } 846 847 // JibArtifact builds images using the 848 // [Jib plugins for Maven and Gradle](https://github.com/GoogleContainerTools/jib/). 849 type JibArtifact struct { 850 // Project selects which sub-project to build for multi-module builds. 851 Project string `yaml:"project,omitempty"` 852 853 // Flags are additional build flags passed to the builder. 854 // For example: `["--no-build-cache"]`. 855 Flags []string `yaml:"args,omitempty"` 856 857 // Type the Jib builder type; normally determined automatically. Valid types are 858 // `maven`: for Maven. 859 // `gradle`: for Gradle. 860 Type string `yaml:"type,omitempty"` 861 }