Guidance on Setting Up CI/CD Pipeline for SailPoint IIQ Using GitHub and Jenkins

Dear Team,

Happy New Year 2026! I hope this message finds you well.

I have successfully generated the identityiq.war file using SSB in my personal SailPoint IIQ environment. As the next step, I would like to set up a CI/CD pipeline utilizing a GitHub repository and Jenkins. Since I am new to this process, I would greatly appreciate a step-by-step guide on how to proceed further.

For context, I am currently testing this on my personal laptop, which has only one environment installed.

Thank you in advance for your assistance and guidance.

Best regards,
Venu

Hey,

For this you need to setup SSB and deploy your code of SSB in Git Repo.

After that a pipeline needs to be written for this process.

Thanks

Manish Singh

Please refer to this video:

Hi Venu

since you already produced identityiq.war with SSB, the next step is simply to put the SSB project in GitHub and let Jenkins repeat the same build + deploy steps automatically.

Manish already pointed you to “SSB in Git + pipeline + video.” Below is the step-by-step that works on a single laptop and scales later to DEV/TEST/PROD without redesign.

1) What goes in GitHub (source of truth)

Commit the SSB project + your deployable inputs, not the running server state:

  • ssb/ (or your SSB build folder)

  • config/ exported IIQ XML artifacts (Rules / Workflows / Bundles / Email templates / etc.)

  • src/ any custom Java code (if you have it)

  • web/ any UI customizations (if you have it)

Do NOT commit secrets (DB creds, AD bind creds, API keys). Store them in Jenkins Credentials and inject them at build/deploy time.

Important (not mentioned in the thread): export objects using IIQ console export -clean so your XML diffs stay stable across environments (removes id/created/modified/lastRefresh noise). This is a huge quality-of-life improvement for Git and code reviews.

2) Decide when you really need a WAR vs just importing XML

On a laptop, the safest pattern is:

  • Most changes (rules/workflows/bundles/config): deploy by importing XML.

  • Only build/deploy WAR when you changed UI files, Java code, plugins, or you’re upgrading IIQ/efix.

This matches how experienced teams reduce downtime and risk.

3) Jenkins pipeline (local laptop version)

Stage A — Checkout

  • Jenkins pulls your repo on every push (or manual “Build Now” while learning).

Stage B — Build (SSB)

  • Run the same SSB build command you ran locally to produce identityiq.war (and/or a “subset build” if you have it).

  • Archive the WAR as a Jenkins artifact.

Stage C — Deploy (Tomcat)

  • Stop Tomcat

  • Backup current WAR (quick rollback)

  • Copy new WAR to webapps/

  • Start Tomcat

  • Wait for the app to be reachable (simple HTTP health check)

Stage D — Import config (XML)

  • Use IIQ console import to load only the artifacts you changed (or a packaged file).

Stage E — Smoke test

  • Confirm login page loads + a trivial function works (e.g., list identities / search a known object).

If your pipeline imports Application objects, you can accidentally overwrite runtime state stored in the Application (example: delta aggregation state; and sometimes tokens or connector-specific cached values).

Some teams explicitly save/restore delta state and tokens during deployment to avoid breaking delta aggregations after importing application XML.

Even on a single laptop, adopting this mindset early prevents painful surprises later.


5) Minimal Jenkinsfile outline (placeholders)

pipeline {
  agent any

  stages {
    stage('Checkout') {
      steps { checkout scm }
    }

    stage('Build (SSB)') {
      steps {
        sh '<YOUR_SSB_BUILD_COMMAND>'
        archiveArtifacts artifacts: '**/identityiq.war', fingerprint: true
      }
    }

    stage('Deploy WAR') {
      steps {
        sh '<STOP_TOMCAT>'
        sh '<BACKUP_CURRENT_WAR>'
        sh '<COPY_NEW_WAR_TO_TOMCAT_WEBAPPS>'
        sh '<START_TOMCAT>'
        sh '<WAIT_FOR_HTTP_200>'
      }
    }

    stage('Import XML artifacts') {
      steps {
        sh '<IIQ_CONSOLE_IMPORT_COMMANDS>'
      }
    }

    stage('Smoke test') {
      steps {
        sh '<HEALTHCHECK_COMMANDS>'
      }
    }
  }
}


Reference you may need to check and helpfull to you

2 Likes