Pytania rekrutacyjne o CI/CD Pipeline: GitHub Actions, GitLab CI i Jenkins w 2026 roku

Przygotowanie do pytań rekrutacyjnych o pipeline CI/CD obejmujące GitHub Actions, GitLab CI i Jenkins. Zawiera praktyczne przykłady kodu, wzorce konfiguracji i najlepsze praktyki bezpieczeństwa na 2026 rok.

CI/CD Pipeline interview questions for GitHub Actions, GitLab CI and Jenkins

Pytania rekrutacyjne dotyczące pipelinów CI/CD należą do najczęściej poruszanych tematów na rozmowach DevOps w 2026 roku. GitHub Actions przetwarza obecnie ponad 71 milionów zadań dziennie i wprowadził równoległe wykonywanie kroków w czerwcu 2026, GitLab CI osiągnął wersję 19 z natywnym Secrets Manager, a Jenkins utrzymuje 28% udziału w rynku. Rekruterzy oczekują od kandydatów praktycznej biegłości we wszystkich trzech platformach.

Co faktycznie testują rekruterzy

Większość pytań rekrutacyjnych o CI/CD dzieli się na trzy kategorie: projektowanie pipeline'ów (struktura etapów i zadań), bezpieczeństwo (zarządzanie sekretami, wzmacnianie łańcucha dostaw) oraz rozwiązywanie problemów (debugowanie nieudanych buildów, optymalizacja wolnych pipeline'ów). Należy spodziewać się co najmniej jednego pytania wymagającego napisania konfiguracji pipeline'u na żywo.

Struktura workflow GitHub Actions i wyzwalacze

GitHub Actions organizuje automatyzację wokół workflow, zadań (jobs) i kroków (steps). Workflow to plik YAML przechowywany w .github/workflows/, który definiuje kiedy i jak uruchamia się automatyzacja. Każdy workflow zawiera jedno lub więcej zadań, a każde zadanie działa na oddzielnym runnerze.

Częste pytanie rekrutacyjne dotyczy wyjaśnienia relacji między wyzwalaczami on, zależnościami między zadaniami i słowem kluczowym 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              # waits for lint to pass
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: [20, 22]       # runs tests on both versions
    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  # requires approval
    steps:
      - uses: actions/checkout@v4
      - run: ./deploy.sh

Ten workflow demonstruje trzy kluczowe koncepcje: słowo kluczowe needs tworzy graf zależności między zadaniami, strategia matrix umożliwia równoległe testowanie na różnych wersjach Node.js, a słowo kluczowe environment wymusza ręczne zatwierdzenie przed wdrożeniem.

Równoległe kroki w GitHub Actions

GitHub Actions wprowadził równoległe wykonywanie kroków 25 czerwca 2026, realizując jedną z najczęściej zgłaszanych funkcjonalności. Wcześniej wszystkie kroki w ramach zadania wykonywały się sekwencyjnie. Nowa funkcja wprowadza cztery słowa kluczowe umożliwiające współbieżne wykonywanie w ramach pojedynczego zadania.

Różnica na rozmowie: równoległe zadania vs równoległe kroki

Równoległe zadania używają oddzielnych runnerów z izolowanymi systemami plików. Równoległe kroki współdzielą pojedynczy runner, checkout, środowisko i workspace. Rekruterzy sprawdzają, czy kandydaci rozumieją tę różnicę, ponieważ wpływa ona na cache'owanie, współdzielenie artefaktów i wykorzystanie zasobów.

yaml
# .github/workflows/parallel-steps.yml
name: Build with Parallel Steps

on:
  push:
    branches: [main]

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

      # Run lint and typecheck in parallel
      - name: lint
        run: npm run lint
        background: true

      - name: typecheck
        run: npm run typecheck
        background: true

      - wait-all:              # wait for both to complete

      # Or use the parallel shorthand
      - parallel:
          - name: build-frontend
            run: npm run build:frontend
          - name: build-backend
            run: npm run build:backend

      - run: npm run deploy

Słowo kluczowe background: true uruchamia krok asynchronicznie i natychmiast przechodzi do następnego kroku. Słowo kluczowe wait-all wstrzymuje wykonywanie do zakończenia wszystkich poprzedzających kroków w tle. Słowo kluczowe parallel zapewnia skrócony zapis uruchamiający wiele kroków współbieżnie i czekający na zakończenie wszystkich przed kontynuacją.

