āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ CI/CD Pipeline: GitHub Actions, GitLab CI āđāļĨāļ° Jenkins āļ›āļĩ 2026

āļĢāļ§āļĄāļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ CI/CD pipeline āļžāļĢāđ‰āļ­āļĄāļ„āļģāļ•āļ­āļšāļŠāļģāļŦāļĢāļąāļšāļ›āļĩ 2026 āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ GitHub Actions workflow, GitLab CI pipeline, Jenkins declarative pipeline āđāļĨāļ°āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ supply chain

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ CI/CD Pipeline: GitHub Actions, GitLab CI āđāļĨāļ° Jenkins āļ›āļĩ 2026

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš CI/CD pipeline āļ–āļ·āļ­āđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āļŦāļąāļ§āļ‚āđ‰āļ­āļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļŠāļĢāļĢāļŦāļēāļšāļļāļ„āļĨāļēāļāļĢ DevOps āļ•āļĨāļ­āļ”āļ›āļĩ 2026 āđ‚āļ”āļĒ GitHub Actions āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ‡āļēāļ™āļĄāļēāļāļāļ§āđˆāļē 71 āļĨāđ‰āļēāļ™ job āļ•āđˆāļ­āļ§āļąāļ™, GitLab CI āđ€āļ›āļīāļ”āļ•āļąāļ§āļŸāļĩāđ€āļˆāļ­āļĢāđŒāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ pipeline āļ”āđ‰āļ§āļĒ AI āđāļĨāļ° Jenkins āļĒāļąāļ‡āļ„āļ‡āļ­āļąāļ•āļĢāļēāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļ­āļĒāļđāđˆāļ—āļĩāđˆ 28% āļœāļđāđ‰āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ„āļēāļ”āļŦāļ§āļąāļ‡āđƒāļŦāđ‰āļœāļđāđ‰āļŠāļĄāļąāļ„āļĢāļŠāļēāļĄāļēāļĢāļ–āđāļŠāļ”āļ‡āļ—āļąāļāļĐāļ°āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡āļšāļ™āļ—āļąāđ‰āļ‡āļŠāļēāļĄāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāđ„āļ”āđ‰

āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļœāļđāđ‰āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ—āļ”āļŠāļ­āļš

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ CI/CD āļŠāđˆāļ§āļ™āđƒāļŦāļāđˆāļˆāļ°āđāļšāđˆāļ‡āļ­āļ­āļāđ€āļ›āđ‡āļ™āļŠāļēāļĄāļŦāļĄāļ§āļ”āļŦāļĨāļąāļ: āļāļēāļĢāļ­āļ­āļāđāļšāļš pipeline (āļ§āļīāļ˜āļĩāļˆāļąāļ”āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡ stage āđāļĨāļ° job) āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ (āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ secret āđāļĨāļ°āļāļēāļĢāđ€āļŠāļĢāļīāļĄāļ„āļ§āļēāļĄāđāļ‚āđ‡āļ‡āđāļāļĢāđˆāļ‡ supply chain) āđāļĨāļ°āļāļēāļĢāđāļāđ‰āđ„āļ‚āļ›āļąāļāļŦāļē (āļāļēāļĢ debug build āļ—āļĩāđˆāļĨāđ‰āļĄāđ€āļŦāļĨāļ§ āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž pipeline āļ—āļĩāđˆāļŠāđ‰āļē) āļœāļđāđ‰āļŠāļĄāļąāļ„āļĢāļ„āļ§āļĢāđ€āļ•āļĢāļĩāļĒāļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™ pipeline configuration āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļŦāļ™āļķāđˆāļ‡āļŠāļļāļ”

āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡ Workflow āđāļĨāļ° Trigger āđƒāļ™ GitHub Actions

GitHub Actions āļˆāļąāļ”āļĢāļ°āļšāļšāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāļœāđˆāļēāļ™ workflow, job āđāļĨāļ° step āđ‚āļ”āļĒ workflow āļ„āļ·āļ­āđ„āļŸāļĨāđŒ YAML āļ—āļĩāđˆāđ€āļāđ‡āļšāđ„āļ§āđ‰āđƒāļ™āđ„āļ”āđ€āļĢāļāļ—āļ­āļĢāļĩ .github/workflows/ āļ‹āļķāđˆāļ‡āļāļģāļŦāļ™āļ”āļ§āđˆāļēāļĢāļ°āļšāļšāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāļˆāļ°āļ—āļģāļ‡āļēāļ™āđ€āļĄāļ·āđˆāļ­āđƒāļ”āđāļĨāļ°āļ­āļĒāđˆāļēāļ‡āđ„āļĢ āđāļ•āđˆāļĨāļ° workflow āļŠāļēāļĄāļēāļĢāļ–āļĄāļĩ job āđ„āļ”āđ‰āļŦāļ™āļķāđˆāļ‡āļŦāļĢāļ·āļ­āļŦāļĨāļēāļĒ job āđāļĨāļ°āđāļ•āđˆāļĨāļ° job āļˆāļ°āļ—āļģāļ‡āļēāļ™āļšāļ™ runner āļ—āļĩāđˆāđāļĒāļāļāļąāļ™

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™āļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāļˆāļ°āļ‚āļ­āđƒāļŦāđ‰āļœāļđāđ‰āļŠāļĄāļąāļ„āļĢāļ­āļ˜āļīāļšāļēāļĒāļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļĢāļ°āļŦāļ§āđˆāļēāļ‡ trigger on āļāļēāļĢāļžāļķāđˆāļ‡āļžāļēāļĢāļ°āļŦāļ§āđˆāļēāļ‡ job āđāļĨāļ° keyword needs

yaml
# .github/workflows/ci.yml
name: CI Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint

  test:
    needs: lint              # āļĢāļ­āđƒāļŦāđ‰ lint āđ€āļŠāļĢāđ‡āļˆāļāđˆāļ­āļ™
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: [20, 22]       # āļĢāļąāļ™āđ€āļ—āļŠāļ•āđŒāļšāļ™āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
          cache: npm
      - run: npm ci
      - run: npm test

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    environment: production  # āļ•āđ‰āļ­āļ‡āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļī
    steps:
      - uses: actions/checkout@v4
      - run: ./deploy.sh

Workflow āļ™āļĩāđ‰āđāļŠāļ”āļ‡āđƒāļŦāđ‰āđ€āļŦāđ‡āļ™āļŠāļēāļĄāđāļ™āļ§āļ„āļīāļ”āļŠāļģāļ„āļąāļ: keyword needs āļŠāļĢāđ‰āļēāļ‡ dependency graph āļĢāļ°āļŦāļ§āđˆāļēāļ‡ job āļ•āđˆāļēāļ‡āđ†, āļāļĨāļĒāļļāļ—āļ˜āđŒ matrix āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ—āļ”āļŠāļ­āļšāđāļšāļšāļ‚āļ™āļēāļ™āļšāļ™ Node.js āļŦāļĨāļēāļĒāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ āđāļĨāļ° keyword environment āļāļģāļŦāļ™āļ”āđƒāļŦāđ‰āļāļēāļĢ deploy āļ•āđ‰āļ­āļ‡āļœāđˆāļēāļ™āļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļīāļ”āđ‰āļ§āļĒāļ•āļ™āđ€āļ­āļ‡

āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļē Pipeline āđƒāļ™ GitLab CI āļ”āđ‰āļ§āļĒ Stages

GitLab CI āđƒāļŠāđ‰āđ„āļŸāļĨāđŒ .gitlab-ci.yml āļ—āļĩāđˆ root āļ‚āļ­āļ‡ repository āļ‹āļķāđˆāļ‡āđāļ•āļāļ•āđˆāļēāļ‡āļˆāļēāļ GitHub Actions āļ—āļĩāđˆ job āļ—āļģāļ‡āļēāļ™āđāļšāļšāļ­āļīāļŠāļĢāļ°āđ‚āļ”āļĒāļ„āđˆāļēāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™ GitLab CI āļˆāļąāļ”āļāļĨāļļāđˆāļĄ job āđ€āļ‚āđ‰āļēāđƒāļ™ stage āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļ•āļēāļĄāļĨāļģāļ”āļąāļš āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆ job āļ āļēāļĒāđƒāļ™ stage āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļˆāļ°āļ—āļģāļ‡āļēāļ™āđāļšāļšāļ‚āļ™āļēāļ™

āļœāļđāđ‰āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļĄāļąāļāļ‚āļ­āđƒāļŦāđ‰āļœāļđāđ‰āļŠāļĄāļąāļ„āļĢāđāļ›āļĨāļ‡ workflow āļ‚āļ­āļ‡ GitHub Actions āđ€āļ›āđ‡āļ™ pipeline āļ‚āļ­āļ‡ GitLab CI āļŦāļĢāļ·āļ­āđƒāļ™āļ—āļēāļ‡āļāļĨāļąāļšāļāļąāļ™

yaml
# .gitlab-ci.yml
stages:
  - validate
  - test
  - deploy

variables:
  NODE_VERSION: "22"

lint:
  stage: validate
  image: node:${NODE_VERSION}
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
  script:
    - npm ci
    - npm run lint

unit-tests:
  stage: test
  image: node:${NODE_VERSION}
  parallel:
    matrix:
      - NODE_VERSION: ["20", "22"]
  script:
    - npm ci
    - npm test
  artifacts:
    reports:
      junit: coverage/junit.xml
    expire_in: 7 days

deploy-production:
  stage: deploy
  image: alpine:latest
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual                   # āļ›āļĢāļ°āļ•āļđāļ„āļ§āļšāļ„āļļāļĄāđāļšāļšāđāļĄāļ™āļ™āļ§āļĨ
  environment:
    name: production
    url: https://app.example.com
  script:
    - ./deploy.sh

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļŦāļĨāļąāļāļˆāļēāļ GitHub Actions: stages āļāļģāļŦāļ™āļ”āļĨāļģāļ”āļąāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ—āļąāđ‰āļ‡āļĢāļ°āļšāļš, keyword parallel:matrix āļˆāļąāļ”āļāļēāļĢ matrix build āđāļĨāļ° artifacts:reports:junit āļĢāļ§āļĄāļœāļĨāļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ€āļ‚āđ‰āļēāļāļąāļšāļŦāļ™āđ‰āļē merge request āđ‚āļ”āļĒāļ•āļĢāļ‡ GitLab 18.11 āļĒāļąāļ‡āđ€āļ›āļīāļ”āļ•āļąāļ§ CI/CD inputs āļŠāļģāļŦāļĢāļąāļš pipeline merge request āļ—āļĩāđˆāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļāļģāļŦāļ™āļ”āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒāđāļšāļšāđ„āļ”āļ™āļēāļĄāļīāļāļŠāđŒāđ„āļ”āđ‰āđƒāļ™āđāļ•āđˆāļĨāļ°āļĢāļ­āļšāļāļēāļĢāļĢāļąāļ™ pipeline

