-
Notifications
You must be signed in to change notification settings - Fork 6.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build: setup bazel remote execution (#14641)
- Loading branch information
1 parent
fe96ed5
commit 0981b66
Showing
5 changed files
with
195 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
# ------------------------------ | ||
# This file is taken from the "bazel-toolchains" repository and is used in order to reduce the | ||
# manual configuration overhead. https://github.com/bazelbuild/bazel-toolchains/tree/master/bazelrc | ||
# ------------------------------ | ||
|
||
# Copyright 2016 The Bazel Authors. All rights reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
# Depending on how many machines are in the remote execution instance, setting | ||
# this higher can make builds faster by allowing more jobs to run in parallel. | ||
# Setting it too high can result in jobs that timeout, however, while waiting | ||
# for a remote machine to execute them. | ||
build:remote --jobs=50 | ||
|
||
# Set several flags related to specifying the platform, toolchain and java | ||
# properties. | ||
# These flags are duplicated rather than imported from (for example) | ||
# %workspace%/configs/ubuntu16_04_clang/1.1/toolchain.bazelrc to make this | ||
# bazelrc a standalone file that can be copied more easily. | ||
# These flags should only be used as is for the rbe-ubuntu16-04 container | ||
# and need to be adapted to work with other toolchain containers. | ||
build:remote --host_javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:jdk8 | ||
build:remote --javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:jdk8 | ||
build:remote --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8 | ||
build:remote --java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8 | ||
build:remote --crosstool_top=@bazel_toolchains//configs/ubuntu16_04_clang/1.1/bazel_0.18.0/default:toolchain | ||
build:remote --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 | ||
# Platform flags: | ||
# The toolchain container used for execution is defined in the target indicated | ||
# by "extra_execution_platforms", "host_platform" and "platforms". | ||
# If you are using your own toolchain container, you need to create a platform | ||
# target with "constraint_values" that allow for the toolchain specified with | ||
# "extra_toolchains" to be selected (given constraints defined in | ||
# "exec_compatible_with"). | ||
# More about platforms: https://docs.bazel.build/versions/master/platforms.html | ||
build:remote --extra_toolchains=@bazel_toolchains//configs/ubuntu16_04_clang/1.1/bazel_0.18.0/cpp:cc-toolchain-clang-x86_64-default | ||
build:remote --extra_execution_platforms=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:rbe_ubuntu1604 | ||
build:remote --host_platform=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:rbe_ubuntu1604 | ||
build:remote --platforms=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:rbe_ubuntu1604 | ||
|
||
# Set various strategies so that all actions execute remotely. Mixing remote | ||
# and local execution will lead to errors unless the toolchain and remote | ||
# machine exactly match the host machine. | ||
build:remote --spawn_strategy=remote | ||
build:remote --strategy=Javac=remote | ||
build:remote --strategy=Closure=remote | ||
build:remote --genrule_strategy=remote | ||
build:remote --define=EXECUTOR=remote | ||
|
||
# Enable the remote cache so action results can be shared across machines, | ||
# developers, and workspaces. | ||
build:remote --remote_cache=remotebuildexecution.googleapis.com | ||
|
||
# Enable remote execution so actions are performed on the remote systems. | ||
build:remote --remote_executor=remotebuildexecution.googleapis.com | ||
|
||
# Enable encryption. | ||
build:remote --tls_enabled=true | ||
|
||
# Enforce stricter environment rules, which eliminates some non-hermetic | ||
# behavior and therefore improves both the remote cache hit rate and the | ||
# correctness and repeatability of the build. | ||
build:remote --experimental_strict_action_env=true | ||
|
||
# Set a higher timeout value, just in case. | ||
build:remote --remote_timeout=3600 | ||
|
||
# Enable authentication. This will pick up application default credentials by | ||
# default. You can use --auth_credentials=some_file.json to use a service | ||
# account credential instead. | ||
build:remote --auth_enabled=true | ||
|
||
# Set flags for uploading to BES in order to view results in the Bazel Build | ||
# Results UI. | ||
build:results --bes_backend="buildeventservice.googleapis.com" | ||
build:results --bes_timeout=60s | ||
build:results --tls_enabled | ||
|
||
# Output BES results url | ||
build:results --bes_results_url="https://source.cloud.google.com/results/invocations/" | ||
|
||
# Set flags for uploading to BES without Remote Build Execution. | ||
build:results-local --bes_backend="buildeventservice.googleapis.com" | ||
build:results-local --bes_timeout=60s | ||
build:results-local --tls_enabled=true | ||
build:results-local --auth_enabled=true | ||
build:results-local --spawn_strategy=local | ||
build:results-local --remote_cache=remotebuildexecution.googleapis.com | ||
build:results-local --remote_timeout=3600 | ||
build:results-local --bes_results_url="https://source.cloud.google.com/results/invocations/" | ||
|
||
# The following flags are only necessary for local docker sandboxing | ||
# with the rbe-ubuntu16-04 container. Use of these flags is still experimental. | ||
build:docker-sandbox --host_javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:jdk8 | ||
build:docker-sandbox --javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:jdk8 | ||
build:docker-sandbox --crosstool_top=@bazel_toolchains//configs/ubuntu16_04_clang/1.1/bazel_0.18.0/default:toolchain | ||
build:docker-sandbox --experimental_docker_image=gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:9bd8ba020af33edb5f11eff0af2f63b3bcb168cd6566d7b27c6685e717787928 | ||
build:docker-sandbox --spawn_strategy=docker | ||
build:docker-sandbox --strategy=Javac=docker | ||
build:docker-sandbox --strategy=Closure=docker | ||
build:docker-sandbox --genrule_strategy=docker | ||
build:docker-sandbox --define=EXECUTOR=remote | ||
build:docker-sandbox --experimental_docker_verbose | ||
build:docker-sandbox --experimental_enable_docker_sandbox | ||
|
||
# The following flags enable the remote cache so action results can be shared | ||
# across machines, developers, and workspaces. | ||
build:remote-cache --remote_cache=remotebuildexecution.googleapis.com | ||
build:remote-cache --tls_enabled=true | ||
build:remote-cache --experimental_strict_action_env=true | ||
build:remote-cache --remote_timeout=3600 | ||
build:remote-cache --auth_enabled=true | ||
build:remote-cache --spawn_strategy=standalone | ||
build:remote-cache --strategy=Javac=standalone | ||
build:remote-cache --strategy=Closure=standalone | ||
build:remote-cache --genrule_strategy=standalone |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
#!/bin/bash | ||
|
||
if [[ -z "${GCP_DECRYPT_TOKEN}" ]]; then | ||
echo "Please specify the \"GCP_DECRYPT_TOKEN\" environment variable when setting up remote " \ | ||
"execution" | ||
exit 1 | ||
fi | ||
|
||
# Decode the GCP token that is needed to authenticate the Bazel remote execution. | ||
openssl aes-256-cbc -d -in .circleci/gcp_token -k ${GCP_DECRYPT_TOKEN} \ | ||
-out /home/circleci/.gcp_credentials | ||
|
||
# Export the "GOOGLE_APPLICATION_CREDENTIALS" variable that should refer to the GCP credentials | ||
# file. Bazel automatically picks up the credentials from that variable. | ||
# https://github.com/bazelbuild/bazel/blob/master/third_party/grpc/include/grpc/grpc_security.h#L134-L137 | ||
echo "export GOOGLE_APPLICATION_CREDENTIALS=/home/circleci/.gcp_credentials" >> $BASH_ENV | ||
|
||
# Update the global Bazel configuration to always use remote execution. | ||
sudo bash -c "echo 'build --config=remote' >> /etc/bazel.bazelrc" |