Istnieją dwa dodatkowe słowa kluczowe: wait celuje w określone nazwane kroki w tle, a cancel elegancko kończy krok w tle, gdy nie jest już potrzebny (przydatne do zatrzymywania długo działających usług).

Konfiguracja pipeline'u GitLab CI z etapami

GitLab CI używa pliku .gitlab-ci.yml w katalogu głównym repozytorium. W odróżnieniu od GitHub Actions, gdzie zadania domyślnie działają niezależnie, GitLab CI organizuje zadania w etapy, które wykonują się sekwencyjnie, podczas gdy zadania w tym samym etapie działają równolegle.

Rekruterzy często proszą kandydatów o konwersję workflow GitHub Actions na pipeline GitLab CI lub odwrotnie.

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                   # manual gate
  environment:
    name: production
    url: https://app.example.com
  script:
    - ./deploy.sh

Kluczowe różnice względem GitHub Actions: etapy wymuszają globalną kolejność wykonywania, słowo kluczowe parallel:matrix obsługuje buildy macierzowe, a artifacts:reports:junit integruje wyniki testów bezpośrednio w widokach merge requestów.

GitLab 19.0 (maj 2026) wprowadził Secrets Manager w otwartej becie, zapewniając natywne przechowywanie sekretów bez zewnętrznych usług takich jak HashiCorp Vault. GitLab 19.2 (lipiec 2026) udostępnił ogólnie polityki zaplanowanego wykonywania pipeline'ów, pozwalając zespołom wymuszać skany zgodności lub sprawdzanie zależności według ustalonego harmonogramu w wielu projektach z pojedynczej definicji polityki.

Gotowy na rozmowy o DevOps?

Ćwicz z naszymi interaktywnymi symulatorami, flashcards i testami technicznymi.

Składnia deklaratywnego pipeline'u Jenkins

Jenkins używa pliku Jenkinsfile przechowywanego w katalogu głównym repozytorium. Składnia deklaratywnego pipeline'u, zalecana jako domyślna w 2026 roku, zapewnia strukturalną obsługę błędów i przejrzysty układ oparty na etapach.

Częste pytanie rekrutacyjne: wyjaśnij różnicę między pipeline'ami deklaratywnymi a skryptowymi i kiedy używać którego.

groovy
// Jenkinsfile
pipeline {
    agent any

    tools {
        nodejs 'node-22'       // configured in Jenkins Global Tool
    }

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

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

        stage('Lint & Test') {
            parallel {             // parallel execution
                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}"
        }
    }
}

Pipeline'y deklaratywne wymuszają strukturę poprzez wymagane bloki pipeline, agent i stages. Dyrektywa parallel wewnątrz etapu uruchamia lint i test jednocześnie. Dyrektywa input wstrzymuje wykonywanie dla ręcznego zatwierdzenia, podobnie jak środowiska GitHub Actions i ręczne bramki GitLab. Jenkins wymaga Java 21 od stycznia 2026, więc środowiska pipeline'ów muszą uwzględniać tę zależność runtime.

Usunięcie pluginów z Jenkins (2.574+)

Jenkins 2.574 (lipiec 2026) i 2.577 (sierpień 2026) usunęły kilka pluginów z domyślnego pliku WAR, w tym JUnit, Mailer, Matrix Authorization, Bouncycastle API i JavaMail API. Instancje bez dostępu do centrum aktualizacji muszą zainstalować te pluginy ręcznie przed aktualizacją. Usunięcie pluginu JUnit szczególnie dotyczy pipeline'ów używających kroku junit pokazanego powyżej.

Zarządzanie sekretami na platformach CI/CD

Każda rozmowa rekrutacyjna o CI/CD zawiera pytania o zarządzanie sekretami. Każda platforma obsługuje poświadczenia inaczej, a zrozumienie implikacji bezpieczeństwa ma znaczenie.

GitHub Actions przechowuje sekrety na poziomie repozytorium, środowiska lub organizacji. Sekrety są automatycznie maskowane w logach, ale obecny model scopingu ma ograniczenia. Plan bezpieczeństwa na 2026 wprowadza sekrety o ograniczonym zakresie, które wiążą poświadczenia z konkretnymi kontekstami wykonawczymi, eliminując ryzyko zbyt szerokiego dostępu.

