This repo serves install scripts and manifests under your custom domain so users can run:
- Igris Agent:
curl -fsSL https://get.pipeops.dev/igris.sh | bash - CLI:
curl -fsSL https://get.pipeops.dev/cli.sh | bash - K8s agent:
curl -fsSL https://get.pipeops.dev/k8-agent.sh | bash - Optional direct manifest:
kubectl apply -f https://get.pipeops.dev/k8-agent.yaml
Adjust variables in the scripts to match your release assets and binary naming.
igris.sh— Installs the Igris Security Agent from GitHub Releases (auto-detects OS/arch, optional systemd setup).cli.sh— Installs the PipeOps CLI from GitHub Releases (auto-detects OS/arch).k8-install.sh— Delegates to the upstream cluster/agent installer (scripts/install.sh).agent.sh— Alias wrapper tok8-install.shfor convenience.k8-agent.sh— Applies the PipeOps Kubernetes agent manifest (defaults to your GitHub Releases; can be pinned).k8-agent.yaml— Placeholder manifest (replace with your pinned agent manifest if you want a stable path).k8-uninstall.sh— Delegates to the upstream uninstaller (scripts/uninstall.sh).k8-join-worker.sh— Delegates to the upstream worker join script (scripts/join-worker.sh).CNAME— Custom domain for GitHub Pages (get.pipeops.dev)..nojekyll— Disables Jekyll processing so files serve as raw assets.index.html— Minimal landing page with usage examples..github/workflows/sync-k8-agent.yml— Keeps a pinned copy of the latest agent manifest in this repo.
- Push this folder as a repo, e.g.
pipeopshq/pipeops-installer. - GitHub → Settings → Pages:
- Source: Deploy from a branch →
main→/ (root). - Custom domain:
get.pipeops.dev(or editCNAME). - Enforce HTTPS.
- Source: Deploy from a branch →
- DNS: create a CNAME record at your DNS provider:
get→pipeopshq.github.io
- Wait for certificate provisioning (minutes to an hour).
This repo includes a workflow that fetches the latest k8-agent.yaml from pipeopshq/pipeops-k8-agent releases and commits it here.
-
Triggers:
- Manual: Actions → “Sync K8s Agent Manifest” → Run
- Scheduled: every 6 hours
- Optional:
repository_dispatchwith typek8_agent_releasedand payload{ "tag": "vX.Y.Z" }from the agent repo
-
Files it updates:
k8-agent/k8-agent-vX.Y.Z.yaml(versioned copy)k8-agent.yaml(stable pointer to the most recent)
In pipeopshq/pipeops-k8-agent you can add a step after creating a release to notify this repo:
- name: Notify installer repo
if: github.event_name == 'release' && github.event.action == 'published'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -sS -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GH_TOKEN}" \
https://api.github.com/repos/pipeopshq/pipeops-installer/dispatches \
-d '{"event_type":"k8_agent_released","client_payload":{"tag":"'"${{ github.event.release.tag_name }}"'"}}'-
cli.shvariables to verify/update:GH_REPO(default:pipeopshq/pipeops-cli)BINARY_NAME(default:pipeops)- Asset naming pattern defaults to
${BINARY_NAME}_${OS}_${ARCH}.tar.gz(Linux/Darwin and amd64/arm64). Adjust if your release assets differ. - Optional:
VERSION=v1.2.3to pin; otherwise useslatest.
-
k8-agent.shvariables to verify/update:MANIFEST_URLdefault points topipeopshq/pipeops-k8-agentreleases latest.- Optional: set
VERSION=v1.2.3to pin to a specific release. - Optional: replace
k8-agent.yamlin this repo and setMANIFEST_URL=https://get.pipeops.dev/k8-agent.yamlfor a domain-stable manifest.
-
Install latest Igris agent:
curl -fsSL https://get.pipeops.dev/igris.sh | bash -
Install with auto-enrollment as systemd service (Linux):
GATEWAY_URL=https://halo.example.com TOKEN=your-token \ curl -fsSL https://get.pipeops.dev/igris.sh | bash -
Install a specific version:
VERSION=1.0.0 curl -fsSL https://get.pipeops.dev/igris.sh | bash -
Run manually after install:
igris --gateway-url https://halo.example.com --token YOUR_TOKEN
-
Install latest CLI to a standard location (
~/.local/binor/usr/local/binif sudo is available):curl -fsSL https://get.pipeops.dev/cli.sh | bash -
Install a specific version:
VERSION=v1.2.3 curl -fsSL https://get.pipeops.dev/cli.sh | bash -
Install to a custom prefix:
PREFIX=/opt/pipeops curl -fsSL https://get.pipeops.dev/cli.sh | bash -
Install the Kubernetes agent into a namespace (creates if missing):
curl -fsSL https://get.pipeops.dev/k8-agent.sh | bash -s -- --namespace pipeops-system -
Apply a pinned manifest directly (after you replace
k8-agent.yaml):kubectl apply -f https://get.pipeops.dev/k8-agent.yaml
-
Bootstrap a cluster and install the agent (served from this installer domain; delegates to upstream installer):
curl -fsSL https://get.pipeops.dev/k8-install.sh | bash # or the alias curl -fsSL https://get.pipeops.dev/agent.sh | bash
-
Pin a specific installer version:
VERSION=v1.2.3 curl -fsSL https://get.pipeops.dev/k8-install.sh | bash -
Join a worker node to a cluster via upstream join script (served from this installer domain):
export K3S_URL=https://<server>:6443 export K3S_TOKEN=<token> curl -fsSL https://get.pipeops.dev/k8-join-worker.sh | bash
-
Uninstall the PipeOps agent (keeps cluster intact):
curl -fsSL https://get.pipeops.dev/k8-uninstall.sh | bash -
Uninstall agent and remove k3s cluster:
UNINSTALL_K3S=true curl -fsSL https://get.pipeops.dev/k8-uninstall.sh | bash -
Force uninstall without prompts:
FORCE=true curl -fsSL https://get.pipeops.dev/k8-uninstall.sh | bash
- Bootstrap (
k8-install.sh/agent.sh): provisions/bootstraps the cluster environment and installs the agent via upstream installer. - Apply (
k8-agent.sh): applies a Kubernetes manifest to an existing cluster/context. Use this when your cluster is already running.
If you see: Deployment "pipeops-agent" is invalid: spec.selector ... field is immutable, it means an older Deployment exists with different labels. Fix:
-
One-time recreate via the installer:
curl -fsSL https://get.pipeops.dev/k8-agent.sh | bash -s -- --namespace pipeops-system --recreate -
Or manually delete then apply:
kubectl delete deploy/pipeops-agent -n pipeops-system curl -fsSL https://get.pipeops.dev/k8-agent.sh | bash -s -- --namespace pipeops-system
- Prefer pinning versions for production (
VERSION=vX.Y.Z). - Checksums:
cli.shattempts to verify checksums automatically when present (VERIFY=auto).- Strict mode:
VERIFY=strict curl -fsSL https://get.pipeops.dev/cli.sh | bashwill fail if no checksum is found or if it mismatches. - Override checksum asset/name via
CHECKSUMS_ASSET=checksums.txtor fullCHECKSUMS_URL=....
- Strict mode: