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