Skip to content

Commit

Permalink
add Kubernetes deploy option to Github CD-sites action.
Browse files Browse the repository at this point in the history
  • Loading branch information
jcschaff committed Apr 25, 2024
1 parent c7c5ac4 commit 81bd5b2
Show file tree
Hide file tree
Showing 5 changed files with 247 additions and 294 deletions.
70 changes: 56 additions & 14 deletions .github/workflows/site_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,17 @@ on:
required: true
default: '23'
vcell_site:
description: 'rel or alpha'
description: 'rel or alpha or test'
required: true
default: 'alpha'
server_only:
description: 'Deploy only the server components?'
required: true
default: 'false'
deployment_type:
description: 'swarm or kubernetes (choose kubernetes for vcell_site="test")'
required: true
default: 'swarm'
jobs:
build:
name: Build client installers
Expand Down Expand Up @@ -195,29 +199,67 @@ jobs:
singularity remote login -u ${{ secrets.ACTION_USER }} -p ${{ secrets.ACTION_TOKEN }} oras://ghcr.io
singularity pull $BATCH_SINGULARITY_FILENAME oras://${VCELL_REPO_NAMESPACE}/vcell-batch-singularity:${{ github.event.inputs.vcell_version }}.${{ github.event.inputs.vcell_build }}
singularity pull $OPT_SINGULARITY_FILENAME oras://${VCELL_REPO_NAMESPACE}/vcell-opt-singularity:${{ github.event.inputs.vcell_version }}.${{ github.event.inputs.vcell_build }}
- name: deploy to site
- name: deploy to kubernetes site
if: ${{ github.event.inputs.deployment_type == 'kubernetes' }}
run: |
set -ux
cd docker/swarm
ssh -t ${{ secrets.CD_FULL_USER }}@${VCELL_MANAGER_NODE} sudo docker login -u ${{ secrets.ACTION_USER }} -p ${{ secrets.ACTION_TOKEN }} ghcr.io
if ${{ github.event.inputs.server_only != 'true' }}; then
# build and install the client installers and the singularity images (kubernetes cluster deployments are separate)
./deploy-action-kubernetes.sh \
--ssh-user ${{ secrets.CD_FULL_USER }} \
--install-singularity \
--build-installers \
--installer-deploy-dir $VCELL_INSTALLER_REMOTE_DIR \
${VCELL_MANAGER_NODE} \
./${VCELL_CONFIG_FILE_NAME}
export VCELL_SITE_CAMEL=`cat $VCELL_CONFIG_FILE_NAME | grep VCELL_SITE_CAMEL | cut -d"=" -f2`
ssh ${{ secrets.CD_FULL_USER }}@${VCELL_MANAGER_NODE} \
installer_deploy_dir=$VCELL_INSTALLER_REMOTE_DIR vcell_siteCamel=$VCELL_SITE_CAMEL vcell_version=$VCELL_VERSION vcell_build=$VCELL_BUILD \
'bash -s' < link-installers.sh
else
# build and install only the singularity images (kubernetes cluster deployments are separate)
./deploy-action-kubernetes.sh \
--ssh-user ${{ secrets.CD_FULL_USER }} \
--install-singularity \
${VCELL_MANAGER_NODE} \
./${VCELL_CONFIG_FILE_NAME}
fi
- name: deploy to swarm site
if: ${{ github.event.inputs.deployment_type == 'swarm' }}
run: |
set -ux
cd docker/swarm
ssh -t ${{ secrets.CD_FULL_USER }}@${VCELL_MANAGER_NODE} sudo docker login -u ${{ secrets.ACTION_USER }} -p ${{ secrets.ACTION_TOKEN }} ghcr.io
if ${{ github.event.inputs.server_only != 'true' }}; then
./deploy-action.sh \
--ssh-user ${{ secrets.CD_FULL_USER }} --install-singularity --build-installers --installer-deploy-dir $VCELL_INSTALLER_REMOTE_DIR \
${VCELL_MANAGER_NODE} \
./${VCELL_CONFIG_FILE_NAME} ${VCELL_DEPLOY_REMOTE_DIR}/config/${VCELL_CONFIG_FILE_NAME} \
./docker-compose.yml ${VCELL_DEPLOY_REMOTE_DIR}/config/docker-compose_${VCELL_TAG}.yml \
vcell${VCELL_SITE}
# build and install the client installers, singularity images, and docker swarm configuration
./deploy-action-swarm.sh \
--ssh-user ${{ secrets.CD_FULL_USER }} \
--install-singularity \
--build-installers \
--installer-deploy-dir $VCELL_INSTALLER_REMOTE_DIR \
${VCELL_MANAGER_NODE} \
./${VCELL_CONFIG_FILE_NAME} \
${VCELL_DEPLOY_REMOTE_DIR}/config/${VCELL_CONFIG_FILE_NAME} \
./docker-compose.yml \
${VCELL_DEPLOY_REMOTE_DIR}/config/docker-compose_${VCELL_TAG}.yml \
vcell${VCELL_SITE}
export VCELL_SITE_CAMEL=`cat $VCELL_CONFIG_FILE_NAME | grep VCELL_SITE_CAMEL | cut -d"=" -f2`
ssh ${{ secrets.CD_FULL_USER }}@${VCELL_MANAGER_NODE} \
installer_deploy_dir=$VCELL_INSTALLER_REMOTE_DIR vcell_siteCamel=$VCELL_SITE_CAMEL vcell_version=$VCELL_VERSION vcell_build=$VCELL_BUILD \
'bash -s' < link-installers.sh
else
./deploy-action.sh \
--ssh-user ${{ secrets.CD_FULL_USER }} --install-singularity \
${VCELL_MANAGER_NODE} \
./${VCELL_CONFIG_FILE_NAME} ${VCELL_DEPLOY_REMOTE_DIR}/config/${VCELL_CONFIG_FILE_NAME} \
./docker-compose.yml ${VCELL_DEPLOY_REMOTE_DIR}/config/docker-compose_${VCELL_TAG}.yml \
vcell${VCELL_SITE}
# build and install only the singularity images and docker swarm configuration
./deploy-action-swarm.sh \
--ssh-user ${{ secrets.CD_FULL_USER }} \
--install-singularity \
${VCELL_MANAGER_NODE} \
./${VCELL_CONFIG_FILE_NAME} \
${VCELL_DEPLOY_REMOTE_DIR}/config/${VCELL_CONFIG_FILE_NAME} \
./docker-compose.yml \
${VCELL_DEPLOY_REMOTE_DIR}/config/docker-compose_${VCELL_TAG}.yml \
vcell${VCELL_SITE}
fi
- name: Setup tmate session 3
uses: mxschmitt/action-tmate@v3
Expand Down
177 changes: 177 additions & 0 deletions docker/swarm/deploy-action-kubernetes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
#!/usr/bin/env bash