GitLab CI zapewnia zmienne CI/CD z regułami ochrony. Chronione zmienne są wstrzykiwane tylko do pipeline'ów działających na chronionych gałęziach lub tagach. GitLab 19.0 wprowadził Secrets Manager, pozwalając zespołom przechowywać i odwoływać się do sekretów natywnie bez zewnętrznych vault'ów. Sekrety są ograniczone do projektów lub grup i dostępne tylko dla zadań, które jawnie ich żądają.

Jenkins używa pluginu Credentials z wieloma typami poświadczeń (nazwa użytkownika/hasło, klucz SSH, tekst sekretny, certyfikat). Helper credentials() w pipeline'ach deklaratywnych wiąże sekrety ze zmiennymi środowiskowymi, a Folder-level credentials ograniczają dostęp do konkretnych projektów.

Kluczowa odpowiedź rekrutacyjna: nigdy nie hardkodować sekretów w plikach pipeline'ów, zawsze używać natywnego zarządzania sekretami platformy, regularnie rotować poświadczenia i preferować krótkotrwałe tokeny nad długotrwałymi kluczami API.

Optymalizacja pipeline'u i strategie cache'owania

Wolne pipeline'y bezpośrednio wpływają na produktywność programistów. Rekruterzy sprawdzają, czy kandydaci potrafią diagnozować i naprawiać wąskie gardła wydajnościowe w systemach CI/CD.

Trzy uniwersalne techniki optymalizacji mają zastosowanie na wszystkich trzech platformach:

Cache'owanie zależności unika ponownego pobierania pakietów przy każdym uruchomieniu. GitHub Actions używa actions/cache lub wbudowanej obsługi cache w akcjach setup. GitLab CI używa cache ze strategią kluczy. Jenkins polega na persystencji workspace lub komendach stash/unstash.

Równoległe wykonywanie dzieli pracę między wiele runnerów. GitHub Actions obsługuje teraz zarówno równoległe zadania (strategia matrix), jak i równoległe kroki (słowa kluczowe background/parallel). GitLab CI używa parallel:matrix, a Jenkins dyrektywy parallel. Właściwa granularność podziału zależy od projektu: zbyt wiele równoległych zadań marnuje czas uruchamiania runnerów, zbyt mało pozostawia niewykorzystaną przepustowość.

Warunkowe wykonywanie pomija niepotrzebne etapy. Wszystkie trzy platformy to obsługują: GitHub Actions z wyrażeniami if, GitLab CI z rules, a Jenkins z dyrektywami when. Dobrze zaprojektowany pipeline pomija etapy wdrożeniowe na gałęziach funkcjonalności i pomija pełne zestawy testów przy zmianach dotyczących tylko lintingu.

Bezpieczeństwo pipeline'ów CI/CD i ochrona łańcucha dostaw

Ataki na łańcuch dostaw wymierzone w systemy CI/CD znacząco wzrosły w 2025 roku, z incydentami dotyczącymi tj-actions/changed-files i innych popularnych GitHub Actions. Pytania rekrutacyjne regularnie sprawdzają teraz strategie wzmacniania zabezpieczeń.

Pinowanie wersji akcji do konkretnych SHA commitów zamiast tagów zapobiega atakom tag-hijacking:

yaml
# .github/workflows/secure.yml
steps:
  # Vulnerable: tag can be moved to malicious commit
  - uses: actions/checkout@v4

  # Secure: pinned to exact commit SHA
  - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683

GitLab CI adresuje problemy łańcucha dostaw poprzez komponenty CI/CD z atestacją SLSA Level 1 (dostępne od GitLab 18.1), zapewniając jaśniejsze pochodzenie przy składaniu pipeline'ów z komponentów wielokrotnego użytku. Niezmienne tagi kontenerów (GitLab 18.2) zapobiegają podmianie obrazów po publikacji.

Dla Jenkinsa mechanizm Shared Library powinien używać dedykowanego repozytorium z ochroną gałęzi, wymaganiami code review i podpisanymi commitami. Komisja Europejska uruchomiła program bug bounty dla Jenkinsa przez YesWeHack, odzwierciedlając krytyczną rolę platformy w korporacyjnych łańcuchach dostaw.

Porównanie międzyplatformowe do przygotowania rekrutacyjnego

