first commit
This commit is contained in:
18
deploy/scripts/build-push.sh
Normal file
18
deploy/scripts/build-push.sh
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
source "$(dirname "$0")/common.sh"
|
||||
require_command docker
|
||||
validate_environment
|
||||
|
||||
REGISTRY="${REGISTRY:?Defina REGISTRY, por exemplo: tim.azurecr.io}"
|
||||
IMAGE_NAME="${IMAGE_NAME:-agent-framework-evaluator}"
|
||||
IMAGE_TAG="${IMAGE_TAG:-$(git -C "${ROOT_DIR}" rev-parse --short HEAD 2>/dev/null || date +%Y%m%d%H%M%S)}"
|
||||
IMAGE="${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
|
||||
PLATFORM="${PLATFORM:-linux/amd64}"
|
||||
|
||||
echo "Construindo ${IMAGE} para ${PLATFORM}..."
|
||||
docker build --platform "${PLATFORM}" -t "${IMAGE}" "${ROOT_DIR}"
|
||||
|
||||
echo "Enviando ${IMAGE}..."
|
||||
docker push "${IMAGE}"
|
||||
echo "IMAGE=${IMAGE}"
|
||||
16
deploy/scripts/common.sh
Normal file
16
deploy/scripts/common.sh
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
ENVIRONMENT="${ENVIRONMENT:-${1:-dev}}"
|
||||
NAMESPACE="${NAMESPACE:-agent-evaluator-${ENVIRONMENT}}"
|
||||
OVERLAY_DIR="${ROOT_DIR}/deploy/k8s/overlays/${ENVIRONMENT}"
|
||||
|
||||
require_command() {
|
||||
command -v "$1" >/dev/null 2>&1 || { echo "Erro: comando '$1' não encontrado." >&2; exit 1; }
|
||||
}
|
||||
|
||||
validate_environment() {
|
||||
case "${ENVIRONMENT}" in dev|hml|prod) ;; *) echo "Ambiente inválido: ${ENVIRONMENT}. Use dev, hml ou prod." >&2; exit 1;; esac
|
||||
[[ -d "${OVERLAY_DIR}" ]] || { echo "Overlay não encontrado: ${OVERLAY_DIR}" >&2; exit 1; }
|
||||
}
|
||||
51
deploy/scripts/create-secrets.sh
Normal file
51
deploy/scripts/create-secrets.sh
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
source "$(dirname "$0")/common.sh"
|
||||
require_command kubectl
|
||||
validate_environment
|
||||
|
||||
ENV_FILE="${ENV_FILE:-${ROOT_DIR}/deploy/env/evaluator.env}"
|
||||
WALLET_DIR="${WALLET_DIR:-${ROOT_DIR}/deploy/wallet}"
|
||||
|
||||
[[ -f "${ENV_FILE}" ]] || { echo "Arquivo de variáveis não encontrado: ${ENV_FILE}" >&2; exit 1; }
|
||||
[[ -d "${WALLET_DIR}" ]] || { echo "Diretório do wallet não encontrado: ${WALLET_DIR}" >&2; exit 1; }
|
||||
|
||||
kubectl create namespace "${NAMESPACE}" --dry-run=client -o yaml | kubectl apply -f -
|
||||
kubectl -n "${NAMESPACE}" create secret generic evaluator-secrets \
|
||||
--from-env-file="${ENV_FILE}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
wallet_args=()
|
||||
while IFS= read -r -d '' file; do
|
||||
wallet_args+=("--from-file=$(basename "${file}")=${file}")
|
||||
done < <(find "${WALLET_DIR}" -maxdepth 1 -type f -print0)
|
||||
|
||||
((${#wallet_args[@]} > 0)) || { echo "Nenhum arquivo encontrado em ${WALLET_DIR}" >&2; exit 1; }
|
||||
kubectl -n "${NAMESPACE}" create secret generic evaluator-wallet \
|
||||
"${wallet_args[@]}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
|
||||
|
||||
LANGFUSE_CREDENTIALS_FILE="${LANGFUSE_CREDENTIALS_FILE:-${ROOT_DIR}/deploy/langfuse/langfuse_credentials.yaml}"
|
||||
if [[ -f "${LANGFUSE_CREDENTIALS_FILE}" ]]; then
|
||||
kubectl -n "${NAMESPACE}" create secret generic evaluator-langfuse \
|
||||
--from-file=langfuse_credentials.yaml="${LANGFUSE_CREDENTIALS_FILE}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
echo "Credenciais Langfuse atualizadas no secret evaluator-langfuse."
|
||||
else
|
||||
echo "Arquivo de credenciais Langfuse não encontrado: ${LANGFUSE_CREDENTIALS_FILE}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
GCP_CREDENTIALS_FILE="${GCP_CREDENTIALS_FILE:-${ROOT_DIR}/deploy/gcp/GCP_ACCESS_KEY.json}"
|
||||
if [[ -f "${GCP_CREDENTIALS_FILE}" ]]; then
|
||||
kubectl -n "${NAMESPACE}" create secret generic evaluator-gcp \
|
||||
--from-file=GCP_ACCESS_KEY.json="${GCP_CREDENTIALS_FILE}" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
echo "Credencial GCP atualizada no secret evaluator-gcp."
|
||||
else
|
||||
echo "Aviso: credencial GCP não encontrada em ${GCP_CREDENTIALS_FILE}; secret evaluator-gcp não foi alterado." >&2
|
||||
fi
|
||||
|
||||
echo "Secrets atualizados no namespace ${NAMESPACE}."
|
||||
30
deploy/scripts/deploy.sh
Normal file
30
deploy/scripts/deploy.sh
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
source "$(dirname "$0")/common.sh"
|
||||
require_command kubectl
|
||||
validate_environment
|
||||
|
||||
REGISTRY="${REGISTRY:?Defina REGISTRY, por exemplo: tim.azurecr.io}"
|
||||
IMAGE_NAME="${IMAGE_NAME:-agent-framework-evaluator}"
|
||||
IMAGE_TAG="${IMAGE_TAG:?Defina IMAGE_TAG com a versão já publicada}"
|
||||
IMAGE="${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
|
||||
RUN_INIT_DB="${RUN_INIT_DB:-true}"
|
||||
TIMEOUT="${TIMEOUT:-300s}"
|
||||
|
||||
kubectl kustomize "${OVERLAY_DIR}" \
|
||||
| sed "s#REPLACE_REGISTRY/agent-framework-evaluator:[^[:space:]]*#${IMAGE}#g" \
|
||||
| kubectl apply -f -
|
||||
|
||||
if [[ "${RUN_INIT_DB}" == "true" ]]; then
|
||||
job_name="evaluator-init-db-${ENVIRONMENT}-$(date +%s)"
|
||||
sed -e "s#agent-evaluator#${NAMESPACE}#g" \
|
||||
-e "s#name: evaluator-init-db#name: ${job_name}#" \
|
||||
-e "s#agent-framework-evaluator:latest#${IMAGE}#" \
|
||||
"${ROOT_DIR}/deploy/k8s/base/init-db-job.yaml" | kubectl apply -f -
|
||||
kubectl -n "${NAMESPACE}" wait --for=condition=complete "job/${job_name}" --timeout="${TIMEOUT}" || {
|
||||
kubectl -n "${NAMESPACE}" logs "job/${job_name}" --all-containers=true || true
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
kubectl -n "${NAMESPACE}" get cronjob,pod,jobs
|
||||
11
deploy/scripts/run-now.sh
Normal file
11
deploy/scripts/run-now.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
source "$(dirname "$0")/common.sh"
|
||||
require_command kubectl
|
||||
validate_environment
|
||||
|
||||
CRONJOB="${CRONJOB:-evaluator-batch}"
|
||||
JOB_NAME="${JOB_NAME:-evaluator-manual-${ENVIRONMENT}-$(date +%Y%m%d%H%M%S)}"
|
||||
kubectl -n "${NAMESPACE}" create job --from="cronjob/${CRONJOB}" "${JOB_NAME}"
|
||||
echo "Job criado: ${JOB_NAME}"
|
||||
echo "Logs: kubectl -n ${NAMESPACE} logs -f job/${JOB_NAME}"
|
||||
8
deploy/scripts/status.sh
Normal file
8
deploy/scripts/status.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
source "$(dirname "$0")/common.sh"
|
||||
require_command kubectl
|
||||
validate_environment
|
||||
kubectl -n "${NAMESPACE}" get cronjob,jobs,pods,deploy,svc
|
||||
printf '\nEventos recentes:\n'
|
||||
kubectl -n "${NAMESPACE}" get events --sort-by=.lastTimestamp | tail -30
|
||||
10
deploy/scripts/undeploy.sh
Normal file
10
deploy/scripts/undeploy.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
source "$(dirname "$0")/common.sh"
|
||||
require_command kubectl
|
||||
validate_environment
|
||||
|
||||
kubectl delete -k "${OVERLAY_DIR}" --ignore-not-found
|
||||
if [[ "${DELETE_NAMESPACE:-false}" == "true" ]]; then
|
||||
kubectl delete namespace "${NAMESPACE}" --ignore-not-found
|
||||
fi
|
||||
Reference in New Issue
Block a user