āđ„āļ§āļĒāļēāļāļĢāļ“āđŒ Jenkins Declarative Pipeline

Jenkins āđƒāļŠāđ‰ Jenkinsfile āļ—āļĩāđˆāđ€āļāđ‡āļšāđ„āļ§āđ‰āļ—āļĩāđˆ root āļ‚āļ­āļ‡ repository āđ‚āļ”āļĒāđ„āļ§āļĒāļēāļāļĢāļ“āđŒ declarative pipeline āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļĄāļēāļ•āļĢāļāļēāļ™āļ—āļĩāđˆāđāļ™āļ°āļ™āļģāđƒāļ™āļ›āļĩ 2026 āļĄāļ­āļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļ—āļĩāđˆāļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļŠāļąāļ”āđ€āļˆāļ™āđāļĨāļ°āļĢāļđāļ›āđāļšāļšāļ•āļēāļĄ stage āļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒ: āļ­āļ˜āļīāļšāļēāļĒāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ declarative āđāļĨāļ° scripted pipeline āđāļĨāļ°āđ€āļĄāļ·āđˆāļ­āđ„āļĢāļ„āļ§āļĢāđƒāļŠāđ‰āđāļ•āđˆāļĨāļ°āđāļšāļš

groovy
// Jenkinsfile
pipeline {
    agent any

    tools {
        nodejs 'node-22'       // āļāļģāļŦāļ™āļ”āļ„āđˆāļēāđƒāļ™ Jenkins Global Tool
    }

    environment {
        CI = 'true'
        DEPLOY_ENV = credentials('deploy-env-secret')
    }

    stages {
        stage('Install') {
            steps {
                sh 'npm ci'
            }
        }

        stage('Lint & Test') {
            parallel {             // āļ—āļģāļ‡āļēāļ™āđāļšāļšāļ‚āļ™āļēāļ™
                stage('Lint') {
                    steps {
                        sh 'npm run lint'
                    }
                }
                stage('Test') {
                    steps {
                        sh 'npm test'
                    }
                    post {
                        always {
                            junit 'coverage/junit.xml'
                        }
                    }
                }
            }
        }

        stage('Deploy') {
            when {
                branch 'main'
            }
            input {
                message 'Deploy to production?'
            }
            steps {
                sh './deploy.sh'
            }
        }
    }

    post {
        failure {
            mail to: 'team@example.com',
                 subject: "Build failed: ${env.JOB_NAME}",
                 body: "Check ${env.BUILD_URL}"
        }
    }
}

Declarative pipeline āļšāļąāļ‡āļ„āļąāļšāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļœāđˆāļēāļ™āļšāļĨāđ‡āļ­āļāļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™āđ„āļ”āđ‰āđāļāđˆ pipeline, agent āđāļĨāļ° stages āļ„āļģāļŠāļąāđˆāļ‡ parallel āļ āļēāļĒāđƒāļ™ stage āļˆāļ°āļĢāļąāļ™ lint āđāļĨāļ° test āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āļ„āļģāļŠāļąāđˆāļ‡ input āļŦāļĒāļļāļ”āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļŠāļąāđˆāļ§āļ„āļĢāļēāļ§āđ€āļžāļ·āđˆāļ­āļĢāļ­āļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļīāļ”āđ‰āļ§āļĒāļ•āļ™āđ€āļ­āļ‡ āļ„āļĨāđ‰āļēāļĒāļāļąāļš environment āļ‚āļ­āļ‡ GitHub Actions āđāļĨāļ° manual gate āļ‚āļ­āļ‡ GitLab āļ—āļąāđ‰āļ‡āļ™āļĩāđ‰ Jenkins āļĒāļąāļ‡āļāļģāļŦāļ™āļ”āđƒāļŦāđ‰āđƒāļŠāđ‰ Java 21 āļ•āļąāđ‰āļ‡āđāļ•āđˆāđ€āļ”āļ·āļ­āļ™āļĄāļāļĢāļēāļ„āļĄ 2026 āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļ‚āļ­āļ‡ pipeline āļ•āđ‰āļ­āļ‡āļ„āļģāļ™āļķāļ‡āļ–āļķāļ‡āļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ runtime āļ™āļĩāđ‰āļ”āđ‰āļ§āļĒ

āļžāļĢāđ‰āļ­āļĄāļ—āļĩāđˆāļˆāļ°āļžāļīāļŠāļīāļ•āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ DevOps āđāļĨāđ‰āļ§āļŦāļĢāļ·āļ­āļĒāļąāļ‡āļ„āļĢāļąāļš?

āļāļķāļāļāļ™āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āđāļšāļšāđ‚āļ•āđ‰āļ•āļ­āļš, flashcards āđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Secret āļšāļ™āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ CI/CD āļ•āđˆāļēāļ‡āđ†

āļ—āļļāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ CI/CD āļˆāļ°āļĄāļĩāļ„āļģāļ–āļēāļĄāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢ secret āļ­āļĒāļđāđˆāđ€āļŠāļĄāļ­ āđāļ•āđˆāļĨāļ°āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āļˆāļģāļ•āļąāļ§āđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđāļĨāļ°āļāļēāļĢāđ€āļ‚āđ‰āļēāđƒāļˆāļœāļĨāļāļĢāļ°āļ—āļšāļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ–āļ·āļ­āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļŠāļģāļ„āļąāļ

GitHub Actions āđ€āļāđ‡āļš secret āđƒāļ™āļĢāļ°āļ”āļąāļš repository, environment āļŦāļĢāļ·āļ­ organization āđ‚āļ”āļĒ secret āļˆāļ°āļ–āļđāļāļ‹āđˆāļ­āļ™āļˆāļēāļ log āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđāļ•āđˆāļĢāļđāļ›āđāļšāļš scoping āļ›āļąāļˆāļˆāļļāļšāļąāļ™āļĒāļąāļ‡āļĄāļĩāļ‚āđ‰āļ­āļˆāļģāļāļąāļ” āđāļœāļ™āļ‡āļēāļ™āļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ›āļĩ 2026 āđ„āļ”āđ‰āđ€āļ›āļīāļ”āļ•āļąāļ§ scoped secret āļ—āļĩāđˆāļœāļđāļāļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āļˆāļģāļ•āļąāļ§āļāļąāļšāļšāļĢāļīāļšāļ—āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđ€āļ‰āļžāļēāļ° āļĨāļ”āļ„āļ§āļēāļĄāđ€āļŠāļĩāđˆāļĒāļ‡āļˆāļēāļāļŠāļīāļ—āļ˜āļīāđŒāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ—āļĩāđˆāļāļ§āđ‰āļēāļ‡āđ€āļāļīāļ™āđ„āļ›

GitLab CI āļĄāļ­āļš CI/CD variable āļžāļĢāđ‰āļ­āļĄāļāļŽāļāļēāļĢāļ›āđ‰āļ­āļ‡āļāļąāļ™ āđ‚āļ”āļĒāļ•āļąāļ§āđāļ›āļĢāļ—āļĩāđˆāļ–āļđāļāļ›āđ‰āļ­āļ‡āļāļąāļ™āļˆāļ°āļ–āļđāļ inject āđ€āļ‚āđ‰āļēāđ„āļ›āđƒāļ™ pipeline āļ—āļĩāđˆāļĢāļąāļ™āļšāļ™ branch āļŦāļĢāļ·āļ­ tag āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ›āđ‰āļ­āļ‡āļāļąāļ™āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ GitLab 18.3 āđ€āļžāļīāđˆāļĄāļŠāļīāļ—āļ˜āļīāđŒāđāļšāļš fine-grained āļŠāļģāļŦāļĢāļąāļš CI/CD job token āđ‚āļ”āļĒāđƒāļŠāđ‰āļŦāļĨāļąāļāļāļēāļĢ least-privilege

Jenkins āđƒāļŠāđ‰āļ›āļĨāļąāđŠāļāļ­āļīāļ™ Credentials āļ—āļĩāđˆāļĢāļ­āļ‡āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āļˆāļģāļ•āļąāļ§āļŦāļĨāļēāļĒāļĢāļđāļ›āđāļšāļš (username/password, SSH key, secret text, āđƒāļšāļĢāļąāļšāļĢāļ­āļ‡) helper credentials() āđƒāļ™ declarative pipeline āļˆāļ°āļœāļđāļ secret āļāļąāļšāļ•āļąāļ§āđāļ›āļĢāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ āđāļĨāļ° credential āļĢāļ°āļ”āļąāļš Folder āļˆāļģāļāļąāļ”āļŠāļīāļ—āļ˜āļīāđŒāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ€āļ‰āļžāļēāļ°āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒ

āļ„āļģāļ•āļ­āļšāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ—āļĩāđˆāļŠāļģāļ„āļąāļ: āļŦāđ‰āļēāļĄ hardcode secret āđƒāļ™āđ„āļŸāļĨāđŒ pipeline āđ‚āļ”āļĒāđ€āļ”āđ‡āļ”āļ‚āļēāļ” āđƒāļŠāđ‰āļĢāļ°āļšāļšāļˆāļąāļ”āļāļēāļĢ secret āļ”āļąāđ‰āļ‡āđ€āļ”āļīāļĄāļ‚āļ­āļ‡āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāđ€āļŠāļĄāļ­ āļŦāļĄāļļāļ™āđ€āļ§āļĩāļĒāļ™ credential āļ­āļĒāđˆāļēāļ‡āļŠāļĄāđˆāļģāđ€āļŠāļĄāļ­ āđāļĨāļ°āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰ token āļĢāļ°āļĒāļ°āļŠāļąāđ‰āļ™āđāļ—āļ™ API key āļĢāļ°āļĒāļ°āļĒāļēāļ§

āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž Pipeline āđāļĨāļ°āļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢāđāļ„āļŠ

Pipeline āļ—āļĩāđˆāļŠāđ‰āļēāļŠāđˆāļ‡āļœāļĨāđ‚āļ”āļĒāļ•āļĢāļ‡āļ•āđˆāļ­āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āļ™āļąāļāļžāļąāļ’āļ™āļē āļœāļđāđ‰āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļˆāļ°āļ—āļ”āļŠāļ­āļšāļ§āđˆāļēāļœāļđāđ‰āļŠāļĄāļąāļ„āļĢāļŠāļēāļĄāļēāļĢāļ–āļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāđāļĨāļ°āđāļāđ‰āđ„āļ‚āļˆāļļāļ”āļ„āļ­āļ‚āļ§āļ”āļ”āđ‰āļēāļ™āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđƒāļ™āļĢāļ°āļšāļš CI/CD āđ„āļ”āđ‰āļŦāļĢāļ·āļ­āđ„āļĄāđˆ

āđ€āļ—āļ„āļ™āļīāļ„āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ—āļĩāđˆāđƒāļŠāđ‰āđ„āļ”āđ‰āļ—āļąāđˆāļ§āđ„āļ›āļšāļ™āļ—āļąāđ‰āļ‡āļŠāļēāļĄāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļĄāļĩāļŠāļēāļĄāļ§āļīāļ˜āļĩ:

Dependency caching āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļāļēāļĢāļ”āļēāļ§āļ™āđŒāđ‚āļŦāļĨāļ” package āļ‹āđ‰āļģāđƒāļ™āļ—āļļāļāļĢāļ­āļšāļāļēāļĢāļĢāļąāļ™ GitHub Actions āđƒāļŠāđ‰ actions/cache āļŦāļĢāļ·āļ­āļāļēāļĢāļĢāļ­āļ‡āļĢāļąāļšāđāļ„āļŠāļ—āļĩāđˆāļĄāļĩāļĄāļēāđƒāļ™ setup action GitLab CI āđƒāļŠāđ‰ cache āļžāļĢāđ‰āļ­āļĄāļāļĨāļĒāļļāļ—āļ˜āđŒ key Jenkins āļ­āļēāļĻāļąāļĒāļāļēāļĢāļ„āļ‡āļ­āļĒāļđāđˆāļ‚āļ­āļ‡ workspace āļŦāļĢāļ·āļ­āļ„āļģāļŠāļąāđˆāļ‡ stash/unstash

āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļšāļ‚āļ™āļēāļ™ āđāļšāđˆāļ‡āļ‡āļēāļ™āđ„āļ›āļĒāļąāļ‡āļŦāļĨāļēāļĒ runner GitHub Actions āđƒāļŠāđ‰āļāļĨāļĒāļļāļ—āļ˜āđŒ matrix, GitLab CI āđƒāļŠāđ‰ parallel:matrix āđāļĨāļ° Jenkins āđƒāļŠāđ‰āļ„āļģāļŠāļąāđˆāļ‡ parallel āļĢāļ°āļ”āļąāļšāļ„āļ§āļēāļĄāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ‚āļ­āļ‡āļāļēāļĢāđāļšāđˆāļ‡āļ‡āļēāļ™āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒ: job āļ‚āļ™āļēāļ™āļĄāļēāļāđ€āļāļīāļ™āđ„āļ›āļˆāļ°āđ€āļŠāļĩāļĒāđ€āļ§āļĨāļēāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™ runner āđāļ•āđˆāļ™āđ‰āļ­āļĒāđ€āļāļīāļ™āđ„āļ›āļˆāļ°āļ—āļģāđƒāļŦāđ‰āļ—āļĢāļąāļžāļĒāļēāļāļĢāđ€āļŦāļĨāļ·āļ­āđƒāļŠāđ‰

āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļšāļĄāļĩāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚ āļ‚āđ‰āļēāļĄ stage āļ—āļĩāđˆāđ„āļĄāđˆāļˆāļģāđ€āļ›āđ‡āļ™ āļ—āļąāđ‰āļ‡āļŠāļēāļĄāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļĢāļ­āļ‡āļĢāļąāļš: GitHub Actions āļ”āđ‰āļ§āļĒāļ™āļīāļžāļˆāļ™āđŒ if, GitLab CI āļ”āđ‰āļ§āļĒ rules āđāļĨāļ° Jenkins āļ”āđ‰āļ§āļĒāļ„āļģāļŠāļąāđˆāļ‡ when Pipeline āļ—āļĩāđˆāļ­āļ­āļāđāļšāļšāļĄāļēāļ”āļĩāļˆāļ°āļ‚āđ‰āļēāļĄ stage deployment āļšāļ™ feature branch āđāļĨāļ°āļ‚āđ‰āļēāļĄāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđ€āļ‰āļžāļēāļ° lint āđ„āļĄāđˆāđƒāļŦāđ‰āļĢāļąāļ™ test suite āļ—āļąāđ‰āļ‡āļŦāļĄāļ”

āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ Pipeline CI/CD āđāļĨāļ°āļāļēāļĢāļ›āđ‰āļ­āļ‡āļāļąāļ™ Supply Chain

āļāļēāļĢāđ‚āļˆāļĄāļ•āļĩ supply chain āļ—āļĩāđˆāļžāļļāđˆāļ‡āđ€āļ›āđ‰āļēāļĢāļ°āļšāļš CI/CD āđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āļ­āļĒāđˆāļēāļ‡āļĄāļēāļāđƒāļ™āļ›āļĩ 2025 āđ‚āļ”āļĒāļĄāļĩāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ—āļĩāđˆāļŠāđˆāļ‡āļœāļĨāļāļĢāļ°āļ—āļšāļ•āđˆāļ­ tj-actions/changed-files āđāļĨāļ° GitHub Actions āļĒāļ­āļ”āļ™āļīāļĒāļĄāļ­āļ·āđˆāļ™āđ† āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđƒāļ™āļ›āļąāļˆāļˆāļļāļšāļąāļ™āļˆāļķāļ‡āļ—āļ”āļŠāļ­āļšāļœāļđāđ‰āļŠāļĄāļąāļ„āļĢāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢāđ€āļŠāļĢāļīāļĄāļ„āļ§āļēāļĄāđāļ‚āđ‡āļ‡āđāļāļĢāđˆāļ‡āđ€āļ›āđ‡āļ™āļ›āļĢāļ°āļˆāļģ

āļ•āļĢāļķāļ‡āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ‚āļ­āļ‡ action āļ”āđ‰āļ§āļĒ commit SHA āđ€āļ‰āļžāļēāļ°āđāļ—āļ™ tag āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđ‚āļˆāļĄāļ•āļĩāđāļšāļš tag-hijacking:

yaml
# .github/workflows/secure.yml
steps:
  # āđ€āļŠāļĩāđˆāļĒāļ‡: tag āļŠāļēāļĄāļēāļĢāļ–āļ–āļđāļāļĒāđ‰āļēāļĒāđ„āļ›āļĒāļąāļ‡ commit āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ­āļąāļ™āļ•āļĢāļēāļĒ
  - uses: actions/checkout@v4

  # āļ›āļĨāļ­āļ”āļ āļąāļĒ: āļ•āļĢāļķāļ‡āļ”āđ‰āļ§āļĒ commit SHA āļ—āļĩāđˆāđāļ™āđˆāļ™āļ­āļ™
  - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683

GitLab CI āļˆāļąāļ”āļāļēāļĢāļ›āļąāļāļŦāļē supply chain āļœāđˆāļēāļ™ CI/CD components āļžāļĢāđ‰āļ­āļĄāļāļēāļĢāļĢāļąāļšāļĢāļ­āļ‡ SLSA Level 1 (āļĄāļĩāđƒāļŦāđ‰āđƒāļŠāđ‰āļ•āļąāđ‰āļ‡āđāļ•āđˆ GitLab 18.1) āļ‹āļķāđˆāļ‡āļĄāļ­āļšāđāļŦāļĨāđˆāļ‡āļ—āļĩāđˆāļĄāļēāļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™āļĒāļīāđˆāļ‡āļ‚āļķāđ‰āļ™āđ€āļĄāļ·āđˆāļ­āļ›āļĢāļ°āļāļ­āļš pipeline āļˆāļēāļ component āļ—āļĩāđˆāđƒāļŠāđ‰āļ‹āđ‰āļģāđ„āļ”āđ‰ container tag āđāļšāļš immutable (GitLab 18.2) āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™ image āļŦāļĨāļąāļ‡āđ€āļœāļĒāđāļžāļĢāđˆāđāļĨāđ‰āļ§

āļŠāļģāļŦāļĢāļąāļš Jenkins āļāļĨāđ„āļ Shared Library āļ„āļ§āļĢāđƒāļŠāđ‰ repository āđ€āļ‰āļžāļēāļ°āļ—āļĩāđˆāļĄāļĩ branch protection āļāļēāļĢāļāļģāļŦāļ™āļ”āđƒāļŦāđ‰āļĄāļĩ code review āđāļĨāļ° signed commit āļ„āļ“āļ°āļāļĢāļĢāļĄāļēāļ˜āļīāļāļēāļĢāļĒāļļāđ‚āļĢāļ›āđ„āļ”āđ‰āđ€āļ›āļīāļ”āļ•āļąāļ§āđ‚āļ„āļĢāļ‡āļāļēāļĢ Bug Bounty āļŠāļģāļŦāļĢāļąāļš Jenkins āļœāđˆāļēāļ™ YesWeHack āđ€āļĄāļ·āđˆāļ­āđ„āļĄāđˆāļ™āļēāļ™āļĄāļēāļ™āļĩāđ‰ āļŠāļ°āļ—āđ‰āļ­āļ™āđƒāļŦāđ‰āđ€āļŦāđ‡āļ™āļ–āļķāļ‡āļšāļ—āļšāļēāļ—āļŠāļģāļ„āļąāļāļ‚āļ­āļ‡āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļ™āļĩāđ‰āđƒāļ™ supply chain āļ‚āļ­āļ‡āļ­āļ‡āļ„āđŒāļāļĢ

āļ•āļēāļĢāļēāļ‡āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļ‚āđ‰āļēāļĄāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ•āļĢāļĩāļĒāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

| āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļī | GitHub Actions | GitLab CI | Jenkins | |---|---|---|---| | āđ„āļŸāļĨāđŒāļāļģāļŦāļ™āļ”āļ„āđˆāļē | .github/workflows/*.yml | .gitlab-ci.yml | Jenkinsfile | | āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™ | āļ•āļēāļĄ job (āļ‚āļ™āļēāļ™āđ‚āļ”āļĒāļ„āđˆāļēāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™) | āļ•āļēāļĄ stage (stage āļ•āļēāļĄāļĨāļģāļ”āļąāļš) | āļ•āļēāļĄ stage (āļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™) | | Runner hosting | GitHub-hosted + self-hosted | GitLab.com shared + self-hosted | Self-hosted āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ | | āļāļēāļĢāđ€āļāđ‡āļš secret | Secret āļĢāļ°āļ”āļąāļš repository/org/environment | CI/CD variable (āļĄāļĩāļāļēāļĢāļ›āđ‰āļ­āļ‡āļāļąāļ™) | āļ›āļĨāļąāđŠāļāļ­āļīāļ™ Credentials | | Matrix build | strategy.matrix | parallel:matrix | matrix (āļ›āļĨāļąāđŠāļāļ­āļīāļ™) | | āļ›āļĢāļ°āļ•āļđāđāļĄāļ™āļ™āļ§āļĨ | environment + required reviewers | when: manual | āļ„āļģāļŠāļąāđˆāļ‡ input | | Marketplace | 20,000+ Actions āļšāļ™ Marketplace | CI/CD Components Catalog | 1,800+ āļ›āļĨāļąāđŠāļāļ­āļīāļ™ | | āļŸāļĩāđ€āļˆāļ­āļĢāđŒ AI | Copilot for Actions (preview) | Duo CI Expert Agent (beta) | āļ›āļĨāļąāđŠāļāļ­āļīāļ™āļˆāļēāļāļŠāļļāļĄāļŠāļ™ | | āļĢāļēāļ„āļē | āļŸāļĢāļĩāļŠāļģāļŦāļĢāļąāļš repo āļŠāļēāļ˜āļēāļĢāļ“āļ°, āļ„āļīāļ”āļ•āļēāļĄāļ™āļēāļ—āļĩāļŠāļģāļŦāļĢāļąāļš repo āļŠāđˆāļ§āļ™āļ•āļąāļ§ | 400 āļ™āļēāļ—āļĩ CI/CD āļŸāļĢāļĩ, āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļ›āđ‡āļ™āļ‚āļąāđ‰āļ™āļšāļąāļ™āđ„āļ” | āļŸāļĢāļĩ (āđ‚āļ­āđ€āļžāļ™āļ‹āļ­āļĢāđŒāļŠ), āļ”āļđāđāļĨāđ€āļ­āļ‡ |

āļ•āļēāļĢāļēāļ‡āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļ™āļĩāđ‰āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļ—āļĩāđˆāļĄāļąāļāļ–āļđāļāļ—āļ”āļŠāļ­āļšāļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ āļ„āļģāļ–āļēāļĄāļ•āđˆāļ­āļĒāļ­āļ”āļ—āļĩāđˆāļĄāļąāļāļ•āļēāļĄāļĄāļēāļ„āļ·āļ­: "āļˆāļ°āđ€āļĨāļ·āļ­āļāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāđƒāļ”āļŠāļģāļŦāļĢāļąāļšāđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒāđƒāļŦāļĄāđˆ āđāļĨāļ°āđ€āļžāļĢāļēāļ°āļ­āļ°āđ„āļĢ?" āļ„āļģāļ•āļ­āļšāļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆ āļ‚āļ™āļēāļ”āļ—āļĩāļĄ āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™ compliance āđāļĨāļ°āļ§āđˆāļēāļ­āļ‡āļ„āđŒāļāļĢāļ•āđ‰āļ­āļ‡āļāļēāļĢāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āđāļšāļšāļˆāļąāļ”āļāļēāļĢāđƒāļŦāđ‰ (GitHub/GitLab) āļŦāļĢāļ·āļ­āļ„āļ§āļšāļ„āļļāļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ” (Jenkins)

āļāļķāļāļāļ™āļ„āļģāļ–āļēāļĄāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļ”āđ‰āļ§āļĒāđ‚āļĄāļ”āļđāļĨāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ CI/CD fundamentals āđāļĨāļ° GitHub Actions āļŦāļĢāļ·āļ­āļĻāļķāļāļĐāļēāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāļāļąāļšāļ„āļģāļ–āļēāļĄāđ€āļ‰āļžāļēāļ°āļ‚āļ­āļ‡ GitLab CI āđāļĨāļ° Jenkins āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ•āļĢāļĩāļĒāļĄāļ•āļąāļ§ DevOps āļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļĒāļīāđˆāļ‡āļ‚āļķāđ‰āļ™ āļ„āļđāđˆāļĄāļ·āļ­āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ DevOps āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŦāļąāļ§āļ‚āđ‰āļ­āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ™āļ­āļāđ€āļŦāļ™āļ·āļ­āļˆāļēāļ CI/CD

āđ€āļĢāļīāđˆāļĄāļāļķāļāļ‹āđ‰āļ­āļĄāđ€āļĨāļĒ!

āļ—āļ”āļŠāļ­āļšāļ„āļ§āļēāļĄāļĢāļđāđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āļŠāļĢāļļāļ›

  • GitHub Actions āđ‚āļ”āļ”āđ€āļ”āđˆāļ™āļŠāļģāļŦāļĢāļąāļš workflow āļ—āļĩāđˆāđƒāļŠāđ‰āļ‡āļēāļ™āļāļąāļš GitHub āđ‚āļ”āļĒāļ•āļĢāļ‡āļ”āđ‰āļ§āļĒāļĢāļ°āļšāļšāļ™āļīāđ€āļ§āļĻ marketplace āđāļĨāļ°āļŸāļĩāđ€āļˆāļ­āļĢāđŒ parallel steps āļ—āļĩāđˆāļāļģāļĨāļąāļ‡āļˆāļ°āļĄāļē āđāļ•āđˆāļ„āļ§āļĢāļ•āļĢāļķāļ‡ action āļ”āđ‰āļ§āļĒ commit SHA āđ€āļžāļ·āđˆāļ­āļĨāļ”āļ„āļ§āļēāļĄāđ€āļŠāļĩāđˆāļĒāļ‡āļˆāļēāļ supply chain
  • GitLab CI āļĄāļ­āļšāļāļēāļĢāļĢāļ§āļĄ CI/CD āđāļĨāļ°āļāļēāļĢāļŠāđāļāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ—āļĩāđˆāđāļ™āđˆāļ™āđāļŸāđ‰āļ™āļ—āļĩāđˆāļŠāļļāļ” āļžāļĢāđ‰āļ­āļĄāļāļēāļĢāļĢāļąāļšāļĢāļ­āļ‡ SLSA āļŠāļģāļŦāļĢāļąāļš component āđāļĨāļ°āļŠāļīāļ—āļ˜āļīāđŒ fine-grained job token āļ•āļąāđ‰āļ‡āđāļ•āđˆāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ 18.3
  • Jenkins āļĒāļąāļ‡āļ„āļ‡āđ€āļ›āđ‡āļ™āļ•āļąāļ§āđ€āļĨāļ·āļ­āļāļ—āļĩāđˆāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™āļ—āļĩāđˆāļŠāļļāļ”āļŠāļģāļŦāļĢāļąāļšāļ­āļ‡āļ„āđŒāļāļĢāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āđāļĄāđ‰āļ§āđˆāļēāļˆāļ°āļ•āđ‰āļ­āļ‡āļāļēāļĢ Java 21 āļ•āļąāđ‰āļ‡āđāļ•āđˆāđ€āļ”āļ·āļ­āļ™āļĄāļāļĢāļēāļ„āļĄ 2026 āđāļĨāļ°āļĄāļĩāļ āļēāļĢāļ°āļāļēāļĢāļ”āļđāđāļĨāļ—āļĩāđˆāļŠāļđāļ‡āļāļ§āđˆāļē
  • āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ secret āđ€āļ›āđ‡āļ™āļŦāļąāļ§āļ‚āđ‰āļ­āļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ—āļĩāđˆāļ–āļđāļāļ—āļ”āļŠāļ­āļšāļĄāļēāļāļ—āļĩāđˆāļŠāļļāļ”āļšāļ™āļ—āļąāđ‰āļ‡āļŠāļēāļĄāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ: āļ„āļ§āļĢāđāļŠāļ”āļ‡āļ„āļ§āļēāļĄāļĢāļđāđ‰āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš scoped secret, protected variable āđāļĨāļ°āļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢāļŦāļĄāļļāļ™āđ€āļ§āļĩāļĒāļ™ credential
  • āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž pipeline āļœāđˆāļēāļ™āļāļēāļĢāđāļ„āļŠ āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļšāļ‚āļ™āļēāļ™ āđāļĨāļ°āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļšāļĄāļĩāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āđƒāļŠāđ‰āđ„āļ”āđ‰āļšāļ™āļ—āļļāļāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāđāļĨāļ°āđāļŠāļ”āļ‡āđƒāļŦāđ‰āđ€āļŦāđ‡āļ™āļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡āđƒāļ™āļĢāļ°āļ”āļąāļš production āļ•āđˆāļ­āļœāļđāđ‰āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ
  • āđ€āļ•āļĢāļĩāļĒāļĄāļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļē pipeline āļ—āļĩāđˆāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļˆāļĢāļīāļ‡āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļŦāļ™āļķāđˆāļ‡āļŠāļļāļ”āļ•āđˆāļ­āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ āđ‚āļ”āļĒāđ€āļ™āđ‰āļ™āļĢāļđāļ›āđāļšāļšāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡āđāļ—āļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒ

āđ€āļĢāļīāđˆāļĄāļāļķāļāļ‹āđ‰āļ­āļĄāđ€āļĨāļĒ!

āļ—āļ”āļŠāļ­āļšāļ„āļ§āļēāļĄāļĢāļđāđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āđāļ—āđ‡āļ

#ci-cd
#github-actions
#gitlab-ci
#jenkins
#devops
#interview

āđāļŠāļĢāđŒ

āļšāļ—āļ„āļ§āļēāļĄāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ DevOps āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ DevOps āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™: āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒ 2026

āđ€āļ•āļĢāļĩāļĒāļĄāļ•āļąāļ§āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ DevOps āļ”āđ‰āļ§āļĒāļ„āļģāļ–āļēāļĄāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļĢāļđāđ‰āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš CI/CD, Kubernetes, Docker, Terraform āđāļĨāļ°āđāļ™āļ§āļ›āļāļīāļšāļąāļ•āļī SRE āļžāļĢāđ‰āļ­āļĄāļ„āļģāļ•āļ­āļšāļĨāļ°āđ€āļ­āļĩāļĒāļ”

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Terraform āđāļĨāļ° Infrastructure as Code

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Terraform: āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒāļŠāļģāļŦāļĢāļąāļš Infrastructure as Code

āđ€āļ•āļĢāļĩāļĒāļĄāļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Terraform āļ”āđ‰āļ§āļĒāļ„āļģāļ–āļēāļĄāđāļĨāļ°āļ„āļģāļ•āļ­āļšāļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļ—āļļāļāļŦāļąāļ§āļ‚āđ‰āļ­āļŠāļģāļ„āļąāļ āļ•āļąāđ‰āļ‡āđāļ•āđˆāļžāļ·āđ‰āļ™āļāļēāļ™ State Management āđ„āļ›āļˆāļ™āļ–āļķāļ‡ Modules āđāļĨāļ° CI/CD

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Kubernetes āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš Pods, Services āđāļĨāļ° Deployments

āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Kubernetes: āļ­āļ˜āļīāļšāļēāļĒ Pods, Services āđāļĨāļ° Deployments āļ­āļĒāđˆāļēāļ‡āļĨāļ°āđ€āļ­āļĩāļĒāļ”

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Kubernetes āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš Pods, Services āđāļĨāļ° Deployments āļžāļĢāđ‰āļ­āļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ YAML āļāļĨāđ„āļ networking āļ āļēāļĒāđƒāļ™ āđāļĨāļ°āļāļĨāļĒāļļāļ—āļ˜āđŒ scaling āļŠāļģāļŦāļĢāļąāļšāļ›āļĩ 2026