Skip to content
Snippets Groups Projects
Commit 1d6b9167 authored by Krish Moodbidri's avatar Krish Moodbidri
Browse files

Add manual trigger conditions to GitLab CI/CD pipeline jobs

parent e6d8ff08
No related branches found
No related tags found
1 merge request!98Feat manual trigger pipeline jobs
Pipeline #11569 skipped with stages
...@@ -2,19 +2,34 @@ default: ...@@ -2,19 +2,34 @@ default:
image: $CI_REGISTRY_IMAGE:latest image: $CI_REGISTRY_IMAGE:latest
variables: variables:
DOCKER_DRIVER: overlay2 CAMPUS_IP: 138.26.48.47
BUILD_DATE: $CI_COMMIT_TIMESTAMP CHEAHA_IP: 172.20.10.9
BASE_BUILD_FLAVOR: "standard" TEST_IP: 138.26.49.134
COMPUTE_BUILD_FLAVOR: "compute.large" ANSIBLE_REMOTE_TMP: "/tmp"
GPU_BUILD_FLAVOR: "gpu.medium" AWS_DEFAULT_REGION: "bhm"
OOD_BUILD_FLAVOR: "ood.standard" AWS_HOST: "s3.lts.rc.uab.edu"
PKR_VAR_flavor: "standard" FF_SCRIPT_SECTIONS: "true"
BUILT_BASE_IMAGE_ID: "" OS_AUTH_TYPE: "v3applicationcredential"
ANSIBLE_VAR_TOKEN: $ANSIBLE_PRIVATE_TOKEN OS_AUTH_URL: "https://keystone.cloud.rc.uab.edu:5000/v3"
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY OS_IDENTITY_API_VERSION: "3"
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_KEY OS_INTERFACE: "public"
SELF_REG_APP_KEY: $SELF_REG_KEY OS_REGION_NAME: "bhm1"
SSH_PUB_KEY: $CI_SSH_PUB_KEY OOD_INSTANCE_NETWORK: "knightly-network"
PKR_VAR_flavor: "m1.medium-ruffner"
PKR_VAR_source_image: "CentOS-7-x86_64-GenericCloud-2009"
PKR_VAR_floating_ip_network: "uab-campus"
PKR_VAR_security_groups: '["allow-ssh"]'
PKR_VAR_skip_create_image: "false"
PKR_VAR_ssh_username: "centos"
PKR_VAR_networks: '["8cf2f12e-905d-46d9-bc70-b0897c65f75a"]'
PKR_VAR_image_membership: '["cf6fa1e53d4c40a49f4e0e469c440359"]'
GIT_AUTHOR_NAME: "Gitlab runner"
GIT_AUTHOR_EMAIL: "gitlab@runner"
NUM_SERVER_TO_KEEP: 1
NUM_IMAGE_TO_KEEP: 30
TIMESTAMP_REGEXP: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{6}'
PKR_VAR_root_ssh_key: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAFqqWgmYpEaGtHBeTu27ntVJpYjwq/x5aBefrvfhk8Z9lE3cuZ26vJ9n/9tGE4Zn2Pew1mpZgi6PzfJ3vMt8yA= root@master"
DEV_KEY: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCpncAcYosVHt7HsUcE2XOYDuCi4HQnmFJv279LOcpZgXtZ6o0BM1fe5FgJS0X1ohBXQUFRuYJuJSW/GSmC1K8T+wCrKjZLJdMbqrubHV27diUZfdoVkoJy1vcAQF5nEcoTC7MpAFbBomdn2rsrpgQe8DGiURV7+soqybXV1OsIR3FFf6npnUaskHYT/oVtG9eBOnscyBxoVgbxzlmyoBLXED/sHKFw4nQSF/glYKEFiDu6TRTsBBEGvv23Qo/66QpQiFJ6TNfApNiyY9L1X+Dy8EWU6lozmNgwGDjXQ70Lr6xHnA0QGVALJlHXa6QjpgtpC5Nefsdvtf1hpfFo2VutpbSB+aq9jk3gWNN+XkhrWN5PiwP7YYJNw/WozyfL+IhwjfHZGxkuws+wGR6ZKxlX9W9Vrsq9ncYNKuhy2SdsR6s2XECQtrEQ6ZlX5jRt6Yh5M9ls5fMsWEqknDPmr1Ui6wV7NxprYngo9fLSdYO/ETIO3S6PB0aEHOZOyGitGaM06EmNpvjQn/QkkaVgt/O8wKL1o1AVzXhDMAFvtG6ejppV6kuTUHXFgSGZF6N9fnP91HuytyzC09F+NMWcmnRdrgXlHapjuuL3zzi+XLCQvk8+aYTzBKx1nU2FPMDRZ9sInGmqdTuM002E7qVbaCy4OxcWaAS/L2UVhGnHr+egYw== louistw@uab.edu"
stages: stages:
- pre-build - pre-build
...@@ -29,18 +44,39 @@ workflow: ...@@ -29,18 +44,39 @@ workflow:
- if: $CI_PIPELINE_SOURCE == 'schedule' - if: $CI_PIPELINE_SOURCE == 'schedule'
.get_build_date: &get_build_date .get_build_date: &get_build_date
script: - export BUILD_DATE=$(TZ=America/Chicago date +%Y-%m-%dT%H%M%S)
- export BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") - echo BUILD_DATE=${BUILD_DATE}
- echo "Build Date: $BUILD_DATE"
.update_ansible_repo: &update_ansible_repo .update_ansible_repo: &update_ansible_repo
script: - *get_build_date
- git clone https://gitlab.com/my_ansible_repo.git ansible - |
if [ ! -d $CI_PROJECT_DIR/CRI_XCBC ]; then
git clone https://github.com/uabrc/CRI_XCBC.git
cd CRI_XCBC
git remote add upstream https://github.com/jprorama/CRI_XCBC.git
cd ..
fi
- cd CRI_XCBC
- git config user.name "${GIT_AUTHOR_NAME}"
- git config user.email "${GIT_AUTHOR_EMAIL}"
- git fetch origin uab-prod
- git fetch upstream dev
- git checkout uab-prod
- git merge origin/uab-prod
- git checkout -b integration
- git merge upstream/dev
- export CRI_XCBC_HEAD=$(git rev-parse --short HEAD)
- export CRI_XCBC_dev=$(git rev-parse --short upstream/dev)
- export CRI_XCBC_prod=$(git rev-parse --short origin/uab-prod)
- cd ..
- export PACKER_IMAGE_HEAD=$(git rev-parse --short HEAD)
- echo CRI_XCBC_HEAD=${CRI_XCBC_HEAD} | tee -a $CI_PROJECT_DIR/image.env
- echo CRI_XCBC_dev=${CRI_XCBC_dev} | tee -a $CI_PROJECT_DIR/image.env
- echo CRI_XCBC_prod=${CRI_XCBC_prod} | tee -a $CI_PROJECT_DIR/image.env
- echo PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} | tee -a $CI_PROJECT_DIR/image.env
.get_ansible_files: &get_ansible_files .get_ansible_files: &get_ansible_files
script: - s3cmd get --force -r --host=$AWS_HOST --host-bucket=$AWS_HOST s3://cheaha-cloud-ansible-files/ ansible/files/
- cp ansible/inventory/production .
- cp -R ansible/playbooks .
build_docker_image: build_docker_image:
image: docker:20.10.17 image: docker:20.10.17
...@@ -63,9 +99,10 @@ build_docker_image: ...@@ -63,9 +99,10 @@ build_docker_image:
terraform --version' terraform --version'
- docker push --all-tags $CI_REGISTRY_IMAGE - docker push --all-tags $CI_REGISTRY_IMAGE
rules: rules:
- if: $CI_COMMIT_REF_NAME == "main"
- if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual # Manual trigger for the build changes:
- Dockerfile
allow_failure: true
build_base_image: build_base_image:
stage: build stage: build
...@@ -97,105 +134,34 @@ build_base_image: ...@@ -97,105 +134,34 @@ build_base_image:
artifacts: artifacts:
reports: reports:
dotenv: image.env dotenv: image.env
expire_in: 30 days when: manual # Add manual trigger here
rules:
- if: $CI_COMMIT_REF_NAME == "main"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual # Manual trigger for the build
build_compute_image: create_instance:
stage: build stage: deploy
needs: [build_base_image]
tags: tags:
- build - build
script: script:
- *update_ansible_repo
- *get_ansible_files
- export PKR_VAR_source_image=${BUILT_BASE_IMAGE_ID}
- export REPO_HEAD=$(git rev-parse --short HEAD)
- export PKR_VAR_flavor="${COMPUTE_BUILD_FLAVOR:-$PKR_VAR_flavor}"
- export PKR_VAR_build_instance_name="compute-${REPO_HEAD}"
- export PKR_VAR_image_date_suffix=false
- | - |
if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then if [ -z "${BUILT_BASE_IMAGE_ID}" ]; then
export PKR_VAR_image_name="compute-PR-${CI_MERGE_REQUEST_IID}" exit 0
elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
export PKR_VAR_image_name="compute-${BUILD_DATE}"
fi fi
- packer init openstack-compute - export INSTANCE_NAME="knightly"
- packer validate openstack-compute - export INST_ID=$(openstack server create --flavor $PKR_VAR_flavor --image $BUILT_BASE_IMAGE_ID --network $OOD_INSTANCE_NETWORK --security-group allow-ssh --key-name $DEV_KEY --floating-ip $CAMPUS_IP -f value -c id)
- packer build -machine-readable openstack-compute | tee compute_build.log - echo INST_ID=${INST_ID} | tee -a $CI_PROJECT_DIR/image.env
rules: - echo "Sleeping to allow for instance to initialize..."
- if: $CI_COMMIT_REF_NAME == "main" - sleep 10
- if: $CI_PIPELINE_SOURCE == "merge_request_event" - openstack server list
when: manual # Manual trigger for the build - openstack server show $INST_ID
when: manual # Add manual trigger here
build_gpu_image: destroy_instance:
stage: build stage: cleanup
needs: [build_base_image]
tags: tags:
- build - build
script: script:
- *update_ansible_repo
- *get_ansible_files
- FAILED=false
- export GPU_PLACEHOLDER_NAME="gpu1-placeholder"
- export GPU_PLACEHOLDER_FLAVOR="gpu1.medium"
- export GPU_PLACEHOLDER_IMAGE="CentOS-7-x86_64-GenericCloud-2009"
- export PKR_VAR_source_image=${BUILT_BASE_IMAGE_ID}
- export REPO_HEAD=$(git rev-parse --short HEAD)
- export PKR_VAR_flavor="${GPU_BUILD_FLAVOR:-gpu1.medium}"
- export PKR_VAR_build_instance_name="gpu-${REPO_HEAD}"
- export PKR_VAR_image_date_suffix=false
- | - |
if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then if [ -z "${INST_ID}" ]; then
export PKR_VAR_image_name="gpu-PR-${CI_MERGE_REQUEST_IID}" exit 0
elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
export PKR_VAR_image_name="gpu-${BUILD_DATE}"
fi
- packer init openstack-gpu
- packer validate openstack-gpu
- openstack server delete --wait $GPU_PLACEHOLDER_NAME
- packer build -machine-readable openstack-gpu | tee gpu_build.log || FAILED=true
- openstack server create --image $GPU_PLACEHOLDER_IMAGE --network cicd-net --flavor $GPU_PLACEHOLDER_FLAVOR $GPU_PLACEHOLDER_NAME
- |
if [ "$FAILED" = true ]; then
exit 1
fi fi
rules: - openstack server delete $INST_ID || true
- if: $CI_COMMIT_REF_NAME == "main" when: manual # Add manual trigger here
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual # Manual trigger for the build
build_ood_image:
stage: build
tags:
- build
script:
- *update_ansible_repo
- *get_ansible_files
- >
curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}"
"${CI_API_V4_URL}/projects/2836/repository/files/knightly/raw?ref=main"
-o CRI_XCBC/group_vars/knightly
- 'sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/knightly'
- 'sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/knightly'
- 'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/knightly'
- export PKR_VAR_flavor="${OOD_BUILD_FLAVOR:-$PKR_VAR_flavor}"
- packer init openstack-ood
- packer validate openstack-ood
- |
if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
export PKR_VAR_image_name="ood-PR-${CI_MERGE_REQUEST_IID}"
echo INSTANCE_FLAVOR="${PKR_VAR_flavor}" | tee -a $CI_PROJECT_DIR/image.env
echo OOD_INSTANCE_NAME="ood-PR-${CI_MERGE_REQUEST_IID}" | tee -a $CI_PROJECT_DIR/image.env
export FLOATING_IP=$(openstack floating ip create uab-campus -f value -c floating_ip_address)
echo FLOATING_IP=$FLOATING_IP | tee -a $CI_PROJECT_DIR/image.env
sed -i -E "s/(ood_servername: ).*/\1\"$CI_COMMIT_REF_SLUG.$FLOATING_IP.nip.io\"/" CRI_XCBC/group_vars/knightly
elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
export PKR_VAR_image_name="ood-${BUILD_DATE}"
echo INSTANCE_FLAVOR="${OOD_INSTANCE_FLAVOR:-cpu16-64g}" | tee -a
rules:
- if: $CI_COMMIT_REF_NAME == "main"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual # Manual trigger for the build
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment