github.com/GoogleContainerTools/skaffold@v1.39.18/pkg/skaffold/schema/v1beta14/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 v1beta14 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/v1beta14" 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 433 // HelmRelease describes a helm release to be deployed. 434 type HelmRelease struct { 435 // Name is the name of the Helm release. 436 Name string `yaml:"name,omitempty" yamltags:"required"` 437 438 // ChartPath is the path to the Helm chart. 439 ChartPath string `yaml:"chartPath,omitempty" yamltags:"required"` 440 441 // ValuesFiles are the paths to the Helm `values` files. 442 ValuesFiles []string `yaml:"valuesFiles,omitempty"` 443 444 // Values are key-value pairs supplementing the Helm `values` file. 445 Values map[string]string `yaml:"values,omitempty,omitempty"` 446 447 // Namespace is the Kubernetes namespace. 448 Namespace string `yaml:"namespace,omitempty"` 449 450 // Version is the version of the chart. 451 Version string `yaml:"version,omitempty"` 452 453 // SetValues are key-value pairs. 454 // If present, Skaffold will send `--set` flag to Helm CLI and append all pairs after the flag. 455 SetValues map[string]string `yaml:"setValues,omitempty"` 456 457 // SetValueTemplates are key-value pairs. 458 // If present, Skaffold will try to parse the value part of each key-value pair using 459 // environment variables in the system, then send `--set` flag to Helm CLI and append 460 // all parsed pairs after the flag. 461 SetValueTemplates map[string]string `yaml:"setValueTemplates,omitempty"` 462 463 // Wait if `true`, Skaffold will send `--wait` flag to Helm CLI. 464 // Defaults to `false`. 465 Wait bool `yaml:"wait,omitempty"` 466 467 // RecreatePods if `true`, Skaffold will send `--recreate-pods` flag to Helm CLI. 468 // Defaults to `false`. 469 RecreatePods bool `yaml:"recreatePods,omitempty"` 470 471 // SkipBuildDependencies should build dependencies be skipped. 472 SkipBuildDependencies bool `yaml:"skipBuildDependencies,omitempty"` 473 474 // UseHelmSecrets instructs skaffold to use secrets plugin on deployment. 475 UseHelmSecrets bool `yaml:"useHelmSecrets,omitempty"` 476 477 // Remote specifies whether the chart path is remote, or exists on the host filesystem. 478 // `remote: true` implies `skipBuildDependencies: true`. 479 Remote bool `yaml:"remote,omitempty"` 480 481 // Overrides are key-value pairs. 482 // If present, Skaffold will build a Helm `values` file that overrides 483 // the original and use it to call Helm CLI (`--f` flag). 484 Overrides util.HelmOverrides `yaml:"overrides,omitempty"` 485 486 // Packaged parameters for packaging helm chart (`helm package`). 487 Packaged *HelmPackaged `yaml:"packaged,omitempty"` 488 489 // ImageStrategy adds image configurations to the Helm `values` file. 490 ImageStrategy HelmImageStrategy `yaml:"imageStrategy,omitempty"` 491 } 492 493 // HelmPackaged parameters for packaging helm chart (`helm package`). 494 type HelmPackaged struct { 495 // Version sets the `version` on the chart to this semver version. 496 Version string `yaml:"version,omitempty"` 497 498 // AppVersion sets the `appVersion` on the chart to this version. 499 AppVersion string `yaml:"appVersion,omitempty"` 500 } 501 502 // HelmImageStrategy adds image configurations to the Helm `values` file. 503 type HelmImageStrategy struct { 504 HelmImageConfig `yaml:",inline"` 505 } 506 507 // HelmImageConfig describes an image configuration. 508 type HelmImageConfig struct { 509 // HelmFQNConfig is the image configuration uses the syntax `IMAGE-NAME=IMAGE-REPOSITORY:IMAGE-TAG`. 510 HelmFQNConfig *HelmFQNConfig `yaml:"fqn,omitempty" yamltags:"oneOf=helmImageStrategy"` 511 512 // HelmConventionConfig is the image configuration uses the syntax `IMAGE-NAME.repository=IMAGE-REPOSITORY, IMAGE-NAME.tag=IMAGE-TAG`. 513 HelmConventionConfig *HelmConventionConfig `yaml:"helm,omitempty" yamltags:"oneOf=helmImageStrategy"` 514 } 515 516 // HelmFQNConfig is the image config to use the FullyQualifiedImageName as param to set. 517 type HelmFQNConfig struct { 518 // Property defines the image config. 519 Property string `yaml:"property,omitempty"` 520 } 521 522 // HelmConventionConfig is the image config in the syntax of image.repository and image.tag. 523 type HelmConventionConfig struct { 524 // ExplicitRegistry separates `image.registry` to the image config syntax. Useful for some charts e.g. `postgresql`. 525 ExplicitRegistry bool `yaml:"explicitRegistry,omitempty"` 526 } 527 528 // Artifact are the items that need to be built, along with the context in which 529 // they should be built. 530 type Artifact struct { 531 // ImageName is the name of the image to be built. 532 // For example: `gcr.io/k8s-skaffold/example`. 533 ImageName string `yaml:"image,omitempty" yamltags:"required"` 534 535 // Workspace is the directory containing the artifact's sources. 536 // Defaults to `.`. 537 Workspace string `yaml:"context,omitempty"` 538 539 // Sync *alpha* lists local files synced to pods instead 540 // of triggering an image build when modified. 541 Sync *Sync `yaml:"sync,omitempty"` 542 543 // ArtifactType describes how to build an artifact. 544 ArtifactType `yaml:",inline"` 545 } 546 547 // Sync *alpha* specifies what files to sync into the container. 548 // This is a list of sync rules indicating the intent to sync for source files. 549 type Sync struct { 550 // Manual lists manual sync rules indicating the source and destination. 551 Manual []*SyncRule `yaml:"manual,omitempty" yamltags:"oneOf=sync"` 552 553 // Infer lists file patterns which may be synced into the container. 554 // The container destination is inferred by the builder. 555 // Currently only available for docker artifacts. 556 Infer []string `yaml:"infer,omitempty" yamltags:"oneOf=sync"` 557 } 558 559 // SyncRule specifies which local files to sync to remote folders. 560 type SyncRule struct { 561 // Src is a glob pattern to match local paths against. 562 // Directories should be delimited by `/` on all platforms. 563 // For example: `"css/**/*.css"`. 564 Src string `yaml:"src,omitempty" yamltags:"required"` 565 566 // Dest is the destination path in the container where the files should be synced to. 567 // For example: `"app/"` 568 Dest string `yaml:"dest,omitempty" yamltags:"required"` 569 570 // Strip specifies the path prefix to remove from the source path when 571 // transplanting the files into the destination folder. 572 // For example: `"css/"` 573 Strip string `yaml:"strip,omitempty"` 574 } 575 576 // Profile *beta* profiles are used to override any `build`, `test` or `deploy` configuration. 577 type Profile struct { 578 // Name is a unique profile name. 579 // For example: `profile-prod`. 580 Name string `yaml:"name,omitempty" yamltags:"required"` 581 582 // Pipeline contains the definitions to replace the default skaffold pipeline. 583 Pipeline `yaml:",inline"` 584 585 // Patches lists patches applied to the configuration. 586 // Patches use the JSON patch notation. 587 Patches []JSONPatch `yaml:"patches,omitempty"` 588 589 // Activation criteria by which a profile can be auto-activated. 590 // The profile is auto-activated if any one of the activations are triggered. 591 // An activation is triggered if all of the criteria (env, kubeContext, command) are triggered. 592 Activation []Activation `yaml:"activation,omitempty"` 593 } 594 595 // JSONPatch patch to be applied by a profile. 596 type JSONPatch struct { 597 // Op is the operation carried by the patch: `add`, `remove`, `replace`, `move`, `copy` or `test`. 598 // Defaults to `replace`. 599 Op string `yaml:"op,omitempty"` 600 601 // Path is the position in the yaml where the operation takes place. 602 // For example, this targets the `dockerfile` of the first artifact built. 603 // For example: `/build/artifacts/0/docker/dockerfile`. 604 Path string `yaml:"path,omitempty" yamltags:"required"` 605 606 // From is the source position in the yaml, used for `copy` or `move` operations. 607 From string `yaml:"from,omitempty"` 608 609 // Value is the value to apply. Can be any portion of yaml. 610 Value *util.YamlpatchNode `yaml:"value,omitempty"` 611 } 612 613 // Activation criteria by which a profile is auto-activated. 614 type Activation struct { 615 // Env is a `key=pattern` pair. The profile is auto-activated if an Environment 616 // Variable `key` matches the pattern. If the pattern starts with `!`, activation 617 // happens if the remaining pattern is _not_ matched. The pattern matches if the 618 // Environment Variable value is exactly `pattern`, or the regex `pattern` is 619 // found in it. An empty `pattern` (e.g. `env: "key="`) always only matches if 620 // the Environment Variable is undefined or empty. 621 // For example: `ENV=production` 622 Env string `yaml:"env,omitempty"` 623 624 // KubeContext is a Kubernetes context for which the profile is auto-activated. 625 // For example: `minikube`. 626 KubeContext string `yaml:"kubeContext,omitempty"` 627 628 // Command is a Skaffold command for which the profile is auto-activated. 629 // For example: `dev`. 630 Command string `yaml:"command,omitempty"` 631 } 632 633 // ArtifactType describes how to build an artifact. 634 type ArtifactType struct { 635 // DockerArtifact *beta* describes an artifact built from a Dockerfile. 636 DockerArtifact *DockerArtifact `yaml:"docker,omitempty" yamltags:"oneOf=artifact"` 637 638 // BazelArtifact *beta* requires bazel CLI to be installed and the sources to 639 // contain [Bazel](https://bazel.build/) configuration files. 640 BazelArtifact *BazelArtifact `yaml:"bazel,omitempty" yamltags:"oneOf=artifact"` 641 642 // JibArtifact *alpha* builds images using the 643 // [Jib plugins for Maven or Gradle](https://github.com/GoogleContainerTools/jib/). 644 JibArtifact *JibArtifact `yaml:"jib,omitempty" yamltags:"oneOf=artifact"` 645 646 // KanikoArtifact *alpha* builds images using [kaniko](https://github.com/GoogleContainerTools/kaniko). 647 KanikoArtifact *KanikoArtifact `yaml:"kaniko,omitempty" yamltags:"oneOf=artifact"` 648 649 // CustomArtifact *alpha* builds images using a custom build script written by the user. 650 CustomArtifact *CustomArtifact `yaml:"custom,omitempty" yamltags:"oneOf=artifact"` 651 } 652 653 // CustomArtifact *alpha* describes an artifact built from a custom build script 654 // written by the user. It can be used to build images with builders that aren't directly integrated with skaffold. 655 type CustomArtifact struct { 656 // BuildCommand is the command executed to build the image. 657 BuildCommand string `yaml:"buildCommand,omitempty"` 658 // Dependencies are the file dependencies that skaffold should watch for both rebuilding and file syncing for this artifact. 659 Dependencies *CustomDependencies `yaml:"dependencies,omitempty"` 660 } 661 662 // CustomDependencies *alpha* is used to specify dependencies for an artifact built by a custom build script. 663 // Either `dockerfile` or `paths` should be specified for file watching to work as expected. 664 type CustomDependencies struct { 665 // Dockerfile should be set if the artifact is built from a Dockerfile, from which skaffold can determine dependencies. 666 Dockerfile *DockerfileDependency `yaml:"dockerfile,omitempty" yamltags:"oneOf=dependency"` 667 // Command represents a custom command that skaffold executes to obtain dependencies. The output of this command *must* be a valid JSON array. 668 Command string `yaml:"command,omitempty" yamltags:"oneOf=dependency"` 669 // 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. 670 Paths []string `yaml:"paths,omitempty" yamltags:"oneOf=dependency"` 671 // 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. 672 // Will only work in conjunction with `paths`. 673 Ignore []string `yaml:"ignore,omitempty"` 674 } 675 676 // 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. 677 type DockerfileDependency struct { 678 // Path locates the Dockerfile relative to workspace. 679 Path string `yaml:"path,omitempty"` 680 681 // BuildArgs are arguments passed to the docker build. 682 // It also accepts environment variables via the go template syntax. 683 // For example: `{"key1": "value1", "key2": "value2", "key3": "{{.ENV_VARIABLE}}"}`. 684 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 685 } 686 687 // KanikoArtifact *alpha* describes an artifact built from a Dockerfile, 688 // with kaniko. 689 type KanikoArtifact struct { 690 // AdditionalFlags are additional flags to be passed to Kaniko command line. 691 // See [Kaniko Additional Flags](https://github.com/GoogleContainerTools/kaniko#additional-flags). 692 // Deprecated - instead the named, unique fields should be used, e.g. `buildArgs`, `cache`, `target`. 693 AdditionalFlags []string `yaml:"flags,omitempty"` 694 695 // DockerfilePath locates the Dockerfile relative to workspace. 696 // Defaults to `Dockerfile`. 697 DockerfilePath string `yaml:"dockerfile,omitempty"` 698 699 // Target is the Dockerfile target name to build. 700 Target string `yaml:"target,omitempty"` 701 702 // BuildArgs are arguments passed to the docker build. 703 // It also accepts environment variables via the go template syntax. 704 // For example: `{"key1": "value1", "key2": "value2", "key3": "{{.ENV_VARIABLE}}"}`. 705 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 706 707 // BuildContext is where the build context for this artifact resides. 708 BuildContext *KanikoBuildContext `yaml:"buildContext,omitempty"` 709 710 // Image is the Docker image used by the Kaniko pod. 711 // Defaults to the latest released version of `gcr.io/kaniko-project/executor`. 712 Image string `yaml:"image,omitempty"` 713 714 // Cache configures Kaniko caching. If a cache is specified, Kaniko will 715 // use a remote cache which will speed up builds. 716 Cache *KanikoCache `yaml:"cache,omitempty"` 717 718 // Reproducible is used to strip timestamps out of the built image. 719 Reproducible bool `yaml:"reproducible,omitempty"` 720 } 721 722 // DockerArtifact *beta* describes an artifact built from a Dockerfile, 723 // usually using `docker build`. 724 type DockerArtifact struct { 725 // DockerfilePath locates the Dockerfile relative to workspace. 726 // Defaults to `Dockerfile`. 727 DockerfilePath string `yaml:"dockerfile,omitempty"` 728 729 // Target is the Dockerfile target name to build. 730 Target string `yaml:"target,omitempty"` 731 732 // BuildArgs are arguments passed to the docker build. 733 // For example: `{"key1": "value1", "key2": "value2"}`. 734 BuildArgs map[string]*string `yaml:"buildArgs,omitempty"` 735 736 // NetworkMode is passed through to docker and overrides the 737 // network configuration of docker builder. If unset, use whatever 738 // is configured in the underlying docker daemon. Valid modes are 739 // `host`: use the host's networking stack. 740 // `bridge`: use the bridged network configuration. 741 // `none`: no networking in the container. 742 NetworkMode string `yaml:"network,omitempty"` 743 744 // CacheFrom lists the Docker images used as cache sources. 745 // For example: `["golang:1.10.1-alpine3.7", "alpine:3.7"]`. 746 CacheFrom []string `yaml:"cacheFrom,omitempty"` 747 748 // NoCache used to pass in --no-cache to docker build to prevent caching. 749 NoCache bool `yaml:"noCache,omitempty"` 750 } 751 752 // BazelArtifact *beta* describes an artifact built with [Bazel](https://bazel.build/). 753 type BazelArtifact struct { 754 // BuildTarget is the `bazel build` target to run. 755 // For example: `//:skaffold_example.tar`. 756 BuildTarget string `yaml:"target,omitempty" yamltags:"required"` 757 758 // BuildArgs are additional args to pass to `bazel build`. 759 // For example: `["-flag", "--otherflag"]`. 760 BuildArgs []string `yaml:"args,omitempty"` 761 } 762 763 // JibArtifact *alpha* builds images using the 764 // [Jib plugins for Maven and Gradle](https://github.com/GoogleContainerTools/jib/). 765 type JibArtifact struct { 766 // Project selects which sub-project to build for multi-module builds. 767 Project string `yaml:"project,omitempty"` 768 769 // Flags are additional build flags passed to the builder. 770 // For example: `["--no-build-cache"]`. 771 Flags []string `yaml:"args,omitempty"` 772 773 // Type the Jib builder type; normally determined automatically. Valid types are 774 // `maven`: for Maven. 775 // `gradle`: for Gradle. 776 Type string `yaml:"type,omitempty"` 777 }