ЁЯЪЪ рдзрдбрд╛ 07 тАФ CI/CD рдЪрд╛ рдмрд╛рдВрдзрд▓реЗрд▓рд╛ рд░рд╕реНрддрд╛: production рдХрдбреЗ рдЬрд╛рдгрд╛рд░рд╛ рдПрдХрдЪ рд╕рд╛рдорд╛рдпрд┐рдХ рд░рд╕реНрддрд╛
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 07 ┬╖ рдорд╛рдЧреЗ: lesson-06-preview-environments ┬╖ рдкреБрдвреЗ: lesson-08-secrets-config
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ06, рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рд╡рд╛рдкрд░рддрд╛ рдпреЗрдгрд╛рд░реЗ, version рдЕрд╕рд▓реЗрд▓реЗ pipeline templates. рдкреНрд░рддреНрдпреЗрдХ service
рдиреЗ build-test-scan-deploy рдкрд╛рдпрд▒реНрдпрд╛рдВрдЪреА рд╕реНрд╡рддрдГрдЪреА copy рдмрд╛рд│рдЧрдгреНрдпрд╛рдРрд╡рдЬреА, рддреА рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪрд╛ template рдПрдХрд╛
version рд╡рд░ рдмреЛрд▓рд╛рд╡рддреЗ. Version reference рдХрд╕рд╛ рд╕реЛрдбрд╡рд▓рд╛ рдЬрд╛рддреЛ тАФ рд╣рд▓рдгрд╛рд░рд╛ major tag (@v2), рдиреЗрдордХреЗ
version (@v2.0.0) рдХрд┐рдВрд╡рд╛ paste рдХреЗрд▓реЗрд▓реА copy тАФ рдпрд╛рд╡рд░реВрди рдард░рддреЗ рдХреА рджреБрд░реБрд╕реНрддреА service рдкрд░реНрдпрдВрдд рдЖрдкреЛрдЖрдк
рдкреЛрд╣реЛрдЪрддреЗ рдХреА рдирд╛рд╣реА. idp/selfserve.py рдордзрд▓реЗ PIPELINES, resolve_ref()
рдЖрдгрд┐ pipeline(), idp/demo.py рдордзрд▓реЗ pipelines().
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд╡рд┐рджреНрдпрд╛рд░реНрдереА рдпреЗрдгреНрдпрд╛рдЖрдзреА рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧрдЦреЛрд▓реАрд▓рд╛ рд╕рдХрд╛рд│рдЪрд╛ рддреЛрдЪ рджрд┐рдирдХреНрд░рдо рд▓рд╛рдЧрддреЛ: рдХреБрд▓реВрдк рдЙрдШрдбрд╛, рдЖрдкрддреНрдХрд╛рд▓реАрди рджрд╛рд░ рддрдкрд╛рд╕рд╛, рджрд┐рд╡реЗ рд▓рд╛рд╡рд╛, рдЦрд┐рдбрдХреНрдпрд╛ рдЙрдШрдбрд╛. ЁЯЪк
рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╢рд┐рдХреНрд╖рд┐рдХреЗрдиреЗ рдЖрдкрд▓реЗ рджрд┐рдирдХреНрд░рдо-рдХрд╛рд░реНрдб рд╕реНрд╡рддрдГ рд▓рд┐рд╣рд┐рд▓реЗ. рдордЧ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдиреЗ рдПрдХрдЪ рджрд┐рдирдХреНрд░рдо-рдХрд╛рд░реНрдб рд▓рд┐рд╣рд┐рд▓реЗ, рддреНрдпрд╛рд▓рд╛ рдХреНрд░рдорд╛рдВрдХ рджрд┐рд▓рд╛ (version 2), рдЖрдгрд┐ рддреЗ рд╢рд┐рдХреНрд╖рдХ-рдХрдХреНрд╖рд╛рдд рд▓рд╛рд╡рд▓реЗ. рдЖрддрд╛ рд╢рд┐рдХреНрд╖рд┐рдХрд╛ рдореНрд╣рдгрддрд╛рдд "рдореА рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪреЗ рдХрд╛рд░реНрдб, version 2, рдкрд╛рд│рддреЗ."
рдХрд╛рд░реНрдпрд╛рд▓рдп рдПрдХ рдкрд╛рдпрд░реА рдЬреЛрдбрддреЗ тАФ "рдзреБрд░рд╛рдЪрд╛ alarm рддрдкрд╛рд╕рд╛" (version 2.1) тАФ рддреЗрд╡реНрд╣рд╛ рдХрд╛рд╣реАрддрд░реА рдордиреЛрд░рдВрдЬрдХ рдШрдбрддреЗ:
- рдХрддрд░рд┐рдирд╛ рдореНрд╣рдгрд╛рд▓реА рд╣реЛрддреА "рдирд╡реАрдирддрдо version 2 рдХрд╛рд░реНрдб". рддрд┐рд▓рд╛ рдХрд╛рд╣реАрд╣реА рди рдХрд░рддрд╛ рджреБрд╕рд▒реНрдпрд╛ рджрд┐рд╡рд╢реА рд╕рдХрд╛рд│реА рдзреБрд░рд╛рдЪреНрдпрд╛ alarm рдЪреА рдкрд╛рдпрд░реА рдорд┐рд│рддреЗ. тЬЕ
- рдРрд╢реНрд╡рд░реНрдпрд╛ рдореНрд╣рдгрд╛рд▓реА рд╣реЛрддреА "рдиреЗрдордХреЗ рдХрд╛рд░реНрдб 2.0". рддреА рд╕реНрд╡рддрдГ рдмрджрд▓рд╛рдпрдЪреЗ рдард░рд╡реЗрдкрд░реНрдпрдВрдд рдЬреБрдиреЗрдЪ рдХрд╛рд░реНрдб рдареЗрд╡рддреЗ. тП╕я╕П
- рдЧреНрд░рдВрдерд╛рд▓рдп рдЕрдЬреВрдирд╣реА рдХрд╛рд░реНрдб 1 рдкрд╛рд│рддреЗ. рддреНрдпрд╛рдд рдЖрдкрддреНрдХрд╛рд▓реАрди рджрд╛рд░рд╛рдЪреА рддрдкрд╛рд╕рдгреАрдЪ рдирд╛рд╣реА. тЪая╕П
- fees рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдиреЗ рд╡рд░реНрд╖рд╛рдВрдкреВрд░реНрд╡реА рдХрд╛рд░реНрдб 1 рдЪреА photocopy рдХрд╛рдврд▓реА рдЖрдгрд┐ рддреА photocopy рдкрд╛рд│рддреЗ. рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдиреЗ рдХрд╛рд╣реАрд╣реА рдмрджрд▓рд▓реЗ рддрд░реА рддреЗ рддрд┐рдЪреНрдпрд╛рдкрд░реНрдпрдВрдд рдХрдзреАрдЪ рдкреЛрд╣реЛрдЪрдгрд╛рд░ рдирд╛рд╣реА. ЁЯУД
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
subgraph office["ЁЯПв the office's pipeline releases"]
v1["v1.0.0<br/>4 steps ┬╖ 14 min"]
v2["v2.0.0<br/>+ SBOM + image scan<br/>6 steps ┬╖ 17 min"]
v21["v2.1.0<br/>+ dependency cache<br/>7 steps ┬╖ 15 min"]
end
er["exam-results @v2"] --> v21
tt["timetable @v2.0.0"] --> v2
ls["library-search @v1"] --> v1
fe["fees: pasted copy of v1"] -.-> cp["ЁЯУД v1.0.0 copy<br/>never changes"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/platform-engineering/lesson-diagrams.html#l07
тЭУ рдХрд╛рдп
- Paved road pipeline тАФ platform team рдмрдирд╡рддреЗ рдЖрдгрд┐ рд╕рд╛рдВрднрд╛рд│рддреЗ рдЕрд╢реА CI/CD pipeline, рд╕рдВрд╕реНрдереЗрдЪреНрдпрд╛ defaults рд╕рд╣: tests, image build, SBOM (software bill of materials, image рдЪреНрдпрд╛ рдЖрдд рдХрд╛рдп рдЖрд╣реЗ рддреНрдпрд╛рдЪреА рдпрд╛рджреА), рдорд╛рд╣реАрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ vulnerabilities рд╕рд╛рдареА image scan, deploy.
- Reusable pipeline / template тАФ pipeline рдПрдХрд╛рдЪ рдард┐рдХрд╛рдгреА рд░рд╛рд╣рддреЗ; services рддрд┐рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛рдд.
GitHub Actions рдпрд╛рдВрдирд╛ reusable workflows рдореНрд╣рдгрддреЗ (
on: workflow_call, рдмреЛрд▓рд╛рд╡рд▓реЗ рдЬрд╛рддреЗuses: org/repo/.github/workflows/file.yml@refрдиреЗ); GitLab CIinclude:(рдЖрдгрд┐ CI/CD components) рд╡рд╛рдкрд░рддреЗ; Jenkins рдордзреНрдпреЗ shared libraries рдЕрд╕рддрд╛рдд. - Semantic versioning тАФ
MAJOR.MINOR.PATCH. Minor рдХрд┐рдВрд╡рд╛ patch release рдиреЗ рдмреЛрд▓рд╛рд╡рдгрд╛рд▒реНрдпрд╛рдВрдирд╛ рдореЛрдбреВ рдирдпреЗ; major release рдореЛрдбреВ рд╢рдХрддреЗ. - Moving major tag тАФ
v2рд╣рд╛ рдПрдХ Git tag рдЖрд╣реЗ рдЬреЛ рдкреНрд░рдХрд╛рд╢рдХ рдирд╡реАрдирддрдоv2.x.yрдХрдбреЗ рд╣рд▓рд╡рддреЛ. рд╣рд╛ рдПрдХ рд╕рдВрдХреЗрдд рдЖрд╣реЗ (GitHub Actions рд╕рд╛рдареА рд╕рд╛рдорд╛рдиреНрдп), Git рддреНрдпрд╛рдЪреА рд╕рдХреНрддреА рдХрд░рдд рдирд╛рд╣реА. рдмреЛрд▓рд╛рд╡рдгрд╛рд▒реНрдпрд╛рдВрдирд╛ рджреБрд░реБрд╕реНрддреНрдпрд╛ рдЖрдкреЛрдЖрдк рдорд┐рд│рддрд╛рдд тАФ рдЖрдгрд┐ рдирд╡реНрдпрд╛ release рдордзрд▓реА рдХреЛрдгрддреАрд╣реА рдЪреВрдХрд╕реБрджреНрдзрд╛. - Exact pin тАФ
@v2.0.0рдХрд┐рдВрд╡рд╛, рдЖрдгрдЦреА рд╕реБрд░рдХреНрд╖рд┐рдд, рдкреВрд░реНрдг commit SHA: рдмреЛрд▓рд╛рд╡рдгрд╛рд░рд╛ reference рдмрджрд▓реЗрдкрд░реНрдпрдВрдд рдиреЗрдордХрд╛ рддреЛрдЪ code рдЪрд╛рд▓рд╡рддреЛ. GitHub рдЪреЗ security рдорд╛рд░реНрдЧрджрд░реНрд╢рди third-party actions рдкреВрд░реНрдг commit SHA рд▓рд╛ pin рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЗ, рдХрд╛рд░рдг tag рд╣рд▓рд╡рддрд╛ рдпреЗрддреЛ. - Copy-paste drift тАФ paste рдХреЗрд▓реЗрд▓реА copy рдореНрд╣рдгрдЬреЗ рдкрд░рддреАрдЪрд╛ рджреБрд╡рд╛ рдирд╕рд▓реЗрд▓рд╛ fork. рддрд┐рд▓рд╛ security рдЪреНрдпрд╛ рджреБрд░реБрд╕реНрддреНрдпрд╛рдВрд╕рд╣ рдХреЛрдгрддреНрдпрд╛рдЪ рджреБрд░реБрд╕реНрддреНрдпрд╛ рдорд┐рд│рдд рдирд╛рд╣реАрдд.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг рдПрдХрдореЗрдХрд╛рдВрдХрдбреВрди copy рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╢рдВрднрд░ pipelines рд╢рдВрднрд░ рдереЛрдбреНрдпрд╛ рд╡реЗрдЧрд│реНрдпрд╛ pipelines рдмрдирддрд╛рдд. рдирд╡рд╛ рдирд┐рдпрдо рдЖрд▓рд╛ ("рдкреНрд░рддреНрдпреЗрдХ image scan рдЭрд╛рд▓реАрдЪ рдкрд╛рд╣рд┐рдЬреЗ") рдХреА рдХреЛрдгрд╛рд▓рд╛ рддрд░реА рд╢рдВрднрд░ files рдмрджрд▓рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддрд╛рдд. рд╕рд╛рдорд╛рдпрд┐рдХ template рдЕрд╕реЗрд▓ рддрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рдмрджрд▓ рдПрдХрджрд╛рдЪ рдХрд░рддреЗ, рддреЛ release рдХрд░рддреЗ, рдЖрдгрд┐ template рдкрд╛рд│рдгрд╛рд▒реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ service рд▓рд╛ рддреЛ рдорд┐рд│рддреЛ тАФ moving tags рд╕рд╛рдареА рд▓рдЧреЗрдЪ, exact pins рд╕рд╛рдареА рдкреБрдврдЪреНрдпрд╛ bump рд▓рд╛. Version reference рдореНрд╣рдгрдЬреЗ рдХреЗрд╡реНрд╣рд╛ рдпрд╛рд╡рд░рдЪреЗ team рдЪреЗ рдирд┐рдпрдВрддреНрд░рдг.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
idp/selfserve.py рдордзрд▓реНрдпрд╛ PIPELINES рдордзреНрдпреЗ рддреАрди releases
(step, minutes) рдЪреНрдпрд╛ рдпрд╛рджреА рдореНрд╣рдгреВрди рдЖрд╣реЗрдд тАФ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареАрдЪреЗ рдЖрдХрдбреЗ. resolve_ref(ref) reference
рд▓рд╛ release рдордзреНрдпреЗ рдмрджрд▓рддреЗ: exact version рд╕реНрд╡рддрдГрд▓рд╛рдЪ рдкрд░рдд рджреЗрддреЗ; v2 рд╕рд╛рд░рдЦрд╛ prefix рдЬреБрд│рдгрд╛рд░реА рдирд╡реАрдирддрдо
release рдкрд░рдд рджреЗрддреЛ (рдЖрдХрдбреЗ рдореНрд╣рдгреВрди рддреБрд▓рдирд╛ рдХрд░реВрди, рдореНрд╣рдгрдЬреЗ v2.10.0 рд╣реЗ v2.9.0 рд╡рд░ рдорд╛рдд рдХрд░реЗрд▓); copy
paste рдХреЗрд▓реЗрд▓реА v1.0.0 рдкрд░рдд рджреЗрддреЗ. pipeline(ref) release, рддрд┐рдЪреНрдпрд╛ рдкрд╛рдпрд▒реНрдпрд╛ рдЖрдгрд┐ рддрд┐рдЪреА рдПрдХреВрдг рдорд┐рдирд┐рдЯреЗ
рдкрд░рдд рджреЗрддреЗ. idp/demo.py рдордзрд▓реЗ pipelines() рдЪрд╛рд░ services рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЦрд░реЛрдЦрд░
рдХрд╛рдп рдЪрд╛рд▓рд╡рддреЗ рддреЗ рджрд╛рдЦрд╡рддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 idp/demo.py pipelines
python3 - <<'EOF'
import sys; sys.path.insert(0, "idp"); import selfserve
from selfserve import PIPELINES, resolve_ref, pipeline
PIPELINES["v2.2.0"] = PIPELINES["v2.1.0"] + [("smoke test", 2)] # the office ships a new minor release
PIPELINES["v3.0.0"] = [("checkout", 1), ("test", 3), ("build image", 4), ("sign image", 1), ("deploy", 3)]
for ref in ("v2", "v2.0.0", "v3", "v1", "copy"):
version, steps, minutes = pipeline(ref)
print(f"@{ref:<7} тЖТ {version:<21} {minutes:>2} min ┬╖ last step: {steps[-1]}")
print("unknown ref:", resolve_ref("v9"))
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
pipelines рд╣реЗ рдЫрд╛рдкрддреЗ:
exam-results uses @v2 тЖТ runs v2.1.0 7 steps, 15 min (scans images)
timetable uses @v2.0.0 тЖТ runs v2.0.0 6 steps, 17 min (scans images)
library-search uses @v1 тЖТ runs v1.0.0 4 steps, 14 min
fees uses @copy тЖТ runs v1.0.0 (pasted copy) 4 steps, 14 min
рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:
@v2 тЖТ v2.2.0 17 min ┬╖ last step: smoke test
@v2.0.0 тЖТ v2.0.0 17 min ┬╖ last step: deploy
@v3 тЖТ v3.0.0 12 min ┬╖ last step: deploy
@v1 тЖТ v1.0.0 14 min ┬╖ last step: deploy
@copy тЖТ v1.0.0 (pasted copy) 14 min ┬╖ last step: deploy
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рдПрдХрд╛ рдирд╡реНрдпрд╛ release (v2.2.0) рдиреЗ @v2 рдХрд╛рдп рдЪрд╛рд▓рд╡рддреЗ рддреЗ рдмрджрд▓рд▓реЗ тАФ рдПрдХ smoke test рдЖрд▓реА тАФ рдкрдг @v2.0.0
рдЬрд╛рдЧреАрдЪ рд░рд╛рд╣рд┐рд▓реЗ. Major release v3.0.0 рдХреЛрдгреА v3 рдорд╛рдЧреЗрдкрд░реНрдпрдВрдд рдХреЛрдгрд╛рдкрд░реНрдпрдВрддрдЪ рдкреЛрд╣реЛрдЪрд▓реА рдирд╛рд╣реА; major
version рдЪрд╛ рд╣рд╛рдЪ рддрд░ рдЙрджреНрджреЗрд╢ рдЖрд╣реЗ. рджреЛрди services (library-search, fees) рдХреЛрдгрддрд╛рдЪ image scan
рдЪрд╛рд▓рд╡рдд рдирд╛рд╣реАрдд. рддреНрдпрд╛рддрд▓реА рдПрдХ рдПрдХрдЪ reference @v2 рдХрд░реВрди рддреЗ рджреБрд░реБрд╕реНрдд рдХрд░реВ рд╢рдХрддреЗ; рджреБрд╕рд░реАрд▓рд╛ рдЖрдзреА рдЖрдкрд▓реА
copy рд╣рдЯрд╡рд╛рд╡реА рд▓рд╛рдЧреЗрд▓. Demo рдордзреНрдпреЗ, v2.1.0 рдЪреНрдпрд╛ cache рдореБрд│реЗ рдЬрд╛рд╕реНрдд рдкрд╛рдпрд▒реНрдпрд╛ рдЕрд╕реВрдирд╣реА pipeline v2.0.0
рдкреЗрдХреНрд╖рд╛ 2 рдорд┐рдирд┐рдЯреЗ рдЬрд▓рдж рдЭрд╛рд▓реА тАФ platform release рдлрдХреНрдд рдирд┐рдпрдо рдЬреЛрдбрдд рдирд╛рд╣реА, рд╡реЗрд│рд╣реА рдкрд░рдд рджреЗрдК рд╢рдХрддреЗ.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- template рдЪреА "рдлрдХреНрдд рдпрд╛ рдПрдХрджрд╛рдЪ" copy рдХрд░рдгреЗ тАФ рддреНрдпрд╛ copy рд▓рд╛ рджреБрд░реБрд╕реНрддреНрдпрд╛рдВрдмрджреНрджрд▓ рдкреБрдиреНрд╣рд╛ рдХрдзреАрдЪ рдХрд│рдд рдирд╛рд╣реА
- рдмреЛрд▓рд╛рд╡рдгрд╛рд▒реНрдпрд╛рдВрдирд╛ рдореЛрдбрдгрд╛рд▒реНрдпрд╛ release рдХрдбреЗ major tag рд╣рд▓рд╡рдгреЗ (рддреНрдпрд╛рд╕рд╛рдареА рдирд╡реЗ major рд╣рд╡реЗ рд╣реЛрддреЗ)
- exact versions pin рдХрд░рдгреЗ рдЖрдгрд┐ рдХрдзреАрдЪ bump рди рдХрд░рдгреЗ тАФ рдЖрдЬ рд╕реБрд░рдХреНрд╖рд┐рдд, рдЙрджреНрдпрд╛ рд╡рд░реНрд╖рд╛рдВрдиреА рдорд╛рдЧреЗ
- рдЗрддрдХреЗ inputs рдЕрд╕рд▓реЗрд▓рд╛ template рдХреА рдкреНрд░рддреНрдпреЗрдХ service рдЪреЗ рдмреЛрд▓рд╛рд╡рдгреЗ рддрд░реАрд╣реА рд╡реЗрдЧрд│реЗрдЪ рдЕрд╕рддреЗ
- changelog рдирд╛рд╣реА, рддреНрдпрд╛рдореБрд│реЗ bump рдиреЗ рдХрд╛рдп рдмрджрд▓реЗрд▓ рддреЗ teams рдирд╛ рдХрд│рдд рдирд╛рд╣реА
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
рдЦрд▒реНрдпрд╛ repo рд╡рд░ GitHub Actions. рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪрд╛ reusable workflow, school/paved-road рдордзреНрдпреЗ:
# .github/workflows/python.yml
on:
workflow_call:
inputs:
image-name: {required: true, type: string}
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install -r requirements.txt && pytest
- run: docker build -t "${{ inputs.image-name }}:${{ github.sha }}" .
Service рддреЛ рдмреЛрд▓рд╛рд╡рддреЗ тАФ moving major tag рдиреЗ, рдХрд┐рдВрд╡рд╛ exact pin рд╕рд╛рдареА рдкреВрд░реНрдг commit SHA рдиреЗ:
jobs:
ci:
uses: school/paved-road/.github/workflows/python.yml@v2
with:
image-name: exam-results
GitLab CI рд╣реЗрдЪ include рдиреЗ рдХрд░рддреЗ:
include:
- project: school/paved-road
ref: v2.1.0
file: /templates/python.yml
Dependabot рдХрд┐рдВрд╡рд╛ Renovate рд╣реЗ references bump рдХрд░рдгрд╛рд░реЗ pull requests рдЙрдШрдбреВ рд╢рдХрддрд╛рдд, рдореНрд╣рдгрдЬреЗ exact pins рдЧреБрдкрдЪреВрдк рдорд╛рдЧреЗ рдкрдбрдд рдирд╛рд╣реАрдд.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рдкреНрд░рддреНрдпреЗрдХ service рдХреЛрдгрддреЗ pipeline version рдЪрд╛рд▓рд╡рддреЗ рдпрд╛рдЪреА рдпрд╛рджреА рдХрд░рд╛ (рдзрдбрд╛ 10 рддреЗ scorecard check рдордзреНрдпреЗ рдмрджрд▓рддреЛ). Copies рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдЬреБрдиреЗ pins рдЗрдереЗрдЪ рдкреБрдврдЪреА security finding рдпреЗрдКрди рдкрдбреЗрд▓.
тПня╕П рдкреБрдвреЗ
Pipelines рдЖрдгрд┐ services рдирд╛ passwords рдЖрдгрд┐ settings рд▓рд╛рдЧрддрд╛рдд. рдкреБрдвреЗ: рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪреЗ рдХрд┐рд▓реНрд▓реНрдпрд╛рдВрдЪреЗ рдХрдкрд╛рдЯ тАФ service рдореНрд╣рдгреВрди secrets рдЖрдгрд┐ config.
git checkout lesson-08-secrets-config