FunkcjaGitHub ActionsGitLab CIJenkins
Plik konfiguracyjny.github/workflows/*.yml.gitlab-ci.ymlJenkinsfile
Model wykonaniaOparty na zadaniach z równoległymi krokamiOparty na etapach (sekwencyjne etapy)Oparty na etapach (elastyczny)
Hosting runnerówGitHub-hosted + self-hostedGitLab.com shared + self-hostedTylko self-hosted
Przechowywanie sekretówSekrety repozytorium/organizacji/środowiskaSecrets Manager + zmienne CI/CDPlugin Credentials
Buildy macierzowestrategy.matrixparallel:matrixmatrix (plugin)
Ręczne bramkienvironment + wymagani recenzenciwhen: manualDyrektywa input
Marketplace20 000+ Actions na MarketplaceKatalog komponentów CI/CD1 800+ pluginów
Funkcje AICopilot for ActionsDuo CI Expert AgentPluginy społeczności
CennikDarmowe dla publicznych repo, płatne za minuty dla prywatnych400 minut CI/CD darmowych, potem taryfyDarmowy (open source), samodzielne zarządzanie

Ta tabela porównawcza obejmuje najczęściej testowane różnice na rozmowach rekrutacyjnych. Pytanie uzupełniające zwykle brzmi: "Którą platformę wybrałbyś dla nowego projektu i dlaczego?" Odpowiedź zależy od istniejących narzędzi, wielkości zespołu, wymagań zgodności i tego, czy organizacja preferuje zarządzaną infrastrukturę (GitHub/GitLab) czy pełną kontrolę (Jenkins).

Źródła

Przećwicz te pytania praktycznie z modułami podstawy CI/CD i GitHub Actions, lub zapoznaj się z pytaniami specyficznymi dla GitLab CI i Jenkins. Szersze przygotowanie do DevOps oferuje przewodnik po kluczowych pytaniach rekrutacyjnych DevOps, obejmujący pełny zakres tematów wykraczających poza CI/CD.

Zacznij ćwiczyć!

Sprawdź swoją wiedzę z naszymi symulatorami rozmów i testami technicznymi.

Kluczowe wnioski do rozmów rekrutacyjnych o CI/CD Pipeline

  • Równoległe kroki GitHub Actions (background, wait-all, parallel) zostały wprowadzone w czerwcu 2026, umożliwiając współbieżne wykonywanie w ramach pojedynczego zadania przy współdzieleniu runnera, checkoutu i workspace'u
  • GitLab 19.x wprowadził natywny Secrets Manager (otwarta beta, maj 2026) i udostępnił ogólnie polityki zaplanowanego wykonywania pipeline'ów (lipiec 2026), zmniejszając zależność od zewnętrznych narzędzi
  • Jenkins 2.574+ usunął podstawowe pluginy w tym JUnit i Mailer z pliku WAR, wymagając jawnej instalacji dla instancji bez dostępu do centrum aktualizacji
  • Zarządzanie sekretami to najczęściej testowany temat bezpieczeństwa na wszystkich trzech platformach: trzeba wykazać się wiedzą o sekretach z ograniczonym zakresem, chronionych zmiennych i strategiach rotacji poświadczeń
  • Optymalizacja pipeline'u poprzez cache'owanie, paralelizację i warunkowe wykonywanie ma uniwersalne zastosowanie i sygnalizuje rekruterom praktyczne doświadczenie produkcyjne
  • Warto przygotować co najmniej jedną działającą konfigurację pipeline'u na każdą platformę, koncentrując się na wzorcach z rzeczywistych projektów zamiast przykładów zabawkowych

Zacznij ćwiczyć!

Sprawdź swoją wiedzę z naszymi symulatorami rozmów i testami technicznymi.

Wyzwanie dnia

Znajdziesz błąd w DevOps?

Prawdziwy fragment kodu, ukryty błąd, jedna próba dziennie. Bez konta, żeby spróbować.

Anthony Fillion-Maillet

Autor:

Anthony Fillion-Maillet

Założyciel SharpSkill

Programista fullstack od ponad 10 lat. Prowadzi SharpSkill i odpowiada za wszystko, co się tu ukazuje.

Zaktualizowano 24 sierpnia 2026

Tagi

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

Udostępnij

Powiązane artykuły