set -ux

show_help() {
echo "Deploys or updates a deployment of VCell on remote Kubernetes cluster"
echo ""
echo "usage: deploy-action-kubernetes.sh [OPTIONS] REQUIRED-ARGUMENTS"
echo ""
echo " REQUIRED-ARGUMENTS"
echo " manager-node any node for ssh access ( vcellapi-test.cam.uchc.edu )"
echo ""
echo " local-config-file local config file for setting environment"
echo ""
echo " [OPTIONS]"
echo " -h | --help show this message"
echo ""
echo " --ssh-user user user for ssh to node [defaults to current user id using whoami]"
echo " (user must have passwordless sudo for docker commands on manager-node)"
echo ""
echo " --build-installers optionally build client installers and place in ./generated_installers dir"
echo ""
echo " --installer-deploy-dir /path/to/installer/dir"
echo " directory for installers accessible to users"
echo " typically a web-accessible location to download the client installers for each platform"
echo ""
echo " --install-singularity optionally install batch and opt singularity images on each compute node in 'vcell' SLURM partition"
echo ""
echo ""
echo "example:"
echo ""
echo "deploy-action-kubernetes.sh \\"
echo " --ssh-user vcell \\"
echo " --install_singularity \\"
echo " --build_installers --installer_deploy_dir /share/apps/vcell3/apache_webroot/htdocs/webstart/Test \\"
echo " vcellapi-test.cam.uchc.edu \\"
echo " ./server.config"
exit 1
}

