#!/bin/bash # AppSRE runs this script to build an ami and share it with an account set -exv COMMIT_SHA=$(git rev-parse HEAD) COMMIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) ON_JENKINS=true SKIP_CREATE_AMI=false BUILD_RPMS=false # Use gitlab CI variables if available if [ -n "$CI_COMMIT_SHA" ]; then ON_JENKINS=false COMMIT_SHA="$CI_COMMIT_SHA" fi if [ -n "$CI_COMMIT_BRANCH" ]; then COMMIT_BRANCH="$CI_COMMIT_BRANCH" elif [ -n "$GIT_BRANCH" ]; then # Use jenkins CI variables if available COMMIT_BRANCH="${GIT_BRANCH#*/}" fi if [ "$ON_JENKINS" = false ]; then sudo dnf install -y podman jq fi # skip creating AMIs on PRs to save a ton of resources if [[ $COMMIT_BRANCH == PR-* ]]; then SKIP_CREATE_AMI=true fi # decide whether podman or docker should be used if which podman 2>/dev/null >&2; then CONTAINER_RUNTIME=podman elif which docker 2>/dev/null >&2; then CONTAINER_RUNTIME="docker --config=$PWD/.docker" else echo No container runtime found, install podman or docker. exit 2 fi function greenprint { echo -e "\033[1;32m[$(date -Isecond)] ${1}\033[0m" } function cleanup { set +e $CONTAINER_RUNTIME rmi "packer:$COMMIT_SHA" } trap cleanup EXIT # Use prebuilt rpms on CI SKIP_TAGS="rpmcopy" if [ "$ON_JENKINS" = true ]; then # Build RPMs when running on AppSRE's infra BUILD_RPMS=true SKIP_TAGS="rpmrepo" fi if [ "$ON_JENKINS" = true ]; then # jenkins on main: build rhel only PACKER_ONLY_EXCEPT=--only=amazon-ebs.rhel-9-x86_64,amazon-ebs.rhel-9-aarch64 elif [ -n "$CI_COMMIT_BRANCH" ] && [ "$CI_COMMIT_BRANCH" == "main" ]; then # Schutzbot on main: build all except rhel PACKER_ONLY_EXCEPT=--except=amazon-ebs.rhel-9-x86_64,amazon-ebs.rhel-9-aarch64 elif [ -n "$CI_COMMIT_BRANCH" ]; then # Schutzbot but not main, build everything (use dummy except) PACKER_ONLY_EXCEPT=--except=amazon-ebs.dummy fi cat >> worker-packer.sh <"$item/group_vars/all.yml" <dev <