Skip to content

Commit

Permalink
Jenkinsfile POC for build deploy
Browse files Browse the repository at this point in the history
  • Loading branch information
maknop committed Aug 4, 2023
1 parent f2edb10 commit 7e2d7c7
Show file tree
Hide file tree
Showing 7 changed files with 273 additions and 4 deletions.
156 changes: 152 additions & 4 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,170 @@ def secrets = [
[path: params.VAULT_PATH_RHR_PULL, engineVersion: 1, secretValues: [
[envVar: 'RH_REGISTRY_USER', vaultKey: 'user'],
[envVar: 'RH_REGISTRY_TOKEN', vaultKey: 'token']]],
[path: params.VAULT_PATH_CHROME_CYPRESS, engineVersion: 1, secretValues: [
[envVar: 'CHROME_ACCOUNT', vaultKey: 'account'],
[envVar: 'CHROME_PASSWORD', vaultKey: 'password']]],
]

def configuration = [vaultUrl: params.VAULT_ADDRESS, vaultCredentialId: params.VAULT_CREDS_ID, engineVersion: 1]

pipeline {
agent { label 'insights' }
agent none
options {
timestamps()
}
environment {
PROJECT_NAME="insights-chrome"

COMMON_BUILDER="https://raw.githubusercontent.com/RedHatInsights/insights-frontend-builder-common/master"

MASTER_BRANCH="master"
MASTER_STABLE_BRANCH="master-stable"

NODE_BASE_IMAGE="registry.access.redhat.com/ubi9/nodejs-18:1-53"
CYPRESS_TEST_IMAGE="quay.io/cloudservices/cypress-e2e-image:06b70f3"

CICD_URL="https://raw.githubusercontent.com/RedHatInsights/cicd-tools/main"
}

stages {
stage('Placeholder') {
steps {
sh 'echo Placeholder Jenkinsfile'
stage('Tests/Build for Frontends') {
parallel {
stage('Unit Testing') {
agent { label 'insights' }
environment {
IMG_TAG=sh(script: "git rev-parse --short=8 HEAD", returnStdout: true).trim()
TEST_CONT="${PROJECT_NAME}-unit-tests-${IMG_TAG}"
}
steps {
script {
withVault([configuration: configuration, vaultSecrets: secrets]) {
sh '''
./ci/unit_tests.sh
'''
}
}
}
}

stage('Lint') {
agent { label 'insights' }
environment {
IMG_TAG=sh(script: "git rev-parse --short=8 HEAD", returnStdout: true).trim()
TEST_CONT="${PROJECT_NAME}-lint-${IMG_TAG}"
}
steps {
script {
withVault([configuration: configuration, vaultSecrets: secrets]) {
sh '''
./ci/lint.sh
'''
}
}
}
}
stage('Build') {
agent { label 'insights' }
environment {
IMG_TAG=sh(script: "git rev-parse --short=8 HEAD", returnStdout: true).trim()
TEST_CONT="${PROJECT_NAME}-build-${IMG_TAG}"
}
steps {
script {
withVault([configuration: configuration, vaultSecrets: secrets]) {
sh '''
./ci/build.sh
'''
}
}
}
}

stage('Cypress Component Testing') {
agent { label 'insights' }
environment {
IMG_TAG=sh(script: "git rev-parse --short=8 HEAD", returnStdout: true).trim()
TEST_CONT="${PROJECT_NAME}-cypress-component-tests-${IMG_TAG}"
}
steps {
script {
withVault([configuration: configuration, vaultSecrets: secrets]) {
sh '''
./ci/cypress_component_tests.sh
'''
}
}
}
}

stage('Cypress E2E Tests') {
agent { label 'insights' }
environment {
IMG_TAG=sh(script: "git rev-parse --short=8 HEAD", returnStdout: true).trim()
TEST_CONT="${PROJECT_NAME}-cypress-e2e-tests-${IMG_TAG}"

COMPONENT="insights-chrome-frontend"
IMAGE="quay.io/cloudservices/${COMPONENT}"
INCLUDE_CHROME_CONFIG="true"
}
steps {
script {
withVault([configuration: configuration, vaultSecrets: secrets]) {
sh '''
./ci/cypress_e2e_tests.sh
'''
}
}
}
}

stage('IQE Tests') {
agent { label 'insights' }
environment {
IMG_TAG=sh(script: "git rev-parse --short=8 HEAD", returnStdout: true).trim()
TEST_CONT="${PROJECT_NAME}-cypress-e2e-tests-${IMG_TAG}"

// Deploy to an ephemeral namespace for testing
IMAGE="quay.io/cloudservices/rbac"
GIT_COMMIT="master"
IMAGE_TAG="latest"
DEPLOY_FRONTENDS=true

// Run tests with ClowdJobInvocation
IQE_IMAGE_TAG="platform-ui"
IQE_PLUGINS="platform_ui"
IQE_MARKER_EXPRESSION="smoke"
// xclude progressive profile tests
// Exclude APIdocs tests
IQE_FILTER_EXPRESSION="not (test_progressive or test_apidocs)"
IQE_ENV="ephemeral"
IQE_SELENIUM="true"
IQE_CJI_TIMEOUT="30m"
DEPLOY_TIMEOUT="900" // 15min

// Ensure that we deploy the right component for testing
APP_NAME="rbac"
COMPONENT="rbac"
COMPONENT_NAME="rbac"
}
steps {
script {
withVault([configuration: configuration, vaultSecrets: secrets]) {
sh '''
./ci/iqe_tests.sh
'''
}
}
}
}
}
}
}

post {
always {
archiveArtifacts artifacts: 'artifacts/**/*', fingerprint: true
junit skipPublishingChecks: true, testResults: 'artifacts/junit-*.xml'
}
}
}
12 changes: 12 additions & 0 deletions ci/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash

set -x

docker run --name "${TEST_CONT}" -d -i --rm "${NODE_BASE_IMAGE}" /bin/sh

docker cp . "${TEST_CONT}:/opt/app-root/src/"

docker exec -i -w "/opt/app-root/src/" "${TEST_CONT}" sh -c "npm ci"
docker exec -i -w "/opt/app-root/src/" "${TEST_CONT}" sh -c "npm run build"

docker stop $TEST_CONT
22 changes: 22 additions & 0 deletions ci/cypress_component_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/bash

set -x

docker login -u="$QUAY_USER" -p="$QUAY_TOKEN" quay.io

docker run --name $TEST_CONT -d -i --rm "${CYPRESS_TEST_IMAGE}" /bin/bash

docker cp -a . "${TEST_CONT}:/e2e/"

docker exec -i $TEST_CONT sh -c "npm ci"
docker exec -i $TEST_CONT sh -c "npm run test:ct"

RESULT=$?

if [[ $RESULT -ne 0 ]]; then
exit $RESULT
fi

docker stop $TEST_CONT

exit $RESULT
28 changes: 28 additions & 0 deletions ci/cypress_e2e_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/bash

set -x

docker login -u="$QUAY_USER" -p="$QUAY_TOKEN" quay.io

docker run \
--name $TEST_CONT \
-e CHROME_ACCOUNT=$CHROME_ACCOUNT \
-e CHROME_PASSWORD=$CHROME_PASSWORD \
--add-host stage.foo.redhat.com:127.0.0.1 \
--add-host prod.foo.redhat.com:127.0.0.1 \
-d -i --rm \
--entrypoint bash \
"${CYPRESS_TEST_IMAGE}"

docker cp -a . "${TEST_CONT}:/e2e/"

docker exec -i $TEST_CONT sh -c "npm ci"
docker exec -i $TEST_CONT sh -c "npm run test:e2e"

RESULT=$?

if [[ $RESULT -ne 0 ]]; then
exit $RESULT
fi

docker stop $TEST_CONT
27 changes: 27 additions & 0 deletions ci/iqe_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/bin/bash

set -x

curl -s $CICD_URL/bootstrap.sh > .cicd_bootstrap.sh
source ./.cicd_bootstrap.sh

GIT_COMMIT="master"
IMAGE_TAG="latest"

source $CICD_ROOT/deploy_ephemeral_env.sh
source $CICD_ROOT/cji_smoke_test.sh

mkdir -p $WORKSPACE/artifacts
cat << EOF > $WORKSPACE/artifacts/junit-dummy.xml
<testsuite tests="1">
<testcase classname="dummy" name="dummytest"/>
</testsuite>
EOF

RESULT=$?

if [[ $RESULT -ne 0 ]]; then
exit $RESULT
fi

exit $RESULT
12 changes: 12 additions & 0 deletions ci/lint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash

set -x

docker run --name $TEST_CONT -d -i --rm $NODE_BASE_IMAGE /bin/sh

docker cp . "${TEST_CONT}:/opt/app-root/src/"

docker exec -i -w "/opt/app-root/src/" $TEST_CONT sh -c "npm ci"
docker exec -i -w "/opt/app-root/src/" $TEST_CONT sh -c "npm run lint"

docker stop $TEST_CONT
20 changes: 20 additions & 0 deletions ci/unit_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash

set -x

docker run --name $TEST_CONT -d -i --rm "${NODE_BASE_IMAGE}" /bin/sh

docker cp . "${TEST_CONT}:/opt/app-root/src/"

docker exec -i -w "/opt/app-root/src/" $TEST_CONT sh -c "npm ci"
docker exec -i -w "/opt/app-root/src/" $TEST_CONT sh -c "npm run test -- --coverage"

RESULT=$?

if [[ $RESULT -ne 0 ]]; then
exit $RESULT
fi

docker stop $TEST_CONT

exit $RESULT

0 comments on commit 7e2d7c7

Please sign in to comment.