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