github.com/GoogleContainerTools/skaffold@v1.39.18/pkg/skaffold/schema/v1beta16/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 v1beta16 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/v1beta16" 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 // PullSecretMountPath is the path the pull secret will be mounted at within the running container. 291 PullSecretMountPath string `yaml:"pullSecretMountPath,omitempty"` 292 293 // Namespace is the Kubernetes namespace. 294 // Defaults to current namespace in Kubernetes configuration. 295 Namespace string `yaml:"namespace,omitempty"` 296 297 // Timeout is the amount of time (in seconds) that this build is allowed to run. 298 // Defaults to 20 minutes (`20m`). 299 Timeout string `yaml:"timeout,omitempty"` 300 301 // DockerConfig describes how to mount the local Docker configuration into a pod. 302 DockerConfig *DockerConfig `yaml:"dockerConfig,omitempty"` 303 304 // Resources define the resource requirements for the kaniko pod. 305 Resources *ResourceRequirements `yaml:"resources,omitempty"` 306 307 // Concurrency is how many artifacts can be built concurrently. 0 means "no-limit" 308 // Defaults to 0. 309 Concurrency int `yaml:"concurrency,omitempty"` 310 } 311 312 // DockerConfig contains information about the docker `config.json` to mount. 313 type DockerConfig struct { 314 // Path is the path to the docker `config.json`. 315 Path string `yaml:"path,omitempty"` 316 317 // SecretName is the Kubernetes secret that contains the `config.json` Docker configuration. 318 // Note that the expected secret type is not 'kubernetes.io/dockerconfigjson' but 'Opaque'. 319 SecretName string `yaml:"secretName,omitempty"` 320 } 321 322 // ResourceRequirements describes the resource requirements for the kaniko pod. 323 type ResourceRequirements struct { 324 // 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. 325 Requests *ResourceRequirement `yaml:"requests,omitempty"` 326 327 // 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. 328 Limits *ResourceRequirement `yaml:"limits,omitempty"` 329 } 330 331 // ResourceRequirement stores the CPU/Memory requirements for the pod. 332 type ResourceRequirement struct { 333 // CPU the number cores to be used. 334 // For example: `2`, `2.0` or `200m`. 335 CPU string `yaml:"cpu,omitempty"` 336 337 // Memory the amount of memory to allocate to the pod. 338 // For example: `1Gi` or `1000Mi`. 339 Memory string `yaml:"memory,omitempty"` 340 } 341 342 // TestCase is a list of structure tests to run on images that Skaffold builds. 343 type TestCase struct { 344 // ImageName is the artifact on which to run those tests. 345 // For example: `gcr.io/k8s-skaffold/example`. 346 ImageName string `yaml:"image" yamltags:"required"` 347 348 // StructureTests lists the [Container Structure Tests](https://github.com/GoogleContainerTools/container-structure-test) 349 // to run on that artifact. 350 // For example: `["./test/*"]`. 351 StructureTests []string `yaml:"structureTests,omitempty"` 352 } 353 354 // DeployConfig contains all the configuration needed by the deploy steps. 355 type DeployConfig struct { 356 DeployType `yaml:",inline"` 357 358 // StatusCheckDeadlineSeconds *beta* is the deadline for deployments to stabilize in seconds. 359 StatusCheckDeadlineSeconds int `yaml:"statusCheckDeadlineSeconds,omitempty"` 360 361 // KubeContext is the Kubernetes context that Skaffold should deploy to. 362 // For example: `minikube`. 363 KubeContext string `yaml:"kubeContext,omitempty"` 364 } 365 366 // DeployType contains the specific implementation and parameters needed 367 // for the deploy step. Only one field should be populated. 368 type DeployType struct { 369 // HelmDeploy *beta* uses the `helm` CLI to apply the charts to the cluster. 370 HelmDeploy *HelmDeploy `yaml:"helm,omitempty" yamltags:"oneOf=deploy"` 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 KubectlDeploy *KubectlDeploy `yaml:"kubectl,omitempty" yamltags:"oneOf=deploy"` 375 376 // KustomizeDeploy *beta* uses the `kustomize` CLI to "patch" a deployment for a target environment. 377 KustomizeDeploy *KustomizeDeploy `yaml:"kustomize,omitempty" yamltags:"oneOf=deploy"` 378 } 379 380 // KubectlDeploy *beta* uses a client side `kubectl apply` to deploy manifests. 381 // You'll need a `kubectl` CLI version installed that's compatible with your cluster. 382 type KubectlDeploy struct { 383 // Manifests lists the Kubernetes yaml or json manifests. 384 // Defaults to `["k8s/*.yaml"]`. 385 Manifests []string `yaml:"manifests,omitempty"` 386 387 // RemoteManifests lists Kubernetes manifests in remote clusters. 388 RemoteManifests []string `yaml:"remoteManifests,omitempty"` 389 390 // Flags are additional flags passed to `kubectl`. 391 Flags KubectlFlags `yaml:"flags,omitempty"` 392 } 393 394 // KubectlFlags are additional flags passed on the command 395 // line to kubectl either on every command (Global), on creations (Apply) 396 // or deletions (Delete). 397 type KubectlFlags struct { 398 // Global are additional flags passed on every command. 399 Global []string `yaml:"global,omitempty"` 400 401 // Apply are additional flags passed on creations (`kubectl apply`). 402 Apply []string `yaml:"apply,omitempty"` 403 404 // Delete are additional flags passed on deletions (`kubectl delete`). 405 Delete []string `yaml:"delete,omitempty"` 406 } 407 408 // HelmDeploy *beta* uses the `helm` CLI to apply the charts to the cluster. 409 type HelmDeploy struct { 410 // Releases is a list of Helm releases. 411 Releases []HelmRelease `yaml:"releases,omitempty" yamltags:"required"` 412 413 // Flags are additional option flags that are passed on the command 414 // line to `helm`. 415 Flags HelmDeployFlags `yaml:"flags,omitempty"` 416 } 417 418 // HelmDeployFlags are additional option flags that are passed on the command 419 // line to `helm`. 420 type HelmDeployFlags struct { 421 // Global are additional flags passed on every command. 422 Global []string `yaml:"global,omitempty"` 423 424 // Install are additional flags passed to (`helm install`). 425 Install []string `yaml:"install,omitempty"` 426 427 // Upgrade are additional flags passed to (`helm upgrade`). 428 Upgrade []string `yaml:"upgrade,omitempty"` 429 } 430 431 // KustomizeDeploy *beta* uses the `kustomize` CLI to "patch" a deployment for a target environment. 432 type KustomizeDeploy struct { 433 // KustomizePath is the path to Kustomization files. 434 // Defaults to `.`. 435 KustomizePath string `yaml:"path,omitempty"` 436 437 // Flags are additional flags passed to `kubectl`. 438 Flags KubectlFlags `yaml:"flags,omitempty"` 439 440 // BuildArgs are additional args passed to `kustomize build`. 441 BuildArgs []string `yaml:"buildArgs,omitempty"` 442 } 443 444 // HelmRelease describes a helm release to be deployed. 445 type HelmRelease struct { 446 // Name is the name of the Helm release. 447 Name string `yaml:"name,omitempty" yamltags:"required"` 448 449 // ChartPath is the path to the Helm chart. 450 ChartPath string `yaml:"chartPath,omitempty" yamltags:"required"` 451 452 // ValuesFiles are the paths to the Helm `values` files. 453 ValuesFiles []string `yaml:"valuesFiles,omitempty"` 454 455 // Values are key-value pairs supplementing the Helm `values` file. 456 Values map[string]string `yaml:"values,omitempty,omitempty"` 457 458 // Namespace is the Kubernetes namespace. 459 Namespace string `yaml:"namespace,omitempty"` 460 461 // Version is the version of the chart. 462 Version string `yaml:"version,omitempty"` 463 464 // SetValues are key-value pairs. 465 // If present, Skaffold will send `--set` flag to Helm CLI and append all pairs after the flag. 466 SetValues map[string]string `yaml:"setValues,omitempty"` 467 468 // SetValueTemplates are key-value pairs. 469 // If present, Skaffold will try to parse the value part of each key-value pair using 470 // environment variables in the system, then send `--set` flag to Helm CLI and append 471 // all parsed pairs after the flag. 472 SetValueTemplates map[string]string `yaml:"setValueTemplates,omitempty"` 473 474 // SetFiles are key-value pairs. 475 // If present, Skaffold will send `--set-file` flag to Helm CLI and append all pairs after the flag. 476 SetFiles map[string]string `yaml:"setFiles,omitempty"` 477 478 // Wait if `true`, Skaffold will send `--wait` flag to Helm CLI. 479 // Defaults to `false`. 480 Wait bool `yaml:"wait,omitempty"` 481 482 // RecreatePods if `true`, Skaffold will send `--recreate-pods` flag to Helm CLI 483 // when upgrading a new version of a chart in subsequent dev loop deploy. 484 // Defaults to `false`. 485 RecreatePods bool `yaml:"recreatePods,omitempty"` 486 487 // SkipBuildDependencies should build dependencies be skipped. 488 SkipBuildDependencies bool `yaml:"skipBuildDependencies,omitempty"` 489 490 // UseHelmSecrets instructs skaffold to use secrets plugin on deployment. 491 UseHelmSecrets bool `yaml:"useHelmSecrets,omitempty"` 492 493 // Remote specifies whether the chart path is remote, or exists on the host filesystem. 494 // `remote: true` implies `skipBuildDependencies: true`. 495 Remote bool `yaml:"remote,omitempty"` 496 497 // Overrides are key-value pairs. 498 // If present, Skaffold will build a Helm `values` file that overrides 499 // the original and use it to call Helm CLI (`--f` flag). 500 Overrides util.HelmOverrides `yaml:"overrides,omitempty"` 501 502 // Packaged parameters for packaging helm chart (`helm package`). 503 Packaged *HelmPackaged `yaml:"packaged,omitempty"` 504 505 // ImageStrategy adds image configurations to the Helm `values` file. 506 ImageStrategy HelmImageStrategy `yaml:"imageStrategy,omitempty"` 507 } 508 509 // HelmPackaged parameters for packaging helm chart (`helm package`). 510 type HelmPackaged struct { 511 // Version sets the `version` on the chart to this semver version. 512 Version string `yaml:"version,omitempty"` 513 514 // AppVersion sets the `appVersion` on the chart to this version. 515 AppVersion string `yaml:"appVersion,omitempty"` 516 } 517 518 // HelmImageStrategy adds image configurations to the Helm `values` file. 519 type HelmImageStrategy struct { 520 HelmImageConfig `yaml:",inline"` 521 } 522 523 // HelmImageConfig describes an image configuration. 524 type HelmImageConfig struct { 525 // HelmFQNConfig is the image configuration uses the syntax `IMAGE-NAME=IMAGE-REPOSITORY:IMAGE-TAG`. 526 HelmFQNConfig *HelmFQNConfig `yaml:"fqn,omitempty" yamltags:"oneOf=helmImageStrategy"` 527 528 // HelmConventionConfig is the image configuration uses the syntax `IMAGE-NAME.repository=IMAGE-REPOSITORY, IMAGE-NAME.tag=IMAGE-TAG`. 529 HelmConventionConfig *HelmConventionConfig `yaml:"helm,omitempty" yamltags:"oneOf=helmImageStrategy"` 530 } 531 532 // HelmFQNConfig is the image config to use the FullyQualifiedImageName as param to set. 533 type HelmFQNConfig struct { 534 // Property defines the image config. 535 Property string `yaml:"property,omitempty"` 536 } 537 538 // HelmConventionConfig is the image config in the syntax of image.repository and image.tag. 539 type HelmConventionConfig struct { 540 // ExplicitRegistry separates `image.registry` to the image config syntax. Useful for some charts e.g. `postgresql`. 541 ExplicitRegistry bool `yaml:"explicitRegistry,omitempty"` 542 } 543 544 // Artifact are the items that need to be built, along with the context in which 545 // they should be built. 546 type Artifact struct { 547 // ImageName is the name of the image to be built. 548 // For example: `gcr.io/k8s-skaffold/example`. 549 ImageName string `yaml:"image,omitempty" yamltags:"required"` 550 551 // Workspace is the directory containing the artifact's sources. 552 // Defaults to `.`. 553 Workspace string `yaml:"context,omitempty"` 554 555 // Sync *alpha* lists local files synced to pods instead 556 // of triggering an image build when modified. 557 Sync *Sync `yaml:"sync,omitempty"` 558 559 // ArtifactType describes how to build an artifact. 560 ArtifactType `yaml:",inline"` 561 } 562 563 // Sync *alpha* specifies what files to sync into the container. 564 // This is a list of sync rules indicating the intent to sync for source files. 565 type Sync struct { 566 // Manual lists manual sync rules indicating the source and destination. 567 Manual []*SyncRule `yaml:"manual,omitempty" yamltags:"oneOf=sync"` 568 569 // Infer lists file patterns which may be synced into the container. 570 // The container destination is inferred by the builder. 571 // Currently only available for docker artifacts. 572 Infer []string `yaml:"infer,omitempty" yamltags:"oneOf=sync"` 573 } 574 575 // SyncRule specifies which local files to sync to remote folders. 576 type SyncRule struct { 577 // Src is a glob pattern to match local paths against. 578 // Directories should be delimited by `/` on all platforms. 579 // For example: `"css/**/*.css"`. 580 Src string `yaml:"src,omitempty" yamltags:"required"` 581 582 // Dest is the destination path in the container where the files should be synced to. 583 // For example: `"app/"` 584 Dest string `yaml:"dest,omitempty" yamltags:"required"` 585 586 // Strip specifies the path prefix to remove from the source path when 587 // transplanting the files into the destination folder. 588 // For example: `"css/"` 589 Strip string `yaml:"strip,omitempty"` 590 } 591 592 // Profile *beta* profiles are used to override any `build`, `test` or `deploy` configuration. 593 type Profile struct { 594 // Name is a unique profile name. 595 // For example: `profile-prod`. 596 Name string `yaml:"name,omitempty" yamltags:"required"` 597 598 // Pipeline contains the definitions to replace the default skaffold pipeline. 599 Pipeline `yaml:",inline"` 600 601 // Patches lists patches applied to the configuration. 602 // Patches use the JSON patch notation. 603 Patches []JSONPatch `yaml:"patches,omitempty"` 604 605 // Activation criteria by which a profile can be auto-activated. 606 // The profile is auto-activated if any one of the activations are triggered. 607 // An activation is triggered if all of the criteria (env, kubeContext, command) are triggered. 608 Activation []Activation `yaml:"activation,omitempty"` 609 } 610 611 // JSONPatch patch to be applied by a profile. 612 type JSONPatch struct { 613 // Op is the operation carried by the patch: `add`, `remove`, `replace`, `move`, `copy` or `test`. 614 // Defaults to `replace`. 615 Op string `yaml:"op,omitempty"` 616 617 // Path is the position in the yaml where the operation takes place. 618 // For example, this targets the `dockerfile` of the first artifact built. 619 // For example: `/build/artifacts/0/docker/dockerfile`. 620 Path string `yaml:"path,omitempty" yamltags:"required"` 621 622 // From is the source position in the yaml, used for `copy` or `move` operations. 623 From string `yaml:"from,omitempty"` 624 625 // Value is the value to apply. Can be any portion of yaml. 626 Value *util.YamlpatchNode `yaml:"value,omitempty"` 627 } 628 629 // Activation criteria by which a profile is auto-activated. 630 type Activation struct { 631 // Env is a `key=pattern` pair. The profile is auto-activated if an Environment 632 // Variable `key` matches the pattern. If the pattern starts with `!`, activation 633 // happens if the remaining pattern is _not_ matched. The pattern matches if the 634 // Environment Variable value is exactly `pattern`, or the regex `pattern` is 635 // found in it. An empty `pattern` (e.g. `env: "key="`) always only matches if 636 // the Environment Variable is undefined or empty. 637 // For example: `ENV=production` 638 Env string `yaml:"env,omitempty"` 639 640 // KubeContext is a Kubernetes context for which the profile is auto-activated. 641 // For example: `minikube`. 642 KubeContext string `yaml:"kubeContext,omitempty"` 643 644 // Command is a Skaffold command for which the profile is auto-activated. 645 // For example: `dev`. 646 Command string `yaml:"command,omitempty"` 647 } 648 649 // ArtifactType describes how to build an artifact. 650 type ArtifactType struct { 651 // DockerArtifact *beta* describes an artifact built from a Dockerfile. 652 DockerArtifact *DockerArtifact `yaml:"docker,omitempty" yamltags:"oneOf=artifact"` 653 654 // BazelArtifact *beta* requires bazel CLI to be installed and the sources to 655 // contain [Bazel](https://bazel.build/) configuration files. 656 BazelArtifact *BazelArtifact `yaml:"bazel,omitempty" yamltags:"oneOf=artifact"` 657 658 // JibArtifact *alpha* builds images using the 659 // [Jib plugins for Maven or Gradle](https://github.com/GoogleContainerTools/jib/). 660 JibArtifact *JibArtifact `yaml:"jib,omitempty" yamltags:"oneOf=artifact"` 661 662 // KanikoArtifact *alpha* builds images using [kaniko](https://github.com/GoogleContainerTools/kaniko). 663 KanikoArtifact *KanikoArtifact `yaml:"kaniko,omitempty" yamltags:"oneOf=artifact"` 664 665 // CustomArtifact *alpha* builds images using a custom build script written by the user. 666 CustomArtifact *CustomArtifact `yaml:"custom,omitempty" yamltags:"oneOf=artifact"` 667 } 668 669 // CustomArtifact *alpha* describes an artifact built from a custom build script 670 // written by the user. It can be used to build images with builders that aren't directly integrated with skaffold. 671 type CustomArtifact struct { 672 // BuildCommand is the command executed to build the image. 673 BuildCommand string `yaml:"buildCommand,omitempty"` 674 // Dependencies are the file dependencies that skaffold should watch for both rebuilding and file syncing for this artifact. 675 Dependencies *CustomDependencies `yaml:"dependencies,omitempty"` 676 } 677 678 // CustomDependencies *alpha* is used to specify dependencies for an artifact built by a custom build script. 679 // Either `dockerfile` or `paths` should be specified for file watching to work as expected. 680 type CustomDependencies struct { 681 // Dockerfile should be set if the artifact is built from a Dockerfile, from which skaffold can determine dependencies. 682 Dockerfile *DockerfileDependency `yaml:"dockerfile,omitempty" yamltags:"oneOf=dependency"` 683 // Command represents a custom command that skaffold executes to obtain dependencies. The output of this command *must* be a valid JSON array. 684 Command string `yaml:"command,omitempty" yamltags:"oneOf=dependency"` 685 // 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. 686 Paths []string `yaml:"paths,omitempty" yamltags:"oneOf=dependency"` 687 // 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. 688 // Will only work in conjunction with `paths`. 689 Ignore []string `yaml:"ignore,omitempty"` 690 } 691 692 // 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. 693 type DockerfileDependency struct { 694 // Path locates the Dockerfile relative to workspace. 695 Path string `yaml:"path,omitempty"` 696 697 // BuildArgs are arguments passed to the docker build. 698 // It also accepts environment variables via the go template syntax. 699 // For example: `{"key1": "value1", "key2": "value2", "key3": "{{.ENV_VARIABLE}}"}`. 700 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 701 } 702 703 // KanikoArtifact *alpha* describes an artifact built from a Dockerfile, 704 // with kaniko. 705 type KanikoArtifact struct { 706 // AdditionalFlags are additional flags to be passed to Kaniko command line. 707 // See [Kaniko Additional Flags](https://github.com/GoogleContainerTools/kaniko#additional-flags). 708 // Deprecated - instead the named, unique fields should be used, e.g. `buildArgs`, `cache`, `target`. 709 AdditionalFlags []string `yaml:"flags,omitempty"` 710 711 // DockerfilePath locates the Dockerfile relative to workspace. 712 // Defaults to `Dockerfile`. 713 DockerfilePath string `yaml:"dockerfile,omitempty"` 714 715 // Target is the Dockerfile target name to build. 716 Target string `yaml:"target,omitempty"` 717 718 // BuildArgs are arguments passed to the docker build. 719 // It also accepts environment variables via the go template syntax. 720 // For example: `{"key1": "value1", "key2": "value2", "key3": "{{.ENV_VARIABLE}}"}`. 721 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 722 723 // BuildContext is where the build context for this artifact resides. 724 BuildContext *KanikoBuildContext `yaml:"buildContext,omitempty"` 725 726 // Image is the Docker image used by the Kaniko pod. 727 // Defaults to the latest released version of `gcr.io/kaniko-project/executor`. 728 Image string `yaml:"image,omitempty"` 729 730 // Cache configures Kaniko caching. If a cache is specified, Kaniko will 731 // use a remote cache which will speed up builds. 732 Cache *KanikoCache `yaml:"cache,omitempty"` 733 734 // Reproducible is used to strip timestamps out of the built image. 735 Reproducible bool `yaml:"reproducible,omitempty"` 736 737 // SkipTLS skips TLS verification when pulling and pushing the image. 738 SkipTLS bool `yaml:"skipTLS,omitempty"` 739 } 740 741 // DockerArtifact *beta* describes an artifact built from a Dockerfile, 742 // usually using `docker build`. 743 type DockerArtifact struct { 744 // DockerfilePath locates the Dockerfile relative to workspace. 745 // Defaults to `Dockerfile`. 746 DockerfilePath string `yaml:"dockerfile,omitempty"` 747 748 // Target is the Dockerfile target name to build. 749 Target string `yaml:"target,omitempty"` 750 751 // BuildArgs are arguments passed to the docker build. 752 // For example: `{"key1": "value1", "key2": "value2"}`. 753 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 754 755 // NetworkMode is passed through to docker and overrides the 756 // network configuration of docker builder. If unset, use whatever 757 // is configured in the underlying docker daemon. Valid modes are 758 // `host`: use the host's networking stack. 759 // `bridge`: use the bridged network configuration. 760 // `none`: no networking in the container. 761 NetworkMode string `yaml:"network,omitempty"` 762 763 // CacheFrom lists the Docker images used as cache sources. 764 // For example: `["golang:1.10.1-alpine3.7", "alpine:3.7"]`. 765 CacheFrom []string `yaml:"cacheFrom,omitempty"` 766 767 // NoCache used to pass in --no-cache to docker build to prevent caching. 768 NoCache bool `yaml:"noCache,omitempty"` 769 } 770 771 // BazelArtifact *beta* describes an artifact built with [Bazel](https://bazel.build/). 772 type BazelArtifact struct { 773 // BuildTarget is the `bazel build` target to run. 774 // For example: `//:skaffold_example.tar`. 775 BuildTarget string `yaml:"target,omitempty" yamltags:"required"` 776 777 // BuildArgs are additional args to pass to `bazel build`. 778 // For example: `["-flag", "--otherflag"]`. 779 BuildArgs []string `yaml:"args,omitempty"` 780 } 781 782 // JibArtifact *alpha* builds images using the 783 // [Jib plugins for Maven and Gradle](https://github.com/GoogleContainerTools/jib/). 784 type JibArtifact struct { 785 // Project selects which sub-project to build for multi-module builds. 786 Project string `yaml:"project,omitempty"` 787 788 // Flags are additional build flags passed to the builder. 789 // For example: `["--no-build-cache"]`. 790 Flags []string `yaml:"args,omitempty"` 791 792 // Type the Jib builder type; normally determined automatically. Valid types are 793 // `maven`: for Maven. 794 // `gradle`: for Gradle. 795 Type string `yaml:"type,omitempty"` 796 }