GH GambleHub

Αγωγοί CI/CD: GitHub Actions, GitLab CI

Αγωγοί CI/CD: GitHub Actions, GitLab CI

1) CI/CD Task and Platform Space

CI/CD είναι η συνεχής συναρμολόγηση, δοκιμή και παράδοση αλλαγών από το αποθετήριο σε περιβάλλοντα παραγωγής. Στόχοι:
  • Ταχύτητα και προβλεψιμότητα των εκλύσεων (σύντομο χρονικό διάστημα).
  • Ποιότητα (αυτόματες δοκιμές, στατική/δυναμική ανάλυση).
  • Ασφάλεια εφοδιαστικής αλυσίδας (υπογραφή τεχνουργήματος, έλεγχος πρόσβασης).
  • Αξιοπιστία (καταθέσεις καναρινιών, ταχεία ανατροπή).
  • Παρατηρησιμότητα (ίχνη και μετρήσεις σε κάθε στάδιο).

Βασικές αρχές: «αγωγός ως κώδικας», αμετάβλητα τεχνουργήματα «, κατασκευή μιας φοράς - εκτέλεση πολλών», «βάρδια-αριστερά ασφάλεια», «αριστερό προνόμιο», ντετερμινιστικές συνελεύσεις.

2) Αρχιτεκτονικά πρότυπα μεταφορέων

Φάση: κατασκευή → δοκιμή → πακέτου → ασφάλειας → ανάπτυξη → μετά την εγκατάσταση ελέγχων.
Fan-out/Fan-in: παράλληλες συναρμολογήσεις πίνακα (γλώσσες/πλατφόρμες) με συμπύκνωση των αποτελεσμάτων.
Προώθηση: το ίδιο τεχνούργημα προωθείται μέσω του περιβάλλοντος (dev-stage prod) και δεν επανασυναρμολογείται.

Βασιζόμενοι σε κορμούς + βραχείς κλάδους: ελαχιστοποίηση της μετατόπισης, αυτοματοποιημένοι έλεγχοι PR/MR

Επαναχρησιμοποιήσιμες ροές εργασίας GitLab: περιλαμβάνονται/παιδικοί αγωγοί).
GitOps (προαιρετικά): διαχωρισμός «συναρμολόγησης» και «παράδοσης» (περιβάλλοντα δηλωτικής επαναγοράς της οθόνης Argo CD/Flux).

3) Ασφάλεια της εφοδιαστικής αλυσίδας

Ταυτοποίηση: Ομοσπονδία OIDC από δρομέα σε νέφος (χωρίς μακρόβια κλειδιά).
Μυστικά: κεντρική αποθήκευση, περιορισμός του πλαισίου, απαγόρευση της υλοτομίας.
Υπογραφή αντικειμένων/εμπορευματοκιβωτίων (συνημμένο/Sigstore), επαλήθευση της υπογραφής στον έλεγχο εισόδου.
SBOM (CycloneDX/SPDX) και SCA, SAST/DAST/Σάρωση εμπορευματοκιβωτίων - «υποχρεωτική πύλη».
Πολιτικοί: OPA/Conftest for IaC/manifestos, «no latest», απαγορεύοντας προνομιούχα εμπορευματοκιβώτια.
Απομόνωση δρομείς: δρομείς σε ιδιωτικό δίκτυο, χωριστή εξερχόμενη πρόσβαση από το δημόσιο διαδίκτυο.

4) Δράσεις GitHub - Δομή και πρακτικές

4. 1 δομή ροών εργασίας

'.github/ροές εργασίας/.yml' - триггеры ('on: push, pull_request, πρόγραμμα, workflow_call').
Επαναχρησιμοποιήσιμες ροές εργασίας για τυποποίηση (χιτώνιο, SCA, συγκρότημα εμπορευματοκιβωτίων, εγκατάσταση).

4. 2 Παράδειγμα: αγωγός πολλαπλών σταδίων με OIDC και υπογραφή εικόνας

yaml name: ci-cd

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

permissions:
id-token: write  # для OIDC contents: read packages: write

jobs:
build_test_matrix:
runs-on: ubuntu-latest strategy:
matrix:
node: [18, 20]
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4 with: { node-version: ${{ matrix. node }} }
- name: Cache npm uses: actions/cache@v4 with:
path: ~/.npm key: npm-${{ runner. os }}-${{ matrix. node }}-${{ hashFiles('/package-lock. json') }}
- run: npm ci
- run: npm run lint && npm test -- --ci

docker_build_sign:
runs-on: ubuntu-latest needs: build_test_matrix steps:
- uses: actions/checkout@v4
- name: Login to GHCR uses: docker/login-action@v3 with:
registry: ghcr. io username: ${{ github. actor }}
password: ${{ secrets. GITHUB_TOKEN }}
- name: Build image run:
docker build --pull --no-cache -t ghcr. io/org/app:${{ github. sha }}.
docker push ghcr. io/org/app:${{ github. sha }}
- name: Generate SBOM uses: anchore/syft-action@v0 with:
image: ghcr. io/org/app:${{ github. sha }}
format: cyclonedx-json output-file: sbom. json
- name: Cosign sign (OIDC)
uses: sigstore/cosign-installer@v3
- name: Sign image run:
cosign sign ghcr. io/org/app:${{ github. sha }} \
--yes \
--identity-token $ACTIONS_ID_TOKEN_REQUEST_TOKEN \
--rekor-url https://rekor. sigstore. dev

deploy_stage:
runs-on: ubuntu-latest needs: docker_build_sign environment:
name: stage url: https://stage. example. com steps:
- uses: actions/checkout@v4
- name: Assume cloud role via OIDC uses: aws-actions/configure-aws-credentials@v4 with:
role-to-assume: arn:aws:iam::123456789012:role/github-deployer aws-region: eu-central-1
- name: Helm deploy (canary 10%)
run:
helm upgrade --install app charts/app \
--set image. tag=${{ github. sha }} \
--set canary. enabled=true --set canary. traffic=10
- name: Smoke checks run:./scripts/smoke. sh

promote_prod:
runs-on: ubuntu-latest needs: deploy_stage environment:
name: production url: https://app. example. com concurrency: prod-release steps:
- name: Manual approval gate run: echo "Requires environment approvers in repo settings"
- name: Promote canary → 100% (blue-green)
run:
helm upgrade --install app charts/app \
--set image. tag=${{ github. sha }} \
--set canary. enabled=false
- name: Post-deploy checks & rollback on SLO breach run:./scripts/verify_or_rollback. sh
Κλειδιά:
  • Οι 'διαστάσεις' ελαχιστοποιούνται, 'id-token: write' is enabled for OIDC.
  • Περιβάλλοντα με εγκρίσεις και URL, το «concurrency» προστατεύει από τους αγώνες.
  • Συμπερίληψη των καναρινιών στην κυκλοφορία και αυτόματη ανατροπή σε SLO.

4. 3 Επαναχρησιμοποιήσιμη ροή εργασίας (παράδειγμα κλήσης)

yaml jobs:
security_suite:
uses: org/.github/.github/workflows/security. yml@v1 with:
severity_threshold: high

5) GitLab CI - Δομή και πρακτικές

5. 1 Βασική δομή

".gitlab-ci. yml 'στη ρίζα· βασικές οντότητες: «στάδια», «θέσεις εργασίας», «κανόνες», «ανάγκες», «τεχνουργήματα», «περιβάλλοντα», «χειροκίνητα».
Επαναχρησιμοποίηση: 'συμπεριλαμβάνονται:' (τοπικά/απομακρυσμένα μοτίβα), παιδικοί/μητρικοί αγωγοί για σύνθετους μονορέπους.

5. 2 Παράδειγμα: μήτρα, κρυφή μνήμη, υπογραφή, περιβάλλοντα και εγκρίσεις

yaml stages: [lint, test, build, security, deploy]

variables:
DOCKER_TLS_CERTDIR: "" # docker: dind acceleration
IMAGE_TAG: $CI_COMMIT_SHA

lint:
stage: lint image: node:20 script:
- npm ci
- npm run lint cache:
key: "npm-${CI_COMMIT_REF_SLUG}"
paths: [node_modules/]
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"

test:
stage: test image: node:20 parallel:
matrix:
- NODE_VERSION: ["18", "20"]
script:
- nvm install $NODE_VERSION          true
- npm ci
- npm test -- --ci artifacts:
when: always reports:
junit: report. xml

build_image:
stage: build image: docker:26. 1 services: [ "docker:26. 1-dind" ]
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$IMAGE_TAG.
- docker push $CI_REGISTRY_IMAGE:$IMAGE_TAG artifacts:
expire_in: 1 week paths: [ "sbom. json" ]
after_script:
- syft $CI_REGISTRY_IMAGE:$IMAGE_TAG -o cyclonedx-json > sbom. json

security_scans:
stage: security image: alpine:3. 20 script:
- trivy image --exit-code 0 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$IMAGE_TAG rules:
- if: '$CI_COMMIT_BRANCH == "main"'

deploy_stage:
stage: deploy image: bitnami/kubectl:1. 30 environment:
name: stage url: https://stage. example. com on_stop: stop_stage script:
- kubectl set image deploy/app app=$CI_REGISTRY_IMAGE:$IMAGE_TAG -n stage
-./scripts/smoke. sh needs: [build_image, security_scans]
when: manual allow_failure: false

stop_stage:
stage: deploy image: bitnami/kubectl:1. 30 environment:
name: stage action: stop script:
- kubectl rollout undo deploy/app -n stage

deploy_prod:
stage: deploy image: alpine/k8s:1. 30. 2 environment:
name: production url: https://app. example. com rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: manual allow_failure: false script:
-./scripts/canary_traffic. sh 10
-./scripts/verify_or_rollback. sh
Κλειδιά:
  • "parallel. ο πίνακας "προσομοιώνει συγκροτήματα πίνακα.
  • 'artifacts' + εκθέσεις δοκιμών.
  • Περιβάλλοντα με 'on _ stop', εγχειρίδιο 'όταν: εγχειρίδιο' για εγκρίσεις.
  • DIND για την κατασκευή μιας εικόνας (καλύτερα - Kaniko/BuildKit in the k8s runner).

5. 3 Παιδικοί αγωγοί και περιλαμβάνονται για μονορέπο

yaml include:
- local:.gitlab/ci/includes/security. yml
- project: org/platform/pipelines file: /k8s/deploy. yml ref: v1

stages: [prepare, component_a, component_b, deploy]

component_a:
stage: component_a trigger:
include:.gitlab/ci/component_a. yml strategy: depend

component_b:
stage: component_b trigger:
include:.gitlab/ci/component_b. yml strategy: depend

6) Μονοθεραπεία και πολλαπλές υπηρεσίες

Ιδιοκτησία βάσει καταλόγου: CODEOWNERS και δοκιμές με εύρος ανά διαδρομή.
Στοιχειώδεις κατασκευές: προσδιορισμός επηρεαζόμενων πακέτων/διαγραμμάτων. κρύπτη από κλειδιά διαδρομής και αρχεία κλειδώματος.
Δυναμικοί αγωγοί: οι αγωγοί για παιδιά/« ροή εργασίας _ κλήση »λειτουργούν μόνο για τροποποιημένα συστατικά μέρη.
Έκδοση: semver για κάθε ενότητα, changelog στο στάδιο απελευθέρωσης.

7) Αποθήκευση και επιτάχυνση

Αποθήκες διευθύνσεων περιεχομένου (hashFiles/lockfile).
Ξεχωριστή μνήμη για εξαρτήσεις και αντικείμενα.
Προθερμαινόμενες εικόνες δρομέα (αλυσίδες εργαλείων, SDK).
Τοπικά κάτοπτρα συσκευασίας (npm/pip/maven) και μνήμη μητρώου εμπορευματοκιβωτίων.

8) Στρατηγικές απελευθέρωσης και ανατροπή

Κανάριος: σταδιακή αύξηση του ποσοστού κυκλοφορίας· αυτόματη στάση κατά τη διάρκεια της υποβάθμισης SLO.
Μπλε-πράσινο: παράλληλες στοίβες, άμεση αλλαγή.
Σκιά: διπλά αιτήματα χωρίς να επηρεάζεται ο πελάτης.
Σημαίες χαρακτηριστικών: ανάπτυξη σε επίπεδο σημαίας, όχι επίπεδο απελευθέρωσης.
Rollback: καθαρά σενάρια ενός κουμπιού, η έκδοση του τεχνουργήματος αποθηκεύεται στα μεταδεδομένα απελευθέρωσης.

9) Υποδομές και Gitops

IaC: Η διαχείριση του Terraform/Ansible/Helm πραγματοποιείται σε χωριστές συμφωνίες επαναγοράς. Ο κώδικας πολιτικής ως πύλη.
GitOps-contour: Το Argo CD/Flux παρατηρεί repo με μανιφέστο περιβάλλοντος. ο αγωγός δημιουργεί μόνο ένα τεχνούργημα και ενημερώνει τις εκδόσεις στο Git.
Πλεονεκτήματα: σαφής ιστορία περιβαλλοντικών αλλαγών, ιδιαιτερότητα, τυπικές ανατροπές μέσω Git.

10) Παρατηρησιμότητα του CI/CD

Μετρήσεις DORA: ποσοστό εξάντλησης, χρόνος από τη δέσμευση έως την παραγωγή, ποσοστό αποτυχίας, MTTR.
Τηλεμετρία: χρόνος αναμονής εργασίας, διάρκεια των σταδίων, ρυθμός επιτυχίας της μνήμης, συχνότητα δοκιμών φλογοβολίας.
Αρχεία καταγραφής ασφαλείας: ποιος ξεκίνησε την απελευθέρωση, ποιες πύλες πέρασαν, ποιες εξαιρέσεις εκδόθηκαν.

11) Έλεγχος πρόσβασης και εγκρίσεις

Προστασία υποκαταστημάτων και υποχρεωτικοί έλεγχοι.
Εγκρίσεις περιβάλλοντος: χωριστοί κατάλογοι εγκρίσεων για τη φάση/το στάδιο.
Πρόσβαση JIT για χειροκίνητα βήματα, καταγραφή συνεδρίας.
Διαχωρισμός καθηκόντων: διαφορετικοί ρόλοι για «γράφει κώδικα», «εγκρίνει», «απελευθερώνει».

12) Συχνά σφάλματα (αντίγραφα)

Μακρόβια σύννεφα σε μυστικά επαναγοράς αντί για ρόλους OIDC.
Συναρμολόγηση διαφορετικών αντικειμένων για το στάδιο και το prod (παραβίαση της «μιας κατασκευής»).
'latest' tags and mutable images.
Δημοσίευση μυστικών σε κλιμακωτά αρχεία καταγραφής (μάσκα χωρίς αναπηρία).
Ένας κοινός δημόσιος φορέας για την ανάπτυξη της παραγωγής.
Έλλειψη «θυρών» ασφαλείας (SAST/SCA/Policy) και έλεγχος μετά την εγκατάσταση.

13) Κατάλογος ελέγχου εφαρμογής (0-60 ημέρες)

0- 15 ηµέρες

Διαμόρφωση κανόνων βασισμένων σε κορμό, κανόνες PR/MR, υποχρεωτικοί στατικοί έλεγχοι.
Ενεργοποίηση της ομοσπονδίας OIDC στο νέφος. ελάχιστες «επιδόσεις».
Ταχυδρομικοί δρομείς: δημόσιοι - για ΚΚΠ, ιδιωτικοί - για CD.

16-30 ημέρες

Προσθήκη SBOM, υπογραφή εικόνας. Δέσμη - Επαλήθευση υπογραφής.
Εισάγετε καναρίνι/γαλάζιο-πράσινο. auto-rollback από SLO.
Μνήμη εξαρτήσεων και αντικειμένων, προθερμαινόμενες εικόνες.

31-60 ημέρες

Χωριστή συναρμολόγηση και παράδοση (GitOps), πύλη πολιτικής ως κωδικός.
Καθιέρωση μετρήσεων και συναγερμών DORA για την υποβάθμιση των αγωγών.
Υποδείγματα αγωγών (επαναχρησιμοποιήσιμο/παιδί) για όλες τις υπηρεσίες.

14) Συμβουλές πρακτικής αξιοπιστίας

Υποστήριξη μικρών, γρήγορων αγωγών (10-12 λεπτά πριν από το σήμα δημοσίων σχέσεων).
Fill flaky tests: ετικέτες καραντίνας + παράλληλη διόρθωση.
Μην αναμιγνύετε τεχνουργήματα από ΚΚΠ και απελευθερώνετε αντικείμενα. αποθηκεύουν μεταδεδομένα (δέσμευση, ώρα, SBOM, υπογραφές).
Δώστε στους προγραμματιστές τοπικά σενάρια πανομοιότυπα με τα βήματα αγωγών (ισοτιμία dev-prod).

15) Υποδείγματα για επαναχρησιμοποίηση

15. 1 Δράσεις GitHub - επαναχρησιμοποιήσιμη ροή εργασίας για την ασφάλεια (απλουστευμένη)

yaml name: security-suite on:
workflow_call:
inputs:
severity_threshold:
type: string required: false default: high jobs:
sast_sca:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- run:./sec/sast. sh --threshold ${{ inputs. severity_threshold }}
- run:./sec/sca. sh --format cyclonedx-json --out sbom. json artifacts: # if using actions/upload-artifact
- sbom. json

15. 2 GitLab - συμπεριλαμβάνεται το πρότυπο ανάπτυξης (απλοποιημένο)

yaml
.deployment_template:
image: alpine/k8s:1. 30 script:
- helm upgrade --install $APP charts/$APP --set image. tag=$IMAGE_TAG rules:
- if: '$CI_COMMIT_BRANCH == "main"'

16) Συμπέρασμα

Το GitHub Actions και το GitLab CI παρέχουν ώριμους μηχανισμούς για έναν γρήγορο και ασφαλή βρόχο κώδικα. Το κλειδί για την επιτυχία είναι η τυποποίηση και η ασφάλεια: OIDC αντί για κλειδιά, υπογραφή και SBOM, πύλες ποιότητας, ένα ενιαίο τεχνούργημα με προώθηση, παράδοση GitOps και παρατηρησιμότητα μέσω DORA. Κατασκευή αγωγών ως προϊόν: Το μέτρο, η απλούστευση, η επιτάχυνση - και οι απελευθερώσεις θα γίνουν μια αγγαρεία, όχι ένα γεγονός.

Contact

Επικοινωνήστε μαζί μας

Επικοινωνήστε για οποιαδήποτε βοήθεια ή πληροφορία.Είμαστε πάντα στη διάθεσή σας.

Telegram
@Gamble_GC
Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.