diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e5089c4196e97327899844acaf60fb1afd4d743e..3cc38c99894e6614d420816af8e16bd50d26f54a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,19 +2,34 @@ default: image: $CI_REGISTRY_IMAGE:latest variables: - DOCKER_DRIVER: overlay2 - BUILD_DATE: $CI_COMMIT_TIMESTAMP - BASE_BUILD_FLAVOR: "standard" - COMPUTE_BUILD_FLAVOR: "compute.large" - GPU_BUILD_FLAVOR: "gpu.medium" - OOD_BUILD_FLAVOR: "ood.standard" - PKR_VAR_flavor: "standard" - BUILT_BASE_IMAGE_ID: "" - ANSIBLE_VAR_TOKEN: $ANSIBLE_PRIVATE_TOKEN - AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY - AWS_SECRET_ACCESS_KEY: $AWS_SECRET_KEY - SELF_REG_APP_KEY: $SELF_REG_KEY - SSH_PUB_KEY: $CI_SSH_PUB_KEY + CAMPUS_IP: 138.26.48.47 + CHEAHA_IP: 172.20.10.9 + TEST_IP: 138.26.49.134 + ANSIBLE_REMOTE_TMP: "/tmp" + AWS_DEFAULT_REGION: "bhm" + AWS_HOST: "s3.lts.rc.uab.edu" + FF_SCRIPT_SECTIONS: "true" + OS_AUTH_TYPE: "v3applicationcredential" + OS_AUTH_URL: "https://keystone.cloud.rc.uab.edu:5000/v3" + OS_IDENTITY_API_VERSION: "3" + OS_INTERFACE: "public" + OS_REGION_NAME: "bhm1" + 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: - pre-build @@ -29,18 +44,39 @@ workflow: - if: $CI_PIPELINE_SOURCE == 'schedule' .get_build_date: &get_build_date - script: - - export BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") - - echo "Build Date: $BUILD_DATE" + - export BUILD_DATE=$(TZ=America/Chicago date +%Y-%m-%dT%H%M%S) + - echo BUILD_DATE=${BUILD_DATE} .update_ansible_repo: &update_ansible_repo - script: - - git clone https://gitlab.com/my_ansible_repo.git ansible + - *get_build_date + - | + 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 - script: - - cp ansible/inventory/production . - - cp -R ansible/playbooks . + - s3cmd get --force -r --host=$AWS_HOST --host-bucket=$AWS_HOST s3://cheaha-cloud-ansible-files/ ansible/files/ build_docker_image: image: docker:20.10.17 @@ -63,9 +99,10 @@ build_docker_image: terraform --version' - docker push --all-tags $CI_REGISTRY_IMAGE rules: - - if: $CI_COMMIT_REF_NAME == "main" - if: $CI_PIPELINE_SOURCE == "merge_request_event" - when: manual # Manual trigger for the build + changes: + - Dockerfile + allow_failure: true build_base_image: stage: build @@ -97,105 +134,34 @@ build_base_image: artifacts: reports: dotenv: image.env - expire_in: 30 days - rules: - - if: $CI_COMMIT_REF_NAME == "main" - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - when: manual # Manual trigger for the build + when: manual # Add manual trigger here -build_compute_image: - stage: build - needs: [build_base_image] +create_instance: + stage: deploy tags: - build 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 - export PKR_VAR_image_name="compute-PR-${CI_MERGE_REQUEST_IID}" - elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then - export PKR_VAR_image_name="compute-${BUILD_DATE}" + if [ -z "${BUILT_BASE_IMAGE_ID}" ]; then + exit 0 fi - - packer init openstack-compute - - packer validate openstack-compute - - packer build -machine-readable openstack-compute | tee compute_build.log - rules: - - if: $CI_COMMIT_REF_NAME == "main" - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - when: manual # Manual trigger for the build + - export INSTANCE_NAME="knightly" + - 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) + - echo INST_ID=${INST_ID} | tee -a $CI_PROJECT_DIR/image.env + - echo "Sleeping to allow for instance to initialize..." + - sleep 10 + - openstack server list + - openstack server show $INST_ID + when: manual # Add manual trigger here -build_gpu_image: - stage: build - needs: [build_base_image] +destroy_instance: + stage: cleanup tags: - build 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 - export PKR_VAR_image_name="gpu-PR-${CI_MERGE_REQUEST_IID}" - 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 + if [ -z "${INST_ID}" ]; then + exit 0 fi - rules: - - if: $CI_COMMIT_REF_NAME == "main" - - 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 + - openstack server delete $INST_ID || true + when: manual # Add manual trigger here