GoogleContainerTools / skaffold

Easy and Repeatable Kubernetes Development
https://skaffold.dev/
Apache License 2.0
15k stars 1.62k forks source link

can't build bazel image #9162

Closed cristifalcas closed 11 months ago

cristifalcas commented 11 months ago

Expected behavior

To be able to use bazel targets to build images

Actual behavior

skaffold build fails with

the bazel build target should end with .tar, see https://github.com/bazelbuild/rules_docker#using-with-docker-locally

Information

apiVersion: skaffold/v4beta7
kind: Config
build:
  artifacts: 
    - image: test_img
      context: .
      bazel:
        target: "//:app"
  tagPolicy:
    inputDigest: {}
  local:
    concurrency: 0
    tryImportMissing: true

BAZEL.build:

load("//tools/build_rules:container_image.bzl", "container_image")

container_image(
    name = "app",
    base = "@distroless_base_python3_docker//image",
)

Steps to reproduce the behavior

Logs:

DEBU[0000] skaffold API not starting as it's not requested  subtask=-1 task=DevLoop
INFO[0000] Skaffold &{Version:v2.8.0 ConfigVersion:skaffold/v4beta7 GitVersion: GitCommit:ba02de8494a2cfe36249087871e9c7aa80fc535e BuildDate:2023-10-04T08:09:17Z GoVersion:go1.21.0 Compiler:gc Platform:darwin/amd64 User:}  subtask=-1 task=DevLoop
INFO[0000] Loaded Skaffold defaults from "/Users/cfalcas/.skaffold/config"  subtask=-1 task=DevLoop
DEBU[0000] parsed 1 configs from configuration file /Users/cfalcas/development/sciences/skaffold.yaml  subtask=-1 task=DevLoop
INFO[0000] map entry found when executing locate for &{spellcorrection . <nil> {<nil> 0xc000877e00 <nil> <nil> <nil> <nil> <nil>} [] {[] []} [] } of type *latest.Artifact and pointer: 824644069616  subtask=-1 task=DevLoop
INFO[0000] Using kubectl context: gke_project_us-central1_cluster-name  subtask=-1 task=DevLoop
DEBU[0000] getting client config for kubeContext: `gke_project_us-central1_cluster-name`  subtask=-1 task=DevLoop
DEBU[0001] Running command: [minikube version --output=json]  subtask=-1 task=DevLoop
DEBU[0001] Command output: [{"commit":"fd7ecd9c4599bef9f04c0986c4a0187f98a4396e","minikubeVersion":"v1.31.2"}
]  subtask=-1 task=DevLoop
DEBU[0001] Running command: [/usr/local/bin/minikube profile list -o json --user=skaffold]  subtask=-1 task=DevLoop
DEBU[0001] Running command: [/usr/local/bin/minikube profile list -o json --user=skaffold]  subtask=-1 task=DevLoop
DEBU[0001] setting Docker user agent to skaffold-v2.8.0  subtask=-1 task=DevLoop
INFO[0001] DOCKER_HOST env is not set, using the host from docker context.  subtask=-1 task=DevLoop
DEBU[0001] Running command: [docker context inspect --format {{.Endpoints.docker.Host}}]  subtask=-1 task=DevLoop
DEBU[0002] Command output: [unix:///Users/cfalcas/.docker/run/docker.sock
]  subtask=-1 task=DevLoop
INFO[0002] no kpt renderer or deployer found, skipping hydrated-dir creation  subtask=-1 task=DevLoop
DEBU[0002] Running command: [kubectl config view --minify -o jsonpath='{..namespace}']  subtask=-1 task=DevLoop
DEBU[0002] Command output: ['']                          subtask=-1 task=DevLoop
DEBU[0002] CLI platforms provided: ""                    subtask=-1 task=DevLoop
DEBU[0002] platform detection from active kubernetes cluster is not enabled  subtask=-1 task=DevLoop
DEBU[0002] platforms selected for artifact "spellcorrection": ""  subtask=-1 task=DevLoop
DEBU[0002] Using builder: local                          subtask=-1 task=DevLoop
DEBU[0002] push value not present in NewBuilder, defaulting to true because cluster.PushImages is true  subtask=-1 task=DevLoop
INFO[0002] build concurrency first set to 0 parsed from *runner.pipelineBuilderWithHooks[0]  subtask=-1 task=DevLoop
INFO[0002] final build concurrency value is 0            subtask=-1 task=DevLoop
Generating tags...
 - spellcorrection -> DEBU[0002] Running command: [git describe --tags --always]  subtask=-1 task=Build
DEBU[0002] Command output: [a7aaad102a6
]                subtask=-1 task=Build
DEBU[0002] Running command: [git status . --porcelain]   subtask=-1 task=Build
DEBU[0002] Command output: [ M BUILD.bazel
 M apps/spell_correction/kubernetes/BUILD.bazel
 M third_party/google-cloud-sdk/extract.sh
 D third_party/skaffold/BUILD.bazel
 M tools/build_rules/cloud_deploy/skaffold.bzl
 M tools/build_rules/cloud_deploy/skaffold_tpl.env
 M tools/build_rules/cloud_deploy/skaffold_tpl.yaml
 M tools/build_rules/third_party_binaries.bzl
?? .aspect/
?? .scala-build/
?? .vscode/
?? __idei.txt
?? _buildkite-key
?? _download_assets.sh
?? _pagerduty.py
?? _prom_search.py
?? apps/sre_tools/_demo/
?? apps/sre_tools/_ebpf_tools/
?? apps/sre_tools/github_bot/pnpm-lock.lock
?? apps/sre_tools/prometheus/
?? build_profile.json.gz
?? q/
?? skaffold.env
?? skaffold.yaml
?? third_party/_skaffold/
]  subtask=-1 task=Build
us-central1-docker.pkg.dev/project/cluster-name/spellcorrection:a7aaad102a6-dirty
INFO[0002] Tags generated in 527.132932ms                subtask=-1 task=Build
Checking cache...
DEBU[0002] Running command: [bazel query kind('source file', deps('//:app')) union buildfiles(deps('//:app')) --noimplicit_deps --order_output=no --output=label]  subtask=-1 task=Build
DEBU[0003] Command output: [@distroless_base_python3_docker//image:003.tar.gz
@distroless_base_python3_docker//image:000.tar.gz
@distroless_base_python3_docker//image:001.tar.gz
@distroless_base_python3_docker//image:002.tar.gz
@distroless_base_python3_docker//image:config.json
@io_bazel_rules_scala//scala/private:BUILD
@bazel_tools//tools/build_defs/repo:http.bzl
@io_bazel_rules_scala//scala/private:common.bzl
@io_bazel_rules_docker//container:layer.bzl
@io_bazel_rules_scala//scala/private:rules/scala_library.bzl
@io_bazel_rules_scala//scala:providers.bzl
@local_config_platform//:constraints.bzl
@io_bazel_rules_scala//scala/private:phases/phase_runfiles.bzl
@io_bazel_rules_scala_config//:BUILD
@distroless_base_python3_docker//image:BUILD
@io_bazel_rules_docker//container:layer_tools.bzl
@io_bazel_rules_scala//scala/private:rules/scala_test.bzl
@io_bazel_rules_scala//testing:testing.bzl
@io_bazel_rules_scala//scala/private:phases/phase_write_executable.bzl
@io_bazel_rules_docker//skylib:filetype.bzl
@exec_properties//:constants.bzl
@io_bazel_rules_docker//skylib:BUILD
@io_bazel_rules_scala//scala:scala_cross_version.bzl
@io_bazel_rules_scala//testing:BUILD
@io_bazel_rules_scala//scala/private:phases/phase_scalacopts.bzl
@io_bazel_rules_scala//scala/private:rules/scala_repl.bzl
@io_bazel_rules_scala//scala:BUILD
@io_bazel_rules_scala//scala/private/toolchain_deps:toolchain_deps.bzl
@io_bazel_rules_scala//scala/private:rules/scala_doc.bzl
@io_bazel_rules_scala//junit:junit.bzl
//:BUILD.bazel
@io_bazel_rules_docker//container:import.bzl
@io_bazel_rules_scala//testing/toolchain:toolchain.bzl
@io_bazel_rules_scala//scala/private:phases/phase_merge_jars.bzl
@io_bazel_rules_scala//scala:scala.bzl
@io_bazel_rules_scala//scala/private:common_attributes.bzl
@io_bazel_rules_scala//scala/private:phases/phase_coverage.bzl
@bazel_skylib//lib:paths.bzl
@io_bazel_rules_scala//specs2:specs2_junit.bzl
@io_bazel_rules_scala//scala/private:phases/phase_collect_srcjars.bzl
@io_bazel_rules_scala//scala/private:rule_impls.bzl
@io_bazel_rules_scala//junit:BUILD
@io_bazel_rules_scala//scala/private:phases/phases.bzl
//tools/build_rules:BUILD.bazel
@io_bazel_rules_scala//scala/private:phases/phase_scalac_provider.bzl
@io_bazel_rules_scala//specs2:specs2.bzl
@io_bazel_rules_scala//third_party/repositories:repositories.bzl
@bazel_tools//tools/build_defs/repo:BUILD
@io_bazel_rules_scala//third_party/repositories:scala_3_1.bzl
@io_bazel_rules_scala//scala/private:coverage_replacements_provider.bzl
@io_bazel_rules_scala//scala/private:rules/scala_junit_test.bzl
@io_bazel_rules_scala//scala/private:phases/phase_collect_jars.bzl
@io_bazel_rules_docker//skylib:zip.bzl
@bazel_skylib//lib:BUILD
@io_bazel_rules_scala//scala:scala_toolchain.bzl
@io_bazel_rules_scala//scala_proto:scala_proto_toolchain.bzl
@io_bazel_rules_scala//scala/private:common_outputs.bzl
@io_bazel_rules_scala//specs2:BUILD
@io_bazel_rules_scala//scala/private:phases/phase_coverage_runfiles.bzl
//tools/build_rules:container_image.bzl
@io_bazel_rules_scala//scala:semanticdb_provider.bzl
@io_bazel_rules_docker//skylib:docker.bzl
@io_bazel_rules_scala//scala:scala_maven_import_external.bzl
@io_bazel_rules_scala//third_party/repositories:scala_2_13.bzl
@io_bazel_rules_scala//scala/private:phases/phase_semanticdb.bzl
@bazel_tools//tools/jdk:toolchain_utils.bzl
@io_bazel_rules_scala//scala/private:macros/scala_repositories.bzl
@io_bazel_rules_scala//scala/private:phases/phase_scalafmt.bzl
@io_bazel_rules_scala//scala/private:phases/phase_default_info.bzl
@io_bazel_rules_docker//skylib:hash.bzl
@io_bazel_rules_docker//container:BUILD
@io_bazel_rules_scala//scala/private:phases/phase_declare_executable.bzl
@io_bazel_rules_scala//scala/private:dependency.bzl
@io_bazel_rules_scala//scala/private/toolchain_deps:BUILD
@io_bazel_rules_scala//scala:advanced_usage/providers.bzl
@io_bazel_rules_scala//scala/private:phases/phase_collect_exports_jars.bzl
@io_bazel_rules_scala//scala/private:macros/setup_scala_toolchain.bzl
@io_bazel_rules_scala//scala/private:rules/scala_binary.bzl
@io_bazel_rules_scala//scala/private:phases/phase_dependency.bzl
@bazel_tools//tools/build_defs/repo:utils.bzl
@local_config_platform//:BUILD.bazel
@io_bazel_rules_scala//scala/private:phases/phase_jvm_flags.bzl
@io_bazel_rules_scala//third_party/repositories:scala_2_12.bzl
@io_bazel_rules_scala//third_party/repositories:scala_3_2.bzl
@io_bazel_rules_scala//scala/private:phases/phase_test_environment.bzl
@io_bazel_rules_scala//scala/private:resources.bzl
@io_bazel_rules_scala//scala/private:phases/phase_compile.bzl
@io_bazel_rules_docker//skylib:path.bzl
@io_bazel_rules_docker//container:providers.bzl
@io_bazel_rules_scala_config//:config.bzl
@io_bazel_rules_scala//testing:junit.bzl
@io_bazel_rules_scala//scala:jars_to_labels.bzl
@io_bazel_rules_docker//container:image.bzl
@exec_properties//:BUILD
@io_bazel_rules_scala//scala/private:phases/api.bzl
@io_bazel_rules_docker//skylib:label.bzl
@io_bazel_rules_scala//third_party/repositories:scala_3_3.bzl
@bazel_tools//tools/jdk:BUILD
@bazel_skylib//lib:dicts.bzl
@io_bazel_rules_scala//scala:plusone.bzl
@io_bazel_rules_scala//third_party/repositories:scala_2_11.bzl
@io_bazel_rules_scala//testing/toolchain:BUILD
@io_bazel_rules_scala//scala_proto:BUILD
@io_bazel_rules_scala//third_party/repositories:BUILD
@io_bazel_rules_scala//scala/private:paths.bzl
@io_bazel_rules_scala//scala/private:phases/phase_java_wrapper.bzl
@io_bazel_rules_scala//scala/private:phases/phase_write_manifest.bzl
], stderr: Loading: 0 packages loaded
Loading: 0 packages loaded  subtask=-1 task=Build
DEBU[0003] Found dependencies for bazel artifact: [BUILD.bazel tools/build_rules/BUILD.bazel tools/build_rules/container_image.bzl WORKSPACE]  subtask=-1 task=Build
DEBU[0003] Importing artifact us-central1-docker.pkg.dev/project/cluster-name/spellcorrection:a7aaad102a6-dirty from docker registry  subtask=-1 task=Build
DEBU[0008] Could not import artifact from Docker, building instead (pulling image from repository: Error response from daemon: manifest for us-central1-docker.pkg.dev/project/cluster-name/spellcorrection:a7aaad102a6-dirty not found: manifest unknown: Failed to fetch "a7aaad102a6-dirty")  subtask=-1 task=Build
 - spellcorrection: Not found. Building
INFO[0008] Cache check completed in 5.112 seconds        subtask=-1 task=Build
Starting build...
Building [spellcorrection]...
DEBU[0008] Running command: [tput colors]                subtask=-1 task=DevLoop
DEBU[0008] Command output: [256
]                        subtask=-1 task=DevLoop
the bazel build target should end with .tar, see https://github.com/bazelbuild/rules_docker#using-with-docker-locally
DEBU[0008] exporting metrics disabled                    subtask=-1 task=DevLoop
ericzzzzzzz commented 11 months ago

Hi @cristifalcas in your skaffold.yaml file, build.artifacts.bazel.target should be end with .tar like "//:app.tar"

cristifalcas commented 11 months ago

Oh, thank you so much! It now works