# Willyu1007 AI First Template Devops Deploy Job

> Scaffold: Job Deployment

- Skill: `tomevault-io/willyu1007-ai-first-template-devops-deploy-job` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/willyu1007-ai-first-template-devops-deploy-job`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/willyu1007-ai-first-template-devops-deploy-job/raw
- Safety review: pending (external: skill-scanner PASS, skillspector CAUTION)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/willyu1007-ai-first-template-devops-deploy-job

---

# Scaffold: Job Deployment

This document is an entrypoint for job deployment scaffolding. The step-by-step flow is in
/.system/skills/ssot/repo/scaffolding/devops-deploy-job/SKILL.md.

---

## 1. Purpose & Scope

**Purpose**: Generate deployment skeleton for running a batch job in target environments (Kubernetes CronJob, scheduled tasks, etc.).

**Scope**:
- Creates job deployment configuration files
- Sets up schedule configuration
- Generates deployment scripts
- Records deployment decisions in workdocs

**Out of scope**:
- Actual deployment execution (requires human with credentials)
- Packaging/Docker build (see devops_packaging_job.md)
- HTTP service deployment (see devops_deploy_service.md)
- Infrastructure provisioning

---

## 2. Inputs & Preconditions

### Required Inputs

| Parameter | Type | Description |
|-----------|------|-------------|
| `job_name` | string | Job identifier (matches packaging) |
| `environment` | string | Target environment: `dev`, `staging`, `prod` |

### Optional Inputs

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `image_tag` | string | `latest` | Docker image tag |
| `schedule` | string | "" | Cron schedule (e.g., `0 2 * * *`) |
| `resources` | object | {} | CPU/memory limits |
| `env_vars` | object | {} | Environment variables |
| `secrets` | array | [] | Secret references |
| `concurrency_policy` | string | `Forbid` | CronJob concurrency: `Allow`, `Forbid`, `Replace` |
| `restart_policy` | string | `OnFailure` | Pod restart policy |

### Preconditions

1. Job has been packaged (see devops_packaging_job.md)
2. `/ops/deploy/` directory exists
3. Human has deployment credentials for target environment
4. Target environment infrastructure exists

---

## 3. Step-by-Step Flow (AI + Human)

See /.system/skills/ssot/repo/scaffolding/devops-deploy-job/SKILL.md.

---

## 4. Tools & Scripts

| Tool | Purpose |
|------|---------|
| `scripts/devops/scaffold/devops_deploy_job.py` | Orchestrator script |
| `/ops/deploy/scripts/deploy.sh` | Generated deploy script |

---

## 5. Outputs & Side Effects

### Files Created

```
ops/deploy/jobs/<job_name>/<environment>/
  cronjob.yaml        # Kubernetes CronJob
  configmap.yaml      # ConfigMap (if env_vars)
  config.yaml         # Deployment configuration
  deploy.sh           # Deployment script
  run-once.sh         # Manual trigger script
  README.md           # Human-facing documentation
```

### Kubernetes CronJob Template

```yaml
# Auto-generated by devops_deploy_job scaffold
apiVersion: batch/v1
kind: CronJob
metadata:
  name: <job_name>
  namespace: <environment>
spec:
  schedule: "<schedule>"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3
  jobTemplate:
    spec:
      backoffLimit: 3
      activeDeadlineSeconds: 3600
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: <job_name>
              image: <registry>/<job_name>:<image_tag>
              resources:
                limits:
                  cpu: "1000m"
                  memory: "1Gi"
                requests:
                  cpu: "100m"
                  memory: "256Mi"
```

### Configuration File

```yaml
job_name: <job_name>
environment: <environment>
image_tag: latest
schedule: "0 2 * * *"
concurrency_policy: Forbid
restart_policy: OnFailure
timeout: 3600
backoff_limit: 3
resources:
  limits:
    cpu: "1000m"
    memory: "1Gi"
  requests:
    cpu: "100m"
    memory: "256Mi"
env_vars: {}
secrets: []
```

---

## 6. Safety & Rollback

### Safety Measures

- `--dry-run` always available for preview
- Human approval required before execution
- No actual deployment during scaffold
- Credentials not stored in generated files
- Production jobs require additional approval

### Rollback Procedure

For job suspension (human executes):
```bash
kubectl patch cronjob/<job_name> -n <environment> -p '{"spec":{"suspend":true}}'
```

For scaffold rollback:
1. Delete the deployment directory:
   ```bash
   rm -rf ops/deploy/jobs/<job_name>/<environment>/
   ```

---

## 7. Job Operations (Human Required)

After scaffold, human manages job:

### Deploy CronJob
```bash
kubectl apply -f ops/deploy/jobs/<job_name>/<environment>/
```

### Trigger Manual Run
```bash
kubectl create job --from=cronjob/<job_name> <job_name>-manual-$(date +%s) -n <environment>
```

### Check Job Status
```bash
kubectl get cronjobs -n <environment>
kubectl get jobs -n <environment> -l app=<job_name>
kubectl logs -n <environment> job/<job_name>-xxx
```

### Suspend/Resume Job
```bash
# Suspend
kubectl patch cronjob/<job_name> -n <environment> -p '{"spec":{"suspend":true}}'

# Resume
kubectl patch cronjob/<job_name> -n <environment> -p '{"spec":{"suspend":false}}'
```

---

## 8. Related Documents

- `/.system/skills/ssot/repo/scaffolding/devops-deploy-job/templates/deploy_template.md` - Deployment knowledge template
- `/.system/skills/ssot/repo/scaffolding/devops-packaging-job/SKILL.md` - Job packaging scaffold
- `/.system/skills/ssot/repo/scaffolding/devops-deploy-service/SKILL.md` - Service deployment scaffold
- `/ops/deploy/AGENTS.md` - Deployment strategy

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/willyu1007) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-14 -->

