Compare commits

...

11 Commits

5 changed files with 106 additions and 21 deletions

View File

@@ -3,14 +3,36 @@ name: OrchestratorCI
on:
workflow_call:
inputs:
runner_id:
droplet_id:
required: true
type: string
secrets:
DO_TOKEN:
required: true
outputs:
done:
description: "The result of the orchestrator job"
value: ${{ jobs.cleanup.outputs.done }} # Gunakan jobs
jobs:
provisioning:
cleanup:
runs-on: gitea-orchestrator
name: OrchestratorCI Cleanup Job
outputs:
done: ${{ steps.cleanup.outputs.done }} # Sesuaikan nama
steps:
- name: Run OrchestratorCI
- name: Run Cleanup OrchestratorCI
id: cleanup
env:
DROPLET_ID: ${{ inputs.droplet_id }}
DO_TOKEN: ${{ secrets.DO_TOKEN }}
run: |
echo "Cleanup Sucess for runner_id: ${{ inputs.runner_id }}"
wget https://github.com/digitalocean/doctl/releases/download/v1.141.0/doctl-1.141.0-linux-amd64.tar.gz
tar -xvf doctl-1.141.0-linux-amd64.tar.gz
mv doctl /usr/local/bin
curl https://git.btwazure.com/btwedutech/workflows/raw/branch/main/orchestrator/cleanup.sh -o cleanup.sh
chmod +x cleanup.sh
./cleanup.sh

View File

@@ -3,13 +3,17 @@ name: OrchestratorCI
on:
workflow_call:
inputs:
spec:
required: true
type: string
runner_id:
required: true
type: string
spec:
required: false
type: string
default: "s-1vcpu-1gb"
image:
required: false
type: string
default: "200895606" # Ubuntu 22.04 x64
secrets:
DO_TOKEN:
required: true
@@ -33,14 +37,22 @@ jobs:
name: OrchestratorCI Job
outputs:
ready: ${{ steps.provisioning.outputs.ready }} # Sesuaikan nama
droplet_id: ${{ steps.provisioning.outputs.droplet_id }}
droplet_ip: ${{ steps.provisioning.outputs.droplet_ip }}
steps:
- name: Run OrchestratorCI
id: provisioning
container: registry.btwazure.com/orchestrator/app:latest
env:
SPEC: ${{ inputs.spec }}
IMAGE: ${{ inputs.image }}
RUNNER_ID: ${{ inputs.runner_id }}
DO_TOKEN: ${{ secrets.DO_TOKEN }}
SSH_PRIVATE_KEY_DECODED: ${{ secrets.SSH_PRIVATE_KEY_DECODED }}
run: |
orchestrating.sh
wget https://github.com/digitalocean/doctl/releases/download/v1.141.0/doctl-1.141.0-linux-amd64.tar.gz
tar -xvf doctl-1.141.0-linux-amd64.tar.gz
mv doctl /usr/local/bin
curl https://git.btwazure.com/btwedutech/workflows/raw/branch/main/orchestrator/orchestrating.sh -o orchestrating.sh
chmod +x orchestrating.sh
./orchestrating.sh

View File

@@ -1,10 +1,8 @@
FROM alpine:latest
RUN apk --no-cache add curl bash git doctl openssh
RUN apk add --no-cache curl bash git doctl openssh
WORKDIR /root
COPY orchestrating.sh /usr/local/bin/orchestrating
COPY cleanup.sh /usr/local/bin/cleanup
RUN chmod 755 /usr/local/bin/orchestrating /usr/local/bin/cleanup
COPY orchestrating.sh /usr/local/bin/orchestrating.sh
COPY cleanup.sh /usr/local/bin/cleanup.sh
RUN chmod 755 /usr/local/bin/orchestrating.sh /usr/local/bin/cleanup.sh
CMD ["tail" ,"-f" ,"/dev/null"]
RUN mkdir -p /var/run/act/

View File

@@ -0,0 +1,53 @@
#!/bin/bash
# Function to check list of required environment variables
check_env_vars() {
local missing_vars=()
for var in "$@"; do
if [ -z "${!var}" ]; then
missing_vars+=("$var")
fi
done
if [ ${#missing_vars[@]} -ne 0 ]; then
echo "Error: The following environment variables are not set: ${missing_vars[*]}"
exit 1
fi
}
# Function to check if doctl is available
check_doctl() {
if ! command -v doctl &> /dev/null; then
echo "Error: doctl is not installed or not in PATH"
echo "Please install doctl: https://docs.digitalocean.com/reference/doctl/how-to/install/"
exit 1
fi
}
# Function to destroy droplet using environment variable
cleanup_droplet() {
# Get droplet ID from environment variable
local droplet_id="$DROPLET_ID"
echo "Destroying droplet with ID: $droplet_id"
# Authenticate doctl
doctl auth init --access-token "$DO_TOKEN"
# Destroy droplet
if doctl compute droplet delete "$droplet_id" --force; then
echo "Droplet $droplet_id destroyed successfully"
return 0
else
echo "Error: Failed to destroy droplet $droplet_id"
return 1
fi
}
# Check required environment variables
check_env_vars "DROPLET_ID" "DO_TOKEN"
# Check if doctl is available
check_doctl
# Execute cleanup
cleanup_droplet

View File

@@ -92,7 +92,7 @@ destroy_droplet() {
create_droplet() {
local name="${1:-runner-${RUNNER_ID}}"
local size="${2:-s-1vcpu-1gb}"
local image="${3:-200811356}"
local image="${3:-200895606}"
local region="${4:-sgp1}"
echo "Creating droplet: $name"
@@ -154,7 +154,7 @@ test_ssh_connection() {
local droplet_ip="$1"
local max_attempts=10
local attempt=1
local wait_time=30
local wait_time=10
echo "Testing SSH connection to $droplet_ip..."
@@ -250,7 +250,7 @@ setup_vm() {
}
# Check required environment variables
check_env_vars "SPEC" "RUNNER_ID" "DO_TOKEN" "SSH_PRIVATE_KEY_DECODED"
check_env_vars "SPEC" "IMAGE" "RUNNER_ID" "DO_TOKEN" "SSH_PRIVATE_KEY_DECODED"
# Check if doctl is available
check_doctl
@@ -258,7 +258,7 @@ check_doctl
# Setup SSH private key
setup_ssh_key
create_droplet
create_droplet "$RUNNER_ID" "$SPEC" "$IMAGE"
# Calculate and display execution time
END_TIME=$(date +%s)