Fix: Handle scenario when no previous image exist
[infra/cicd.git] / jjb / infra / update-jenkins-slave.sh
1 #!/bin/bash
2 set -o errexit
3 set -o nounset
4 set -o pipefail
5
6 DPKG_LOCK="/var/lib/dpkg/lock-frontend"
7 # Wait for other apt process to finish by checking the dpkg lock file.
8 try=0
9 while sudo lsof ${DPKG_LOCK}  > /dev/null 2>&1 ; do
10   echo "DPKG file locked: ${DPKG_LOCK}."
11   echo "   Waiting for another pkg instalaltion process to finish ..."
12   sleep 10
13   if [[ ${try} -gt 60 ]] ; then
14     echo "ERROR: Max number of re-tries reached, exiting..."
15     exit 1
16   fi
17   try=$((try + 1))
18 done
19
20 sudo apt install -y -q=3 python3-minimal python3-pip virtualenv
21
22 # workaround for https://github.com/pypa/virtualenv/issues/1029
23 export PS1=${PS1:-}
24
25 cd "$WORKSPACE"
26 echo "----------------------------------------------------"
27 echo "Info: Create virtualenv to update Jenkins slaves"
28 virtualenv -p python3 --quiet --no-site-packages .venv
29 source .venv/bin/activate
30 pip install python-openstackclient
31 echo "----------------------------------------------------"
32 echo "Info  : Installing packer version ${PACKER_VERSION}"
33 wget -q "https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_amd64.zip" -O /tmp/packer.zip
34 unzip /tmp/packer.zip > /dev/null 2>&1
35 sudo mv -f ./packer /usr/local/bin/packer
36 sudo chmod +x /usr/local/bin/packer
37 echo "----------------------------------------------------"
38 packer -version
39 /bin/rm -f /tmp/packer.zip
40 # shellcheck disable=SC1091
41 source "/tmp/openrc"
42 echo "----------------------------------------------------"
43 echo "Info: Create backup of existing image"
44 cd "$WORKSPACE"
45 BACKUP_ZONE_ID=$(openstack image list --property name=${IMAGE} -f value -c ID)
46 if [ -z ${BACKUP_ZONE_ID} ] ; then
47    echo "Warning: No previous image found to backup"
48 else
49    openstack image set --name "${IMAGE}-backup-$GIT_COMMIT" "$BACKUP_ZONE_ID"
50 fi
51 echo "----------------------------------------------------"
52 echo "Info: Updating the CI slave image"
53 cd "infra/jenkins/slave-setup/${TARGET}/"
54 packer validate *-ubuntu*.json
55 packer build *-ubuntu*.json
56 echo "----------------------------------------------------"