Client Secrets: CI/CD Integration Guide
Bulletproof Infrastructure Automation
Stop your CI/CD pipelines from breaking due to authentication issues. Client Secrets provide reliable, secure automation for infrastructure deployments across all major platforms.
Zero-Prompt Authentication
The CI/CD Authentication Problem
Your infrastructure automation keeps failing because:
No visibility on PAT token usage
No central place to view and manage your PAT tokens
Token Expiration
Personal tokens expire during critical releases with no warning for easy renewal
Complex Auth Methods
Different auth methods for different environments create complexity
No Access Control
No way to control what automation can actually do
The Client Secrets Solution
Purpose-built authentication that just works in automation
Central management of organization tokens
Insights on all organizational secrets lifetime and usage.
Organization Tokens
Not tied to individual users. Tokens survive employee changes and don't break when someone leaves
Universal Platform Support
Works across all CI/CD platforms with the same configuration
Role-Based Permissions
Viewer vs Contributor roles control exactly what automation can do
Quick Start: Azure DevOps
Get up and running in under 5 minutes
Create Client Secret
- • Go to IPMHub Portal → Organizations → Your Org → Settings → Client Secrets
- • Create new secret with appropriate role (Viewer for downloads, Contributor for publishing)
- • Copy the secret value (you won't see it again)
Add to Azure DevOps
- Go to Pipelines → Library → Variable groups
- Create new group called "ipm-secrets"
- Add variable
IPM_CLIENT_SECRETSand mark as secret - Paste your client secret value
- Save and link to your pipeline
Pipeline Integration
variables:
- group: ipm-secrets # Variable group
Complete Pipeline Example
- main
pool:
vmImage: 'ubuntu-latest'
variables:
- group: ipm-secrets
steps:
- bash: |
curl -Lo ipm-cli.tar.gz \
"https://github.com/ipmhubio/ipm/releases/latest/download/ipm-linux-x64-full.tar.gz"
tar -xzf ipm-cli.tar.gz
sudo mv ./ipm /usr/local/bin/ipm
displayName: 'Install IPM CLI'
- bash: |
ipm sync --non-interactive
displayName: 'Sync Infrastructure'
env:
IPM_CLIENT_SECRETS: $(IPM_CLIENT_SECRETS)
Quick Start: GitHub Actions
Secure secrets management for GitHub workflows
Create Client Secret
- • Go to IPMHub Portal → Organizations → Your Org → Settings → Client Secrets
- • Create new secret with appropriate role (Viewer for downloads, Contributor for publishing)
- • Copy the secret value (you won't see it again)
Add Secret to Repository
- • Go to your repository Settings
- • Select Secrets and Variables → Actions
- • Click "New repository secret"
- • Name:
IPM_CLIENT_SECRETS - • Value: Your client secret from IPMHub
Workflow Integration
Reference secrets securely in your workflow files using GitHub's secrets context
Complete Workflow Example
on:
push:
branches: [main]
workflow_dispatch:
jobs:
deploy-infrastructure:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install IPM CLI
run: |
curl -Lo ipm-cli.tar.gz \
"https://github.com/ipmhubio/ipm/releases/latest/download/ipm-linux-x64-full.tar.gz"
tar -xzf ipm-cli.tar.gz
sudo mv ./ipm /usr/local/bin/ipm
 >- name: Sync Infrastructure Packages
env:
IPM_CLIENT_SECRETS: ${{ secrets.IPM_CLIENT_SECRETS }}
run: |
ipm sync --non-interactive
 >- name: Check Package Status
env:
IPM_CLIENT_SECRETS: ${{ secrets.IPM_CLIENT_SECRETS }}
run: |
ipm status --non-interactive
Organization-Level Secrets
For multiple repositories, create organization-level secrets:
- Go to Organization Settings → Secrets and Variables → Actions
- Add
IPM_CLIENT_SECRETSas organization secret - Select which repositories can access it
- Reference the same way in workflows
Advanced Integration Patterns
Power-user techniques for complex deployments
Workspace Status Checks
- name: Check Infrastructure Status
env:
IPM_CLIENT_SECRETS: ${{ secrets.IPM_SECRET }}
run: |
ipm sync --non-interactive
Multiple Organization Access
- name: Sync Multi-Org Infrastructure
env:
IPM_CLIENT_SECRETS: ${{ secrets.ORG_A_SECRET }} ${{ secrets.ORG_B_SECRET }}
run: |
ipm add --packages \
orgA/networking \
orgB/security \
--non-interactive
Publishing in CI/CD
- name: Publish Package Update
env:
IPM_CLIENT_SECRETS: ${{ secrets.IPM_CONTRIBUTOR_SECRET }}
run: |
ipm publish --package myorg/infrastructure \
--version ${{ github.run_number }} \
--folder ./build --non-interactive
Platform-Specific Examples
Ready-to-use configurations for popular CI/CD platforms
Jenkins Pipeline
agent any
environment {
IPM_CLIENT_SECRETS = credentials('ipm-client-secret')
}
stages {
stage('Install IPM') {
steps {
sh '''
curl -Lo ipm-cli.tar.gz \
"https://github.com/ipmhubio/ipm/releases/latest/download/ipm-linux-x64-full.tar.gz"
tar -xzf ipm-cli.tar.gz
sudo mv ./ipm /usr/local/bin/ipm
'''
}
}
stage('Deploy Infrastructure') {
steps {
sh '''
ipm sync --non-interactive
ipm status --non-interactive
'''
}
}
}
}
GitLab CI
- infrastructure
variables:
IPM_CLIENT_SECRETS: $GITLAB_IPM_SECRET
install_ipm:
stage: infrastructure
script:
- curl -Lo ipm-cli.tar.gz \
"https://github.com/ipmhubio/ipm/releases/latest/download/ipm-linux-x64-full.tar.gz"
- tar -xzf ipm-cli.tar.gz
- mv ./ipm /usr/local/bin/ipm
- ipm sync --non-interactive
- ipm status --non-interactive
CircleCI
jobs:
deploy-infrastructure:
docker:
- image: ubuntu:latest
steps:
- checkout
- run:
name: Install IPM CLI
command: |
curl -Lo ipm-cli.tar.gz \
"https://github.com/ipmhubio/ipm/releases/latest/download/ipm-linux-x64-full.tar.gz"
tar -xzf ipm-cli.tar.gz
mv ./ipm /usr/local/bin/ipm
- run:
name: Sync Infrastructure
command: ipm sync --non-interactive
environment:
IPM_CLIENT_SECRETS: $CIRCLE_IPM_SECRET
workflows:
deploy:
jobs:
- deploy-infrastructure
Role-Based Access Patterns
Fine-grained permissions for different automation needs
Viewer Role (Download Only)
Perfect for deployment pipelines that need to pull infrastructure:
ipm add --package company/infrastructure --non-interactive
ipm sync --non-interactive
ipm status --non-interactive
ipm info --package company/infrastructure --non-interactive
Contributor Role (Full Access)
For pipelines that need to publish updates:
ipm publish --package company/infrastructure \
--version 1.2.3 --folder ./ --non-interactive
Multi-Role Strategy
- name: Download Infrastructure
env:
IPM_CLIENT_SECRETS: ${{ secrets.IPM_VIEWER_SECRET }}
run: ipm sync --non-interactive
- name: Publish Updates
env:
IPM_CLIENT_SECRETS: ${{ secrets.IPM_CONTRIBUTOR_SECRET }}
run: ipm publish --package myorg/infrastructure \
--version ${{ github.run_number }} --folder ./build --non-interactive
Security Best Practices
Keep your automation secure and compliant
Secret Storage
- Always use your CI/CD platform's secure secret storage
- Never commit client secrets to source control
- Use environment variables, not hardcoded values
- Rotate secrets before they expire
Access Control
- Use Viewer role unless publishing is required
- Create separate secrets for different workflows
- Limit secret access to necessary repositories/pipelines
- Monitor secret usage through IPMHub analytics
Operational Security
- Set appropriate expiration periods (max 24 months)
- Enable notifications before expiration
- Document where each secret is used
- Remove unused secrets promptly
Integration Checklist
Step-by-step implementation guide
Before You Start
Setup Process
Post-Implementation
Ready to Bulletproof Your Infrastructure Automation?
Stop letting authentication break your deployments. Get Client Secrets set up in under 5 minutes.