github.com/GoogleContainerTools/skaffold@v1.39.18/pkg/skaffold/schema/v2beta1/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 v2beta1 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/v2beta1" 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 // Auto delegates discovery of sync rules to the build system. 598 // Currently only available for jib. 599 Auto *Auto `yaml:"auto,omitempty" yamltags:"oneOf=sync"` 600 } 601 602 // SyncRule specifies which local files to sync to remote folders. 603 type SyncRule struct { 604 // Src is a glob pattern to match local paths against. 605 // Directories should be delimited by `/` on all platforms. 606 // For example: `"css/**/*.css"`. 607 Src string `yaml:"src,omitempty" yamltags:"required"` 608 609 // Dest is the destination path in the container where the files should be synced to. 610 // For example: `"app/"` 611 Dest string `yaml:"dest,omitempty" yamltags:"required"` 612 613 // Strip specifies the path prefix to remove from the source path when 614 // transplanting the files into the destination folder. 615 // For example: `"css/"` 616 Strip string `yaml:"strip,omitempty"` 617 } 618 619 // Auto cannot be customized. 620 type Auto struct{} 621 622 // Profile is used to override any `build`, `test` or `deploy` configuration. 623 type Profile struct { 624 // Name is a unique profile name. 625 // For example: `profile-prod`. 626 Name string `yaml:"name,omitempty" yamltags:"required"` 627 628 // Pipeline contains the definitions to replace the default skaffold pipeline. 629 Pipeline `yaml:",inline"` 630 631 // Patches lists patches applied to the configuration. 632 // Patches use the JSON patch notation. 633 Patches []JSONPatch `yaml:"patches,omitempty"` 634 635 // Activation criteria by which a profile can be auto-activated. 636 // The profile is auto-activated if any one of the activations are triggered. 637 // An activation is triggered if all of the criteria (env, kubeContext, command) are triggered. 638 Activation []Activation `yaml:"activation,omitempty"` 639 } 640 641 // JSONPatch patch to be applied by a profile. 642 type JSONPatch struct { 643 // Op is the operation carried by the patch: `add`, `remove`, `replace`, `move`, `copy` or `test`. 644 // Defaults to `replace`. 645 Op string `yaml:"op,omitempty"` 646 647 // Path is the position in the yaml where the operation takes place. 648 // For example, this targets the `dockerfile` of the first artifact built. 649 // For example: `/build/artifacts/0/docker/dockerfile`. 650 Path string `yaml:"path,omitempty" yamltags:"required"` 651 652 // From is the source position in the yaml, used for `copy` or `move` operations. 653 From string `yaml:"from,omitempty"` 654 655 // Value is the value to apply. Can be any portion of yaml. 656 Value *util.YamlpatchNode `yaml:"value,omitempty"` 657 } 658 659 // Activation criteria by which a profile is auto-activated. 660 type Activation struct { 661 // Env is a `key=pattern` pair. The profile is auto-activated if an Environment 662 // Variable `key` matches the pattern. If the pattern starts with `!`, activation 663 // happens if the remaining pattern is _not_ matched. The pattern matches if the 664 // Environment Variable value is exactly `pattern`, or the regex `pattern` is 665 // found in it. An empty `pattern` (e.g. `env: "key="`) always only matches if 666 // the Environment Variable is undefined or empty. 667 // For example: `ENV=production` 668 Env string `yaml:"env,omitempty"` 669 670 // KubeContext is a Kubernetes context for which the profile is auto-activated. 671 // For example: `minikube`. 672 KubeContext string `yaml:"kubeContext,omitempty"` 673 674 // Command is a Skaffold command for which the profile is auto-activated. 675 // For example: `dev`. 676 Command string `yaml:"command,omitempty"` 677 } 678 679 // ArtifactType describes how to build an artifact. 680 type ArtifactType struct { 681 // DockerArtifact *beta* describes an artifact built from a Dockerfile. 682 DockerArtifact *DockerArtifact `yaml:"docker,omitempty" yamltags:"oneOf=artifact"` 683 684 // BazelArtifact *beta* requires bazel CLI to be installed and the sources to 685 // contain [Bazel](https://bazel.build/) configuration files. 686 BazelArtifact *BazelArtifact `yaml:"bazel,omitempty" yamltags:"oneOf=artifact"` 687 688 // JibArtifact builds images using the 689 // [Jib plugins for Maven or Gradle](https://github.com/GoogleContainerTools/jib/). 690 JibArtifact *JibArtifact `yaml:"jib,omitempty" yamltags:"oneOf=artifact"` 691 692 // KanikoArtifact builds images using [kaniko](https://github.com/GoogleContainerTools/kaniko). 693 KanikoArtifact *KanikoArtifact `yaml:"kaniko,omitempty" yamltags:"oneOf=artifact"` 694 695 // BuildpackArtifact builds images using [Cloud Native Buildpacks](https://buildpacks.io/). 696 BuildpackArtifact *BuildpackArtifact `yaml:"buildpack,omitempty" yamltags:"oneOf=artifact"` 697 698 // CustomArtifact *beta* builds images using a custom build script written by the user. 699 CustomArtifact *CustomArtifact `yaml:"custom,omitempty" yamltags:"oneOf=artifact"` 700 } 701 702 // BuildpackArtifact *alpha* describes an artifact built using [Cloud Native Buildpacks](https://buildpacks.io/). 703 // It can be used to build images out of project's sources without any additional configuration. 704 type BuildpackArtifact struct { 705 // Builder is the builder image used. 706 Builder string `yaml:"builder" yamltags:"required"` 707 708 // RunImage overrides the stack's default run image. 709 RunImage string `yaml:"runImage,omitempty"` 710 711 // Env are environment variables, in the `key=value` form, passed to the build. 712 // Values can use the go template syntax. 713 // For example: `["key1=value1", "key2=value2", "key3={{.ENV_VARIABLE}}"]`. 714 Env []string `yaml:"env,omitempty"` 715 716 // Buildpacks is a list of strings, where each string is a specific buildpack to use with the builder. 717 // 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. 718 // Order matters. 719 Buildpacks []string `yaml:"buildpacks,omitempty"` 720 721 // Dependencies are the file dependencies that skaffold should watch for both rebuilding and file syncing for this artifact. 722 Dependencies *BuildpackDependencies `yaml:"dependencies,omitempty"` 723 } 724 725 // BuildpackDependencies *alpha* is used to specify dependencies for an artifact built by a buildpack. 726 type BuildpackDependencies struct { 727 // 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. 728 Paths []string `yaml:"paths,omitempty" yamltags:"oneOf=dependency"` 729 730 // 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. 731 // Will only work in conjunction with `paths`. 732 Ignore []string `yaml:"ignore,omitempty"` 733 } 734 735 // CustomArtifact *beta* describes an artifact built from a custom build script 736 // written by the user. It can be used to build images with builders that aren't directly integrated with skaffold. 737 type CustomArtifact struct { 738 // BuildCommand is the command executed to build the image. 739 BuildCommand string `yaml:"buildCommand,omitempty"` 740 // Dependencies are the file dependencies that skaffold should watch for both rebuilding and file syncing for this artifact. 741 Dependencies *CustomDependencies `yaml:"dependencies,omitempty"` 742 } 743 744 // CustomDependencies *beta* is used to specify dependencies for an artifact built by a custom build script. 745 // Either `dockerfile` or `paths` should be specified for file watching to work as expected. 746 type CustomDependencies struct { 747 // Dockerfile should be set if the artifact is built from a Dockerfile, from which skaffold can determine dependencies. 748 Dockerfile *DockerfileDependency `yaml:"dockerfile,omitempty" yamltags:"oneOf=dependency"` 749 // Command represents a custom command that skaffold executes to obtain dependencies. The output of this command *must* be a valid JSON array. 750 Command string `yaml:"command,omitempty" yamltags:"oneOf=dependency"` 751 // 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. 752 Paths []string `yaml:"paths,omitempty" yamltags:"oneOf=dependency"` 753 // 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. 754 // Will only work in conjunction with `paths`. 755 Ignore []string `yaml:"ignore,omitempty"` 756 } 757 758 // 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. 759 type DockerfileDependency struct { 760 // Path locates the Dockerfile relative to workspace. 761 Path string `yaml:"path,omitempty"` 762 763 // BuildArgs are arguments passed to the docker build. 764 // It also accepts environment variables via the go template syntax. 765 // For example: `{"key1": "value1", "key2": "value2", "key3": "'{{.ENV_VARIABLE}}'"}`. 766 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 767 } 768 769 // KanikoArtifact describes an artifact built from a Dockerfile, 770 // with kaniko. 771 type KanikoArtifact struct { 772 // AdditionalFlags are additional flags to be passed to Kaniko command line. 773 // See [Kaniko Additional Flags](https://github.com/GoogleContainerTools/kaniko#additional-flags). 774 // Deprecated - instead the named, unique fields should be used, e.g. `buildArgs`, `cache`, `target`. 775 AdditionalFlags []string `yaml:"flags,omitempty"` 776 777 // DockerfilePath locates the Dockerfile relative to workspace. 778 // Defaults to `Dockerfile`. 779 DockerfilePath string `yaml:"dockerfile,omitempty"` 780 781 // Target is the Dockerfile target name to build. 782 Target string `yaml:"target,omitempty"` 783 784 // BuildArgs are arguments passed to the docker build. 785 // It also accepts environment variables via the go template syntax. 786 // For example: `{"key1": "value1", "key2": "value2", "key3": "'{{.ENV_VARIABLE}}'"}`. 787 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 788 789 // Env are environment variables passed to the kaniko pod. 790 Env []v1.EnvVar `yaml:"env,omitempty"` 791 792 // InitImage is the image used to run init container which mounts kaniko context. 793 InitImage string `yaml:"initImage,omitempty"` 794 795 // Image is the Docker image used by the Kaniko pod. 796 // Defaults to the latest released version of `gcr.io/kaniko-project/executor`. 797 Image string `yaml:"image,omitempty"` 798 799 // Cache configures Kaniko caching. If a cache is specified, Kaniko will 800 // use a remote cache which will speed up builds. 801 Cache *KanikoCache `yaml:"cache,omitempty"` 802 803 // Reproducible is used to strip timestamps out of the built image. 804 Reproducible bool `yaml:"reproducible,omitempty"` 805 806 // SkipTLS skips TLS verification when pulling and pushing the image. 807 SkipTLS bool `yaml:"skipTLS,omitempty"` 808 809 // VolumeMounts are volume mounts passed to kaniko pod. 810 VolumeMounts []v1.VolumeMount `yaml:"volumeMounts,omitempty"` 811 } 812 813 // DockerArtifact describes an artifact built from a Dockerfile, 814 // usually using `docker build`. 815 type DockerArtifact struct { 816 // DockerfilePath locates the Dockerfile relative to workspace. 817 // Defaults to `Dockerfile`. 818 DockerfilePath string `yaml:"dockerfile,omitempty"` 819 820 // Target is the Dockerfile target name to build. 821 Target string `yaml:"target,omitempty"` 822 823 // BuildArgs are arguments passed to the docker build. 824 // For example: `{"key1": "value1", "key2": "value2"}`. 825 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 826 827 // NetworkMode is passed through to docker and overrides the 828 // network configuration of docker builder. If unset, use whatever 829 // is configured in the underlying docker daemon. Valid modes are 830 // `host`: use the host's networking stack. 831 // `bridge`: use the bridged network configuration. 832 // `none`: no networking in the container. 833 NetworkMode string `yaml:"network,omitempty"` 834 835 // CacheFrom lists the Docker images used as cache sources. 836 // For example: `["golang:1.10.1-alpine3.7", "alpine:3.7"]`. 837 CacheFrom []string `yaml:"cacheFrom,omitempty"` 838 839 // NoCache used to pass in --no-cache to docker build to prevent caching. 840 NoCache bool `yaml:"noCache,omitempty"` 841 } 842 843 // BazelArtifact describes an artifact built with [Bazel](https://bazel.build/). 844 type BazelArtifact struct { 845 // BuildTarget is the `bazel build` target to run. 846 // For example: `//:skaffold_example.tar`. 847 BuildTarget string `yaml:"target,omitempty" yamltags:"required"` 848 849 // BuildArgs are additional args to pass to `bazel build`. 850 // For example: `["-flag", "--otherflag"]`. 851 BuildArgs []string `yaml:"args,omitempty"` 852 } 853 854 // JibArtifact builds images using the 855 // [Jib plugins for Maven and Gradle](https://github.com/GoogleContainerTools/jib/). 856 type JibArtifact struct { 857 // Project selects which sub-project to build for multi-module builds. 858 Project string `yaml:"project,omitempty"` 859 860 // Flags are additional build flags passed to the builder. 861 // For example: `["--no-build-cache"]`. 862 Flags []string `yaml:"args,omitempty"` 863 864 // Type the Jib builder type; normally determined automatically. Valid types are 865 // `maven`: for Maven. 866 // `gradle`: for Gradle. 867 Type string `yaml:"type,omitempty"` 868 }