crosvm/ci/kokoro/common.sh
Dennis Kempin 3682372764 ci: Upgrade test-vm to debian bullseye
This change updates the test VM to debian bullseye, primarily to enable
io_uring features that are not available in the 4.16 kernel shipping
with debian buster.

We are not updating the builder containers to bullseye, as newer
versions of qemu fail to start on kokoro. See b/181359683

Since it was needed for debugging this CL, it includes a feature to
debug kokoro builders via SSH. It can be enabled by setting
DEBUG_SSH_KEY from the fusion2 UI.

BUG=b:178228512
TEST=./test_all passes

Change-Id: I22f1678577183a0aace80245a87c31907221cc09
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2721062
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
2021-03-10 03:37:00 +00:00

87 lines
2.8 KiB
Bash
Executable file

#!/bin/bash
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
crosvm_root="${KOKORO_ARTIFACTS_DIR}"/git/crosvm
# Enable SSH access to the kokoro builder.
# Use the fusion2/ UI to trigger a build and set the DEBUG_SSH_KEY environment
# variable to your public key, that will allow you to connect to the builder
# via SSH.
# Note: Access is restricted to the google corporate network.
# Details: https://yaqs.corp.google.com/eng/q/6628551334035456
if [[ ! -z "${DEBUG_SSH_KEY}" ]]; then
echo "${DEBUG_SSH_KEY}" >> ~/.ssh/authorized_keys
external_ip=$(curl -s -H "Metadata-Flavor: Google"
http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip)
echo "SSH Debug enabled. Connect to: kbuilder@${external_ip}"
fi
setup_source() {
if [ -z "${KOKORO_ARTIFACTS_DIR}" ]; then
echo "This script must be run in kokoro"
exit 1
fi
cd "${KOKORO_ARTIFACTS_DIR}"
echo ""
echo "Downloading crosvm dependencies to $(pwd)/cros..."
mkdir cros
cd cros
# repo gets confused by pyenv, make sure we select 3.6.1 as our default
# version.
if command -v pyenv >/dev/null; then
echo "Selecting Python 3.6.1"
pyenv global 3.6.1
fi
curl -s https://storage.googleapis.com/git-repo-downloads/repo >repo
chmod +x repo
./repo init --depth 1 \
-u https://chromium.googlesource.com/chromiumos/manifest.git \
--repo-url https://chromium.googlesource.com/external/repo.git \
-g crosvm || return 1
./repo sync -j8 -c -m "${crosvm_root}/ci/kokoro/manifest.xml" || return 1
# Bind mount source into cros checkout.
echo ""
echo "Mounting crosvm source to $(pwd)/src/platform/crosvm..."
rm -rf src/platform/crosvm && mkdir -p src/platform/crosvm
if command -v bindfs >/dev/null; then
bindfs "${crosvm_root}" src/platform/crosvm || return 1
else
sudo mount --bind "${crosvm_root}" src/platform/crosvm || return 1
fi
}
cleanup() {
# Sleep after the build to allow for SSH debugging to continue.
if [[ ! -z "${DEBUG_SSH_KEY}" ]]; then
echo "Build done. Blocking for SSH debugging."
sleep 1h
fi
if command -v bindfs >/dev/null; then
fusermount -uz "${KOKORO_ARTIFACTS_DIR}/cros/src/platform/crosvm"
else
sudo umount --lazy "${KOKORO_ARTIFACTS_DIR}/cros/src/platform/crosvm"
fi
# List files in the logs directory which are uploaded to sponge.
echo "Build Artifacts:"
ls "${KOKORO_ARTIFACTS_DIR}/logs"
}
# Setup source when the script is loaded. Clean up on exit.
trap cleanup EXIT
setup_source || {
echo "Failed to setup_source"
exit 1
}
# Set logs directory so we can copy them to sponge
export CROSVM_BUILDER_LOGS_DIR="${KOKORO_ARTIFACTS_DIR}/logs"
cd "${KOKORO_ARTIFACTS_DIR}/cros/src/platform/crosvm"