Commit 0839259f authored by nanahira's avatar nanahira

first

parents
/ssh
/config
.git*
Dockerfile
/ssh
/config
stages:
- build
- deploy
variables:
GIT_DEPTH: "1"
CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
build:
stage: build
tags:
- docker
script:
- docker build --pull -t $CONTAINER_TEST_IMAGE .
- docker push $CONTAINER_TEST_IMAGE
deploy_latest:
stage: deploy
tags:
- docker
script:
- docker pull $CONTAINER_TEST_IMAGE
- docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
- docker push $CONTAINER_RELEASE_IMAGE
only:
- master
deploy_tag:
stage: deploy
tags:
- docker
variables:
CONTAINER_TAG_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
script:
- docker pull $CONTAINER_TEST_IMAGE
- docker tag $CONTAINER_TEST_IMAGE $CONTAINER_TAG_IMAGE
- docker push $CONTAINER_TAG_IMAGE
only:
- tags
FROM gitlab/gitlab-runner:latest
RUN apt update && apt -y install gzip wget jq openssh-client && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN wget -O - https://github.com/vmware/govmomi/releases/download/v0.23.0/govc_linux_amd64.gz | gzip -d > /usr/local/bin/govc && \
chmod +x /usr/local/bin/govc
WORKDIR /opt/vc
COPY ./src ./
This diff is collapsed.
# GitLab runner vCenter executor
Gitlab Custom executor based on `govc`.
export GOVC_USERNAME=administrator@example.com
export GOVC_PASSWORD=password_here
export GOVC_URL=vc.example.com
export DATACENTER=example
export VC_HOST=host.example.com
export RESOURCE_POOL=example
export DATASTORE=example-datastore1
export NETWORK=example-runners
export TEMPLATE=runner-template-example
export CPU_COUNT=2
export MEM_COUNT=4096
export SSH_USER=root
export GOVC_INSECURE=1
currentDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source ${currentDir}/../config # config file
VM_ID="runner-$CUSTOM_ENV_CI_RUNNER_ID-project-$CUSTOM_ENV_CI_PROJECT_ID-concurrent-$CUSTOM_ENV_CI_CONCURRENT_PROJECT_ID-job-$CUSTOM_ENV_CI_JOB_ID"
_get_vm_ip() {
govc vm.info "-dc=$DATACENTER" -json "$VM_ID" | jq .VirtualMachines[0].Guest.IpAddress | sed 's/"//g'
}
#!/usr/bin/env bash
# /opt/vc/cleanup.sh
currentDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source ${currentDir}/base # Get variables from base script.
set -eo pipefail
# Destroy VM.
govc vm.destroy "-dc=$DATACENTER" "$VM_ID"
#!/usr/bin/env bash
# /opt/vc/prepare.sh
currentDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source ${currentDir}/base # Get variables from base script.
set -eo pipefail
# trap any error, and mark it as a system failure.
trap "exit $SYSTEM_FAILURE_EXIT_CODE" ERR
# Install the VM
govc vm.clone "-dc=$DATACENTER" -on=true -waitip=true "-vm=$TEMPLATE" "-host=$VC_HOST" "-pool=$RESOURCE_POOL" "-ds=$DATASTORE" "-net=$NETWORK" "-c=$CPU_COUNT" "-m=$MEM_COUNT" "$VM_ID"
# Wait for VM to get IP
echo 'Waiting for VM to get IP'
for i in $(seq 1 30); do
VM_IP=$(_get_vm_ip)
if [ -n "$VM_IP" ]; then
echo "VM got IP: $VM_IP"
break
fi
if [ "$i" == "30" ]; then
echo 'Waited 30 seconds for VM to start, exiting...'
# Inform GitLab Runner that this is a system failure, so it
# should be retried.
exit "$SYSTEM_FAILURE_EXIT_CODE"
fi
sleep 1s
done
# Wait for ssh to become available
echo "Waiting for sshd to be available"
for i in $(seq 1 30); do
if ssh -i "${currentDir}/id_rsa" -o StrictHostKeyChecking=no "$SSH_USER@$VM_IP" >/dev/null 2>/dev/null; then
break
fi
if [ "$i" == "30" ]; then
echo 'Waited 30 seconds for sshd to start, exiting...'
# Inform GitLab Runner that this is a system failure, so it
# should be retried.
exit "$SYSTEM_FAILURE_EXIT_CODE"
fi
sleep 1s
done
#!/usr/bin/env bash
# /opt/vc/run.sh
currentDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source ${currentDir}/base # Get variables from base script.
VM_IP=$(_get_vm_ip)
ssh -i "${currentDir}/ssh/id_rsa" -o StrictHostKeyChecking=no "$SSH_USER@$VM_IP" /bin/bash < "${1}"
if [ $? -ne 0 ]; then
# Exit using the variable, to make the build as failure in GitLab
# CI.
exit "$BUILD_FAILURE_EXIT_CODE"
fi
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment