Skip to content

Commit 3138701

Browse files
committed
Refactor CD scripts to eliminate details.txt dependency and support multi-project Louhi pipelines
1 parent c8d40e5 commit 3138701

2 files changed

Lines changed: 65 additions & 47 deletions

File tree

tools/cd_scripts/e2e_test.sh

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,20 @@ if [[ "$RUN_LIGHT_TEST" == "true" ]]; then
100100
echo "Running light tests only..."
101101
fi
102102

103-
#details.txt file contains the release version and commit hash of the current release.
104-
# Using dynamic bucket.
105-
gcloud storage cp gs://${BUCKET_NAME_TO_USE}/version-detail/details.txt .
106-
# Writing VM instance name to details.txt (Format: release-test-<os-name>)
107-
curl http://metadata.google.internal/computeMetadata/v1/instance/name -H "Metadata-Flavor: Google" >>details.txt
103+
# Fetch parameters from VM metadata attributes or environment variables first.
104+
META_VERSION=$(curl -sfS -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/RELEASE_VERSION" 2>/dev/null || echo "${RELEASE_VERSION:-}")
105+
META_COMMIT=$(curl -sfS -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/COMMIT_HASH" 2>/dev/null || echo "${COMMIT_HASH:-}")
106+
VM_NAME=$(curl -sfS -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/name" 2>/dev/null || hostname)
107+
108+
if [[ -n "$META_VERSION" && -n "$META_COMMIT" ]]; then
109+
echo "$META_VERSION" > details.txt
110+
echo "$META_COMMIT" >> details.txt
111+
echo "$VM_NAME" >> details.txt
112+
else
113+
# Fallback to fetching details.txt from GCS if metadata is not provided
114+
gcloud storage cp gs://${BUCKET_NAME_TO_USE}/version-detail/details.txt . || true
115+
echo "$VM_NAME" >> details.txt
116+
fi
108117

109118
# Function to create the local user
110119
create_user() {

tools/cd_scripts/install_test.sh

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -68,50 +68,67 @@ sudo /usr/local/google-cloud-sdk/install.sh --quiet
6868
export PATH=/usr/local/google-cloud-sdk/bin:$PATH
6969
gcloud version && rm gcloud.tar.gz
7070

71-
#details.txt file contains the release version and commit hash of the current release.
72-
gcloud storage cp gs://gcsfuse-release-packages/version-detail/details.txt .
73-
# Writing VM instance name to details.txt (Format: release-test-<os-name>)
74-
vm_instance_name=$(curl http://metadata.google.internal/computeMetadata/v1/instance/name -H "Metadata-Flavor: Google")
75-
# first line of details.txt contains the release version in the format MAJOR.MINOR.PATCH
76-
to_release_version=$(sed '1q' details.txt | tr -d '\n')
77-
echo $vm_instance_name >> details.txt
71+
# Helper function to fetch metadata value from GCE metadata server
72+
function fetch_meta_data_value() {
73+
local metadata_key=$1
74+
curl -sfS -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/$metadata_key" 2>/dev/null || true
75+
}
76+
77+
# Fetch configuration directly from instance metadata or environment
78+
vm_instance_name=$(curl -sfS -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/name" 2>/dev/null || hostname)
79+
to_release_version=$(fetch_meta_data_value "RELEASE_VERSION")
80+
upload_bucket=$(fetch_meta_data_value "UPLOAD_BUCKET")
81+
upload_bucket=${upload_bucket:-"gcsfuse-release-packages"}
82+
83+
# Backward compatibility fallback if RELEASE_VERSION is not present in metadata
84+
if [[ -z "$to_release_version" ]]; then
85+
if gcloud storage cp "gs://${upload_bucket}/version-detail/details.txt" ./details.txt 2>/dev/null; then
86+
to_release_version=$(sed -n 1p details.txt | tr -d '\r\n')
87+
fi
88+
fi
89+
90+
# Detect OS distribution via /etc/os-release
91+
IS_DEBIAN_OR_UBUNTU=false
92+
if [ -f /etc/os-release ]; then
93+
# shellcheck disable=SC1091
94+
. /etc/os-release
95+
distro_id="${ID:-}"
96+
distro_like="${ID_LIKE:-}"
97+
if [[ "$distro_id" =~ ^(ubuntu|debian)$ ]] || [[ "$distro_like" =~ (ubuntu|debian) ]]; then
98+
IS_DEBIAN_OR_UBUNTU=true
99+
fi
100+
fi
101+
78102
touch ~/logs.txt
79103

80-
# Based on the os type(from vm instance name) in detail.txt, run the following
81-
# commands to install gcsfuse.
82-
if grep -q ubuntu details.txt || grep -q debian details.txt;
83-
then
84-
if grep -q "~beta" details.txt;
85-
then
104+
# Based on the OS type, run the installation commands
105+
if [[ "$IS_DEBIAN_OR_UBUNTU" == true ]]; then
106+
if [[ "$to_release_version" == *"~beta"* ]]; then
86107
export GCSFUSE_REPO=gcsfuse-beta
87108
else
88-
export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
109+
export GCSFUSE_REPO="gcsfuse-$(lsb_release -c -s 2>/dev/null || echo 'bullseye')"
89110
fi
90-
# For ubuntu and debian os
91111

92112
# Don't use apt-key for Debian 11+ and Ubuntu 21+
93-
if { [[ $vm_instance_name == *"debian"* && !( "$vm_instance_name" < "release-test-debian-11") ]]; } || { [[ $vm_instance_name == *"ubuntu"* && !("$vm_instance_name" < "release-test-ubuntu-21") ]]; }
94-
then
113+
if { [[ $vm_instance_name == *"debian"* && !( "$vm_instance_name" < "release-test-debian-11") ]]; } || { [[ $vm_instance_name == *"ubuntu"* && !("$vm_instance_name" < "release-test-ubuntu-21") ]]; }; then
95114
echo "deb [signed-by=/usr/share/keyrings/cloud.google.asc] https://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
96115
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo tee /usr/share/keyrings/cloud.google.asc >> ~/apt_key_logs.txt
97116
else
98117
echo "deb https://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
99118
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - >> ~/apt_key_logs.txt
100119
fi
101120

102-
if grep -q -i warning ~/apt_key_logs.txt;
103-
then
121+
if grep -q -i warning ~/apt_key_logs.txt; then
104122
echo "Failure: Got warning while using apt-key" >> ~/logs.txt
105123
fi
106124

107125
sudo apt-get update
108126
# Install to be released gcsfuse version (It can be a patch to older version so allow downgrades)
109127
sudo apt-get install -y --allow-downgrades gcsfuse="$to_release_version" >> ~/logs.txt
110128
else
111-
# For rhel and centos
112-
sudo yum install fuse
113-
if grep -q "~beta" details.txt;
114-
then
129+
# For RHEL and CentOS
130+
sudo yum install -y fuse
131+
if [[ "$to_release_version" == *"~beta"* ]]; then
115132
YUM_REPO_NAME=gcsfuse-el7-x86_64-beta
116133
else
117134
YUM_REPO_NAME=gcsfuse-el7-x86_64
@@ -126,66 +143,58 @@ repo_gpgcheck=0
126143
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
127144
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
128145
EOF
129-
# Attempt a install first, falling back to a standard downgrade if to be released is older version than already installed (patch releases).
130-
sudo yum install -y gcsfuse-"$to_release_version" || sudo yum downgrade -y gcsfuse-"$to_release_version" >> ~/logs.txt
146+
# Attempt an install first, falling back to a standard downgrade if to-be-released is older version than already installed (patch releases).
147+
sudo yum install -y gcsfuse-"$to_release_version" || sudo yum downgrade -y gcsfuse-"$to_release_version" >> ~/logs.txt
131148
fi
132149

133150
# Verify gcsfuse version (successful installation)
134151
gcsfuse --version |& tee version.txt
135152
installed_version=$(echo $(sed -n 1p version.txt) | cut -d' ' -f3)
136-
if grep -q $installed_version details.txt; then
153+
if [[ "$installed_version" == "$to_release_version"* ]] || [[ "$to_release_version" == *"$installed_version"* ]]; then
137154
echo "GCSFuse to be released version installed correctly." &>> ~/logs.txt
138155
else
139-
echo "Failure detected in to be released gcsfuse version installation." &>> ~/logs.txt
156+
echo "Failure detected in to be released gcsfuse version installation: expected $to_release_version, got $installed_version" &>> ~/logs.txt
140157
fi
141158

142159
# Uninstall gcsfuse and install old version.
143-
if grep -q ubuntu details.txt || grep -q debian details.txt;
144-
then
160+
if [[ "$IS_DEBIAN_OR_UBUNTU" == true ]]; then
145161
sudo apt-get remove -y gcsfuse |& tee -a ~/logs.txt
146162
sudo apt-get install -y gcsfuse=1.2.0 |& tee -a ~/logs.txt
147163
else
148164
sudo yum -y remove gcsfuse |& tee -a ~/logs.txt
149165
sudo yum install -y gcsfuse-1.2.0 |& tee -a ~/logs.txt
150166
fi
151167

152-
# verify old version installation
168+
# Verify old version installation
153169
gcsfuse --version |& tee version.txt
154170
installed_version=$(echo $(sed -n 1p version.txt) | cut -d' ' -f3)
155-
if [ $installed_version == "1.2.0" ]; then
171+
if [ "$installed_version" == "1.2.0" ]; then
156172
echo "GCSFuse old version (1.2.0) installed successfully" &>> ~/logs.txt
157173
else
158174
echo "Failure detected in GCSFuse old version installation." &>> ~/logs.txt
159175
fi
160176

161177
# Upgrade gcsfuse to latest version.
162-
if grep -q ubuntu details.txt || grep -q debian details.txt;
163-
then
178+
if [[ "$IS_DEBIAN_OR_UBUNTU" == true ]]; then
164179
sudo apt-get install --only-upgrade gcsfuse |& tee -a ~/logs.txt
165180
else
166181
sudo yum -y upgrade gcsfuse |& tee -a ~/logs.txt
167182
fi
168183

169184
# Verify that gcsfuse has been upgraded to the to_be_released version using version comparison.
170-
# This is to ensure that the correct version is installed after the upgrade.
171185
gcsfuse --version |& tee version.txt
172186
installed_version=$(echo $(sed -n 1p version.txt) | cut -d' ' -f3)
173-
# The following command compares the two versions:
174-
# 1. `printf` outputs to_release_version and installed_version on a new line.
175-
# 2. `sort -V` sorts them naturally (version sort).
176-
# 3. `tail -n 1` gets the last line, which is the highest version.
177-
# The condition is true if installed_version is greater than or equal to to_release_version.
178187
if [[ "$(printf '%s\n%s\n' "$to_release_version" "$installed_version" | sort -V | tail -n 1)" == "$installed_version" ]]; then
179188
echo "GCSFuse successfully upgraded to latest version: installed_version ($installed_version), to_release_version: ($to_release_version)" &>> ~/logs.txt
180189
else
181190
echo "Failure detected in upgrading to latest gcsfuse version: installed_version ($installed_version), to_release_version: ($to_release_version)" &>> ~/logs.txt
182191
fi
183192

184193
if grep -q Failure ~/logs.txt; then
185-
echo "Test failed" &>> ~/logs.txt ;
194+
echo "Test failed" &>> ~/logs.txt
186195
else
187196
touch success.txt
188-
gcloud storage cp success.txt gs://gcsfuse-release-packages/v$(sed -n 1p details.txt)/installation-test/$(sed -n 3p details.txt)/ ;
197+
gcloud storage cp success.txt "gs://${upload_bucket}/v${to_release_version}/installation-test/${vm_instance_name}/"
189198
fi
190199

191-
gcloud storage cp ~/logs.txt gs://gcsfuse-release-packages/v$(sed -n 1p details.txt)/installation-test/$(sed -n 3p details.txt)/
200+
gcloud storage cp ~/logs.txt "gs://${upload_bucket}/v${to_release_version}/installation-test/${vm_instance_name}/"

0 commit comments

Comments
 (0)