if [[ $# -lt 6 ]]; then
show_help
fi

ssh_user=$(whoami)
installer_deploy_dir=
build_installers=false
install_singularity=false
while :; do
case $1 in
-h|--help)
show_help
exit
;;
--ssh-user)
shift
ssh_user=$1
;;
--installer-deploy-dir)
shift
installer_deploy_dir=$1
;;
--install-singularity)
install_singularity=true
;;
--build-installers)
build_installers=true
;;
-?*)
printf 'ERROR: Unknown option: %s\n' "$1" >&2
echo ""
show_help
;;
*) # Default case: No more options, so break out of the loop.
break
esac
shift
done

if [[ $# -ne 6 ]] ; then
show_help
fi

manager_node=$1
local_config_file=$2

# get settings from config file
vcell_siteCamel=$(grep VCELL_SITE_CAMEL "$local_config_file" | cut -d"=" -f2)
vcell_version=$(grep VCELL_VERSION_NUMBER "$local_config_file" | cut -d"=" -f2)
vcell_build=$(grep VCELL_BUILD_NUMBER "$local_config_file" | cut -d"=" -f2)
batch_singularity_filename=$(grep VCELL_BATCH_SINGULARITY_FILENAME "$local_config_file" | cut -d"=" -f2)
opt_singularity_filename=$(grep VCELL_OPT_SINGULARITY_FILENAME "$local_config_file" | cut -d"=" -f2)
slurm_singularity_central_dir=$(grep VCELL_SLURM_CENTRAL_SINGULARITY_DIR "$local_config_file" | cut -d"=" -f2)


#
# install the singularity images on the cluster nodes
#
if [ "$install_singularity" == "true" ]; then

echo ""
pushd ../build/singularity-vm || (echo "pushd ../build/singularity-vm failed"; exit 1)
echo ""
echo "CURRENT DIRECTORY IS $PWD"

#
# get configuration from config file and load into current bash environment
#
echo ""

if [ ! -e "./${batch_singularity_filename}" ]; then
echo "failed to find local batch singularity image file $batch_singularity_filename in ./singularity-vm directory"
exit 1
fi

if ! scp "./${batch_singularity_filename}" "$ssh_user@$manager_node:${slurm_singularity_central_dir}"; then
echo "failed to copy batch singularity image to server"
exit 1
fi

if [ ! -e "./${opt_singularity_filename}" ]; then
echo "failed to find local opt singularity image file $opt_singularity_filename in ./singularity-vm directory"
exit 1
fi

if ! scp "./${opt_singularity_filename}" "$ssh_user@$manager_node:${slurm_singularity_central_dir}"; then
echo "failed to copy opt singularity image to server"
exit 1
fi

echo "popd"
popd || (echo "popd failed"; exit 1)
fi


#
# if --build-installers, then generate client installers, placing then in ./generated_installers
# if --installer-deploy-dir, then also copy installers to $installer_deploy_dir
# *** unimplemented *** (if --link-installers, then also link installers to version independent installer names for each platform)
#
if [ "$build_installers" == "true" ]; then
#
# if --installer-deploy-dir, then copy the installers from ./generated_installers directory to the installer deploy directory
#
if [ ! -z "$installer_deploy_dir" ]; then
# vcell_siteCamel=Alpha
# vcell_version=7.0.0
# vcell_build=19
# version=7_0_0_19
version=$(echo "${vcell_version}_${vcell_build}" | tr '.' _)
if ! scp "./generated_installers/VCell_${vcell_siteCamel}_windows-x64_${version}_64bit.exe" \
"./generated_installers/VCell_${vcell_siteCamel}_unix_${version}_32bit.sh" \
"./generated_installers/VCell_${vcell_siteCamel}_macos_${version}_64bit.dmg" \
"./generated_installers/VCell_${vcell_siteCamel}_windows-x32_${version}_32bit.exe" \
"./generated_installers/VCell_${vcell_siteCamel}_unix_${version}_64bit.sh" \
"./generated_installers/updates.xml" \
"./generated_installers/updates_linux32.xml" \
"./generated_installers/updates_linux64.xml" \
"./generated_installers/updates_mac64.xml" \
"./generated_installers/updates_win32.xml" \
"./generated_installers/updates_win64.xml" \
"./generated_installers/output.txt" \
"./generated_installers/md5sums" \
"./generated_installers/sha256sums" \
"$ssh_user@$manager_node:${installer_deploy_dir}";
then
echo "failed to copy installers";
exit 1;
fi

fi
fi


echo "exited normally"

exit 0
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ set -ux
show_help() {
echo "Deploys or updates a deployment of VCell on remote Docker swarm cluster"
echo ""
echo "usage: deploy.sh [OPTIONS] REQUIRED-ARGUMENTS"
echo "usage: deploy-action-swarm.sh [OPTIONS] REQUIRED-ARGUMENTS"
echo ""
echo " REQUIRED-ARGUMENTS"
echo " manager-node swarm node with manager role ( vcellapi.cam.uchc.edu or vcellapi-beta.cam.uchc.edu )"
Expand Down Expand Up @@ -36,23 +36,26 @@ show_help() {
echo ""
echo " --build-installers optionally build client installers and place in ./generated_installers dir"
echo ""
echo " --installer-deploy-dir /path/to/intstaller/dir"
echo " --installer-deploy-dir /path/to/installer/dir"
echo " directory for installers accessible to users"
echo " typically a web-accessible location to download the client installers for each platform"
echo ""
# echo " --link-installers optionally create symbolic links for newly created client installers"
# echo " for permanent 'latest' web links fr each platform"
# echo ""
echo " --install-singularity optionally install batch and opt singularity images on each compute node in 'vcell' SLURM partition"
echo ""
echo ""
echo "example:"
echo ""
echo "deploy.sh --ssh-user vcell --ssh-key ~/.ssh/schaff_rsa \\"
echo " vcell-service.cam.uchc.edu \\"
echo " ./server.config /usr/local/deploy/Test/server_01.config \\"
echo " ./docker-compose.yml /usr/local/deploy/Test/docker-compose_01.yml \\"
echo " vcelltest"
echo "deploy-action-swarm.sh \\"
echo " --ssh-user vcell \\"
echo " --ssh-key ~/.ssh/schaff_rsa \\"
echo " --install_singularity \\"
echo " --build_installers --installer_deploy_dir /share/apps/vcell3/apache_webroot/htdocs/webstart/Rel \\"
echo " vcellapi.cam.uchc.edu \\"
echo " ./server.config \\"
echo " /usr/local/deploy/Test/server_01.config \\"
echo " ./docker-compose.yml \\"
echo " /usr/local/deploy/Test/docker-compose_01.yml \\"
echo " vcellrel"
exit 1
}

Expand Down Expand Up @@ -90,9 +93,6 @@ while :; do
--build-installers)
build_installers=true
;;
# --link-installers)
# link_installers=true
# ;;
-?*)
printf 'ERROR: Unknown option: %s\n' "$1" >&2
echo ""
Expand Down Expand Up @@ -235,5 +235,3 @@ fi
echo "exited normally"

exit 0


Loading

0 comments on commit 81bd5b2

Please sign in to comment.