Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(CI): RHCLOUD-26746 Replace build-deploy-common library #1819

Merged
6 changes: 1 addition & 5 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,7 @@ pipeline {
stage('Build the PR commit image') {
steps {
withVault([configuration: configuration, vaultSecrets: secrets]) {
sh '''
curl -s ${CICD_URL}/bootstrap.sh > .cicd_bootstrap.sh
source ./.cicd_bootstrap.sh
source ./build_deploy.sh
'''
sh 'bash -x build_deploy.sh'
}
}
}
Expand Down
17 changes: 8 additions & 9 deletions build_deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,22 @@

set -exv

source 'scripts/deploy/build-deploy-common.sh'

IMAGE_NAME="${IMAGE_NAME:-quay.io/cloudservices/compliance-backend}"
CICD_TOOLS_URL="https://raw.githubusercontent.com/RedHatInsights/cicd-tools/main/src/bootstrap.sh"
# shellcheck source=/dev/null
source <(curl -sSL "$CICD_TOOLS_URL") image_builder

export CICD_IMAGE_BUILDER_IMAGE_NAME='quay.io/cloudservices/compliance-backend'
export CICD_IMAGE_BUILDER_BUILD_ARGS=("IMAGE_TAG=$(cicd::image_builder::get_image_tag)")
# Check if the current Git branch is 'origin/security-compliance'.
if [[ "$GIT_BRANCH" == "origin/security-compliance" ]]; then
# Generate a tag for the Docker image based on the current date and Git commit short hash.
SECURITY_COMPLIANCE_TAG="sc-$(date +%Y%m%d)-$(git rev-parse --short=7 HEAD)"

# Set ADDITIONAL_TAGS to the generated security compliance tag.
ADDITIONAL_TAGS="$SECURITY_COMPLIANCE_TAG"
export CICD_IMAGE_BUILDER_ADDITIONAL_TAGS=("$SECURITY_COMPLIANCE_TAG")
else
# If the current Git branch is not 'origin/security-compliance':
ADDITIONAL_TAGS="latest"
export CICD_IMAGE_BUILDER_ADDITIONAL_TAGS=("latest")
fi

REQUIRED_REGISTRIES_LOCAL=''
BUILD_ARGS=("IMAGE_TAG")

build_deploy_main || exit 1
cicd::image_builder::build_and_push
54 changes: 32 additions & 22 deletions scripts/unit_test.sh
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
#!/bin/bash

if [[ -z "$ghprbPullId" ]]; then
CICD_BOOTSTRAP_REPO_BRANCH='main'
CICD_BOOTSTRAP_REPO_ORG='RedHatInsights'
CICD_TOOLS_URL="https://raw.githubusercontent.com/${CICD_BOOTSTRAP_REPO_ORG}/cicd-tools/${CICD_BOOTSTRAP_REPO_BRANCH}/src/bootstrap.sh"
# shellcheck source=/dev/null
source <(curl -sSL "$CICD_TOOLS_URL") image_builder

if ! cicd::image_builder::is_change_request_context; then
echo "Not running from a context of a PR"
exit 1
fi

APP_ROOT=${APP_ROOT:-.}
cd "$APP_ROOT"
export IMAGE="quay.io/cloudservices/compliance-backend"
IMAGE_TAG="pr-${ghprbPullId}-$(git rev-parse --short=7 HEAD)"
export IMAGE_TAG
export CICD_IMAGE_BUILDER_IMAGE_NAME="quay.io/cloudservices/compliance-backend"

RANDOM_ID=$(md5sum -z <<< "$RANDOM" | cut -c -6)
DB_CONTAINER_NAME="compliance-db-${RANDOM_ID}"
Expand All @@ -24,28 +28,32 @@ DATABASE_USER="compliance"
DATABASE_PASSWORD="changeme"
DATABASE_NAME="compliance-test"

teardown() {

for id in "$DB_CONTAINER_ID" "$TEST_CONTAINER_ID"; do
cicd::container::cmd rm -f "$id" || echo "couldn't delete container ID: $id"
done

function teardown_podman {
podman rm -f "$DB_CONTAINER_ID" || true
podman rm -f "$TEST_CONTAINER_ID" || true
podman pod rm -f "$COMPLIANCE_POD_ID" || true
cicd::container::cmd pod rm -f "$COMPLIANCE_POD_ID" || echo "couldn't delete pod ID: $COMPLIANCE_POD_ID"
}

trap "teardown_podman" EXIT SIGINT SIGTERM
trap "teardown" EXIT SIGINT SIGTERM

if ! COMPLIANCE_POD_ID=$(podman pod create --name "$POD_NAME"); then
if ! COMPLIANCE_POD_ID=$(cicd::container::cmd pod create --name "$POD_NAME"); then
echo "Failed creating pod image"
exit 1
Victoremepunto marked this conversation as resolved.
Show resolved Hide resolved
fi

# Make sure the build stage image is available
SERVICE_IMAGE=$(podman images --filter "label=BUILD_STAGE_OF=${IMAGE_TAG}" -q | head -1)
IMAGE_TAG=$(cicd::image_builder::get_image_tag)
SERVICE_IMAGE=$(cicd::container::cmd images --filter "label=BUILD_STAGE_OF=${IMAGE_TAG}" -q | head -1)

if [[ -z "${SERVICE_IMAGE}" ]]; then
echo "First stage image is not available"
exit 1
fi

if ! DB_CONTAINER_ID=$(podman run -d \
if ! DB_CONTAINER_ID=$(cicd::container::cmd run -d \
--pod "${COMPLIANCE_POD_ID}" \
--rm \
--name "${DB_CONTAINER_NAME}" \
Expand All @@ -59,7 +67,7 @@ if ! DB_CONTAINER_ID=$(podman run -d \
fi

# Do tests
if ! TEST_CONTAINER_ID=$(podman run -d \
if ! TEST_CONTAINER_ID=$(cicd::container::cmd run -d \
--pod "${COMPLIANCE_POD_ID}" \
--rm \
-e HOSTNAME="$TEST_CONTAINER_NAME" \
Expand All @@ -76,7 +84,7 @@ if ! TEST_CONTAINER_ID=$(podman run -d \
-e ghprbActualCommit="${ghprbActualCommit:?}" \
-e GIT_COMMIT="$GIT_COMMIT" \
-e BUILD_NUMBER="$BUILD_NUMBER" \
-e ghprbPullId="$ghprbPullId" \
-e ghprbPullId="${ghprbPullId:?}" \
-e BUILD_URL="$BUILD_URL" \
"${SERVICE_IMAGE}" \
/bin/bash -c 'sleep infinity'); then
Expand All @@ -94,8 +102,8 @@ echo '===================================='
echo '=== Installing Gem Dependencies ===='
echo '===================================='
set +e
podman cp ./. "$TEST_CONTAINER_ID":/opt/app-root/src
podman exec "$TEST_CONTAINER_ID" /bin/bash -c '
cicd::container::cmd cp ./. "$TEST_CONTAINER_ID":/opt/app-root/src
cicd::container::cmd exec "$TEST_CONTAINER_ID" /bin/bash -c '
bundle config set --local without development &&
bundle config set --local with test &&
bundle config set --local deployment "true" &&
Expand All @@ -115,7 +123,7 @@ echo '===================================='
echo '=== Setting Up Database ===='
echo '===================================='
set +e
podman exec "$TEST_CONTAINER_ID" /bin/bash -c 'ACG_CONFIG=/opt/app-root/src/test.json bundle exec rake db:test:prepare'
cicd::container::cmd exec "$TEST_CONTAINER_ID" /bin/bash -c 'ACG_CONFIG=/opt/app-root/src/test.json bundle exec rake db:test:prepare'
TEST_RESULT=$?
set -e
if [[ $TEST_RESULT -ne 0 ]]; then
Expand All @@ -130,10 +138,12 @@ echo '===================================='
echo '=== Setting Up Cyndi ===='
echo '===================================='
set +e
podman cp "$TEST_CONTAINER_ID":/opt/app-root/src/db/cyndi_setup_test.sql "$WORKSPACE/"
podman cp "$WORKSPACE/cyndi_setup_test.sql" "$DB_CONTAINER_ID":/var/lib/pgsql/
cicd::container::cmd cp "$TEST_CONTAINER_ID":/opt/app-root/src/db/cyndi_setup_test.sql "$WORKSPACE/"
cicd::container::cmd cp "$WORKSPACE/cyndi_setup_test.sql" "$DB_CONTAINER_ID":/var/lib/pgsql/
rm "$WORKSPACE/cyndi_setup_test.sql"
podman exec "$DB_CONTAINER_ID" /bin/bash -c 'psql -d $POSTGRESQL_DATABASE < cyndi_setup_test.sql'
# We want to expand $POSTGRESQL_DATABASE within the container's session
# shellcheck disable=SC2016
cicd::container::cmd exec "$DB_CONTAINER_ID" /bin/bash -c 'psql -d $POSTGRESQL_DATABASE < cyndi_setup_test.sql'
TEST_RESULT=$?
set -e
if [[ $TEST_RESULT -ne 0 ]]; then
Expand All @@ -148,11 +158,11 @@ echo '===================================='
echo '=== Running Unit Tests ===='
echo '===================================='
set +e
podman exec "$TEST_CONTAINER_ID" /bin/bash -c 'ACG_CONFIG=/opt/app-root/src/test.json bundle exec rake test:validate'
cicd::container::cmd exec "$TEST_CONTAINER_ID" /bin/bash -c 'ACG_CONFIG=/opt/app-root/src/test.json bundle exec rake test:validate'
TEST_RESULT=$?
set -e
# Copy test reports
podman cp "$TEST_CONTAINER_ID":/opt/app-root/src/test/reports/. "$WORKSPACE"/artifacts
cicd::container::cmd cp "$TEST_CONTAINER_ID":/opt/app-root/src/test/reports/. "$WORKSPACE"/artifacts
# Prefix name of reports with 'junit-' so jenkins analysis picks them up
cd "$WORKSPACE/artifacts"
for FILENAME in TEST-*.xml; do mv "$FILENAME" "junit-$FILENAME"; done
Expand Down
Loading