mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 05:21:57 +00:00
chore: add db job manifests for argo dev-lti
This commit is contained in:
+6
-1
@@ -15,10 +15,13 @@ COPY . .
|
||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
||||
go build -trimpath -ldflags="-s -w" -o lti-api ./cmd/api
|
||||
|
||||
# Build SEED binary (pastikan cmd/seed ada)
|
||||
# Build SEED binary
|
||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
||||
go build -trimpath -ldflags="-s -w" -o lti-seed ./cmd/seed
|
||||
|
||||
# Build migrate CLI (golang-migrate)
|
||||
RUN GOBIN=/usr/local/bin go install -ldflags="-s -w" github.com/golang-migrate/migrate/v4/cmd/migrate@v4.18.3
|
||||
|
||||
# =========================
|
||||
# Runtime stage
|
||||
# =========================
|
||||
@@ -31,6 +34,8 @@ WORKDIR /app
|
||||
|
||||
COPY --from=builder /app/lti-api /app/lti-api
|
||||
COPY --from=builder /app/lti-seed /app/lti-seed
|
||||
COPY --from=builder /usr/local/bin/migrate /app/migrate
|
||||
COPY --from=builder /app/internal/database/migrations /app/migrations
|
||||
|
||||
USER appuser
|
||||
EXPOSE 8081
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# DB Jobs for dev-lti
|
||||
|
||||
These manifests are intended for EKS + Argo CD deployment flow.
|
||||
|
||||
## Files
|
||||
- `migrate-dev-lti-presync.yaml`: Argo CD `PreSync` migration Job.
|
||||
- `seed-dev-lti-manual.yaml`: manual seed Job.
|
||||
- `fresh-dev-lti-manual.yaml`: manual reset + migrate Job (guarded with `ALLOW_DB_RESET`).
|
||||
|
||||
## Important
|
||||
- Update the image tag in all manifests to the same tag deployed by Argo for each release.
|
||||
- Jobs currently read environment variables from secret `lti-env-dev`.
|
||||
- Required DB env vars: `DB_HOST`, `DB_PORT`, `DB_USER`, `DB_PASSWORD`, `DB_NAME`, optional `DB_SSLMODE`.
|
||||
|
||||
## Manual run
|
||||
Seed:
|
||||
|
||||
```bash
|
||||
kubectl delete job -n dev-lti lti-db-seed-manual --ignore-not-found
|
||||
kubectl apply -f k8s/jobs/seed-dev-lti-manual.yaml
|
||||
kubectl logs -n dev-lti job/lti-db-seed-manual -f
|
||||
```
|
||||
|
||||
Fresh/reset (dev only):
|
||||
|
||||
```bash
|
||||
kubectl delete job -n dev-lti lti-db-fresh-manual --ignore-not-found
|
||||
sed 's/value: "NO"/value: "YES"/' k8s/jobs/fresh-dev-lti-manual.yaml | kubectl apply -f -
|
||||
kubectl logs -n dev-lti job/lti-db-fresh-manual -f
|
||||
```
|
||||
|
||||
## Argo CD note
|
||||
For `migrate-dev-lti-presync.yaml`, keep annotation:
|
||||
|
||||
- `argocd.argoproj.io/hook: PreSync`
|
||||
- `argocd.argoproj.io/hook-delete-policy: BeforeHookCreation,HookSucceeded`
|
||||
|
||||
so migration runs before workload sync.
|
||||
@@ -0,0 +1,38 @@
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: lti-db-fresh-manual
|
||||
namespace: dev-lti
|
||||
spec:
|
||||
backoffLimit: 0
|
||||
ttlSecondsAfterFinished: 300
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
containers:
|
||||
- name: fresh
|
||||
image: 886436954922.dkr.ecr.ap-southeast-3.amazonaws.com/mbugroup/lti-api:dev-f8ca404b
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["/bin/sh", "-c"]
|
||||
args:
|
||||
- |
|
||||
set -eu
|
||||
if [ "${ALLOW_DB_RESET:-}" != "YES" ]; then
|
||||
echo "Refusing to reset DB. Set ALLOW_DB_RESET=YES to continue."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DATABASE_URL="postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?sslmode=${DB_SSLMODE:-disable}"
|
||||
echo "Resetting schema public on ${DB_HOST}:${DB_PORT}/${DB_NAME}"
|
||||
|
||||
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -c "DROP SCHEMA IF EXISTS public CASCADE;"
|
||||
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -c "CREATE SCHEMA public;"
|
||||
|
||||
echo "Running migrations after reset"
|
||||
/app/migrate -path /app/migrations -database "$DATABASE_URL" up
|
||||
env:
|
||||
- name: ALLOW_DB_RESET
|
||||
value: "NO"
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: lti-env-dev
|
||||
@@ -0,0 +1,28 @@
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: lti-db-migrate
|
||||
namespace: dev-lti
|
||||
annotations:
|
||||
argocd.argoproj.io/hook: PreSync
|
||||
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation,HookSucceeded
|
||||
spec:
|
||||
backoffLimit: 1
|
||||
ttlSecondsAfterFinished: 300
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
containers:
|
||||
- name: migrate
|
||||
image: 886436954922.dkr.ecr.ap-southeast-3.amazonaws.com/mbugroup/lti-api:dev-f8ca404b
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["/bin/sh", "-c"]
|
||||
args:
|
||||
- |
|
||||
set -eu
|
||||
DATABASE_URL="postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?sslmode=${DB_SSLMODE:-disable}"
|
||||
echo "Running migrations on ${DB_HOST}:${DB_PORT}/${DB_NAME}"
|
||||
/app/migrate -path /app/migrations -database "$DATABASE_URL" up
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: lti-env-dev
|
||||
@@ -0,0 +1,19 @@
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: lti-db-seed-manual
|
||||
namespace: dev-lti
|
||||
spec:
|
||||
backoffLimit: 1
|
||||
ttlSecondsAfterFinished: 300
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
containers:
|
||||
- name: seed
|
||||
image: 886436954922.dkr.ecr.ap-southeast-3.amazonaws.com/mbugroup/lti-api:dev-f8ca404b
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["/app/lti-seed"]
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: lti-env-dev
|
||||
Reference in New Issue
Block a user