mono-repository á áá±á«ááºážá
ááºááᯠáá
áºááŒáááºáááºááá¯á ááœá±ážááœá±ážáá²á·ááŒá®áž á
ááºážáááºážá¡á á¡ááœááºáááºááŒáœáá±á¬ á¡ááŒááºážááœá¬ážááŸá¯áá»á¬ážááᯠááŒá
áºá
á±áááºá áááºáá®ážááŒááºážááŒáá·áº
werf á áááŒá¬áá±ážáá®á mono-repo áá¶á·ááá¯ážááŸá¯ááẠá€á¥ááá¬áá±á¬ááºážáá
áºáá¯ááŒá
áºáááºá ááá¯á·áá±á¬áº áŠážá
áœá¬á á€áá¶á·ááá¯ážááŸá¯ááẠwerf ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŸáá·áº áá±áá¯áá»á¡á¬ážááŒáá·áº áááºááá¯á·áááºá
ááºáá±ááááºážá Docker Registry ááŸáá·áº áááºážááŸáá·áº áááºááá¯á·áááºááá¯ááºáááºááᯠá¡ááŒá±ááŸá¬ááŒáá·áºááŒáá«á
áá¯á·á
ááá á¹á ááœá±
áá®ááá¯á¡ááŒá±á¡áá±áá»áá¯ážááᯠá
áááºáá°ážááŒáá·áºáá¡á±á¬ááºá áá¯áá¹ááá®ááœáẠá¡ááŸá®á¡ááá¯áááºážáá±á¬ ááá±á¬áá»ááºáá»á¬ážá¡ááœáẠááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž á¡ááœá²á·áá»á¬ážá
áœá¬ááŸááááºá á¡ááá®áá±ážááŸááºážá¡áá»á¬ážá
á¯ááẠKubernetes ááœááºáááºáááºááŒá®áž ááá¯á·ááŒá±á¬áá·áº ááááºážáááºážáá¬ážáááºá ááœááºááááºáá¬áá»á¬ážá áá¯ááºáá¯á¶áá»á¬ážááᯠááááºážáááºážáááºá¡ááœáẠááŸááºáá¯á¶áááºááŒááºáž (registry) áá
áºáᯠááá¯á¡ááºáá«áááºá á€áá²á·ááá¯á· ááŸááºáá¯á¶áááºááŒááºážá¡ááœáẠáá¯áá¹ááá®ááẠDocker Hub ááᯠá¡áá±á¬áá·áºáá
áºáá¯áááºážááŒáá·áº á¡áá¯á¶ážááŒá¯áá«áááºá COMPANY
. á¡áááºážá¡ááŒá
áºáá¯áẠááá¯ááŸá±á¬ááºááŸá¯á
áá
áºá¡áá»á¬ážá
á¯ááŸáá·áº áááºáá°áááºá Docker Hub ááẠnested repository hierarchy ááᯠááœáá·áºáááŒá¯áá«á, áá²á·ááá¯á· COMPANY/PROJECT/IMAGE
. ááá¯á¡ááŒá±á¡áá±áá»áá¯ážááœááºâŠ ááá±á¬áá»ááºáá
áºáá¯á
á®á¡ááœáẠáá®ážááŒá¬ážá¡áá±á¬áá·áºáá
áºáá¯ááááºáá®ážáá² á€ááá·áºáááºáá»ááºááŒáá·áº ááŸááºáá¯á¶áááºááŒááºážááœáẠmono-monolithic ááá¯ááºáá±á¬ application áá»á¬ážááᯠáááºááá¯á·ááááºážáááºážááá¯ááºáááºáááºážá
áá±á¬áºááŒáá¬ážáá±á¬ á¡ááŒá±á¡áá±ááẠáá
áºá
á¯á¶áá
áºáŠážááŸáá·áº áááºážááŸá®ážááŒá®ážáá¬ážááŒá
áºáá±á¬ááºážááŒá
áºááá¯ááºáá±á¬áºáááºáž áá±áá¯áá»á¡á¬ážááŒáá·áº á¡ááá®áá±ážááŸááºážááá¯ááŸá±á¬ááºááŸá¯ááá
á¹á
áááºááᯠáá¯á¶ážáááºááŒáá·áºááŒáá«á
áá¯á·á á¡áááºáá±á¬áºááŒáá« á¥ááá¬ááŸáá·áº Docker Hub ááᯠááá¯ážáá¬ážááŒááºážáááŸááá²á
ááŒá±ááŸááºážáá»ááºáá»á¬áž
áá»áŸá±á¬ááºááœáŸá¬áááºáá»áŸáẠmonolithicáá¯á¶áá áºáá¯á¶áááºážááœáẠáá±á«áºáá¬áááºá ááá¯á·áá±á¬áẠáá±ážááœááºážáá»á¬áž áááŸááá±á¬á·áá² áá¯ááºáá¯á¶áá»á¬ážááᯠááá±á¬áá»ááºá container registry ááœáẠááááºážáááºážáá«áááºá
á¡ááá®áá±ážááŸááºážáá
áºáá¯ááᯠá¡á
áááºá¡ááá¯ááºážáá»á¬ážá
áœá¬á¡ááŒá
ẠáááºááŒáá±á¬á¡áá«á ááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá»á¬ážááá¯á·ááŒá±á¬áá·áº áá»ááºážáááºááŸá¯áá
áºáᯠááá¯á¡ááºáá«áááºá áá¯á¶ááŸá
áºáá¯á¶áá«ááŸááá±á¬ áá¯á¶ááŸááºáááºá¡ááá®áá±ážááŸááºážáá
áºáá¯á á¥ááá¬ááœááº- frontend
О backend
- ááŒá
áºááá¯ááºáá±á¬ááœá±ážáá»ááºááŸá¯áá»á¬ážááŸá¬-
- áá¯á¶áá»á¬ážááᯠáá®ážááŒá¬áž nested repositories ááœáẠááááºážáááºážáá«-
- á¡áá¬á¡á¬ážáá¯á¶ážááᯠrepository áá áºáá¯ááœáẠááááºážáááºážááŒá®áž tag ááŸá áá¯á¶á¡áááºááᯠááá·áºááœááºážá ááºážá á¬ážáá«á á¥ááá¬á á¡á±á¬ááºáá«á¡ááá¯ááºážá
NB: ááááºáá±á¬á·á ááá°áá®áá²á· repositories ááŸá¬ ááááºážáááºážááŒááºážáá²á· á¡ááŒá¬ážááœá±ážáá»ááºá
áá¬áá
áºáᯠááŸááá«áááºá PROJECT-frontend
О PROJECT-backend
ááá¯á·áá±á¬áº á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááŒá¬áž áá¶á·ááá¯ážááŸá¯á á¡ááœá²á·á¡á
ááºážááŸáá·áº á¡ááœáá·áºá¡áá±ážáá»á¬áž ááœá²áá±ááŸá¯ ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááŒá±á¬áá·áº áááºážááᯠáá»áœááºá¯ááºááá¯á· ááá·áºááœááºážá
ááºážá
á¬ážáááºááá¯ááºáá«á
werf áá±á¬ááºáá¶ááŸá¯
á¡á
ááá¯ááºážááœáẠwerf ááẠnested repositories ááœáẠáá°á·ááá¯ááºáá° ááá·áºáááºáá¬ážááẠ- áá¶áá±á¬ááºážá
áœá¬ááŒáá·áºá ááŸááºáá¯á¶áááºááŸá¯á¡áá»á¬ážá
á¯ááẠá€á¡ááºá¹áá«áááºááᯠáá¶á·ááá¯ážáá±ážáááºá áá¬ážááŸááºážááŸá
áááºáááºá
ááœá±ážáá»ááºááŸá¯á¡á±á¬ááºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºááẠ--images-repo-mode=multirepo|monorepo
(áá°áááºáž multirepo
, i.e. nested repositories ááœáẠááá¯ááŸá±á¬ááºááŸá¯)á áááºážááẠregistry ááœááºáá¯á¶áá»á¬ážááá¯ááááºážáááºážááá·áºáá¯á¶á
á¶áá»á¬ážááá¯áááºááŸááºáááºá á¡ááŒá±áᶠcommands áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááá·áºá¡áá« ááá¯áá»ááºáá±á¬áá¯ááºááᯠááœá±ážáá»ááºááẠáá¯á¶áá±á¬ááºááŒá®áž á¡ááŒá¬ážá¡áá¬á¡á¬ážáá¯á¶ážááẠáááŒá±á¬ááºážáá²áá² ááŸááá±áááºááŒá
áºáááºá
á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº werf ááœá±ážáá»ááºááŸá¯á¡áá»á¬ážá
á¯ááᯠáááºááŸááºááá¯ááºáááºá áááºáááºážáá»ááºááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážCI/CD á
áá
áºáá»á¬ážááœááºá ááá¯ááŸá±á¬ááºááŸá¯áá¯ááºááᯠááá±á¬áá»ááºáá
áºáá¯áá¯á¶ážá¡ááœáẠáá
áºááá¹áá¬áá¯á¶ážá¡ááá¯ááºážá¡áá¬ááŒáá·áº áááºááŸááºááẠááœááºáá°áááºá á¥ááá¬á¡á¬ážááŒááºá·, GitLab áá¡ááŸá¯á ááá±á¬áá»ááºáááºáááºáá»á¬ážááœáẠáááºáááºážáá»ááºááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ ááááºážááŸááºáá
áºáá¯ááᯠááá·áºááá¯ááºáá¯á¶áá¬á áááºáááºáá»á¬áž -> CI / CD -> Variables: WERF_IMAGES_REPO_MODE: multirepo|monorepo
.
áá¯ááºáá¯á¶áá»á¬áž áá¯ááºáá±ááŒááºážááŸáá·áº á¡ááá®áá±ážááŸááºážáá»á¬áž á
áááºááŒááºážá¡ááŒá±á¬ááºáž ááŒá±á¬ááá¯áá«á (áááºááá¯ááºáᬠá
á¬ááœááºá
á¬áááºáž áá±á¬ááºážáá«ážáá»á¬ážááœáẠá€áá¯ááºáááºážá
ááºáá»á¬ážá¡ááŒá±á¬ááºáž á¡áá±ážá
áááºááᯠáááºáááºááŸá¯ááá¯ááºáááº-
áá¬ááºáááºááẠá¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá±ážáá±á¬ááºáááºá
ááá¯ááŸá±á¬ááºááŸá¯áááºážáááºážá¡áá
áºááᯠááá·áºááœááºážááá·áºá¡áá« ááœá¬ááŒá¬ážáá»ááºááŸáá·áº á¡áááá¡áááºá¡áá²ááŸá¬ ááŸááºáá¯á¶áááºááŒááºážá¡á¬áž ááá·áºááŸááºážáá±ážáá¯ááºáá±á¬ááºáá±ááŒááºážááŒá
áºáááºá (werf ááŸáá¶á·ááá¯ážáá¬ážáá±á¬ áá¯ááºáááºááŸááºážáááºážááŒááºážá¡ááºá¹áá«áááºáá»á¬ážá¡ááœáẠááŒáá·áºáá«á
ááá·áºááŸááºážáá±ážáá¯ááºáá±á¬á¡áá«á werf ááẠKubernetes á¡á á¯á¡áá±ážáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯ááá·áºáá¯á¶áá»á¬ážá¡ááŒáẠá¡áá¯á¶ážááŒá¯áá°á០á á®á ááºáááºááŸááºáá¬ážáá±á¬ áá°áá«ááá»á¬ážááᯠááá·áºááœááºážá ááºážá á¬ážáááºá áá°áá«ááá»á¬ážááẠáááºáá»á¬ážááᯠáá»á°áá¬áá»á¬ážá¡ááŒá Ạááá¯ááºážááŒá¬ážááŒááºážá¡áá±á«áº á¡ááŒá±áá¶áááºá áááºááŸááá¶á·ááá¯ážáá±ážáá¬ážáá±á¬ áá»á°áá¬áá»á¬áž-
- tagá áá¬áááœá²á ááŸáá·áº commit áá²á·ááá¯á·áá±á¬ Git primitive áá»á¬ážááŒáá·áº áá»áááºáááºáá¬ážáá±á¬ áááºážáá»á°áᬠ3 áá¯á
- ááááºáááᯠá áááºááŒáá¯ááºáááºáá»á¬ážá¡ááœáẠáá»á°áᬠ1 áá¯á
áá¯á¶ááá±á¬ááºáá¯á¶ážáá¯á¶á á¡ááœáŸááºážáá»á¬ážááœáẠáá¯á¶ááá¯áá¯ááºáá±ááá·áºá¡áá« áááºáá»á°áá¬ááŸáá·áºáááºáááºááá·áº á¡áá»ááºá¡áááºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·ááááºážáááºážáá«áááºá á¡áááá¹áá«ááºá áá°á·áá¬áá° áá±á«áºáá¬á áááºáá¬áẠ- áá°áá«áá¡áá»áá¯á·ááᯠáá»áá·áºáá¯á¶ážááẠááá¯á¡ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá Git repository áá áºáá¯á០áá¬áááœá²áá áºáᯠááá¯á·ááá¯áẠáááºááᯠáá»ááºáá±á¬á¡áá«á áááºá ááºááŸá¯ááᯠáá»ááºáá áºááŒááºážááẠáá¯áá¹áááááºáá«áááºá á¡áá¯á¶ážáááŒá¯áá±á¬ áá»áœááºá¯ááºááá¯á·ááá°áá«ááá»á¬ážá áá áºá áááºáá áºááá¯ááºážá¡á¬ážááŒáá·áº á¡áá»á¯á¶ážáááºáá±á¬ ááŸááºáá¯á¶áááºááŒááºážá០áá¯á¶áá»á¬ážá
repository áá
áºáá¯ááœááºááááºážáááºážáá±á¬á¡áá« (monorepo
) image tag ááœááºá meta tag á¡ááŒááºá áá¯á¶áá¡áááºááá¯áááºáž ááááºážáááºážááá¯ááºáááº- PROJECT:frontend-META-TAG
. áááºážááá¯á·ááᯠááœá²áá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºááá·áº áá®ážááŒá¬ážááœá²ááœááºááŒááºážááá¯áá»áŸ áááááºáááºáá²á·áá² áá¯ááºáá±ááá·áºá¡áá« áá±á¬ááºáá¯á¶ážáá¯á¶á á¡ááœáŸááºážááœáẠááá¯á¡ááºáá±á¬áááºááá¯ážááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áá±á«ááºážááá·áºáá«áááºá
NBâ werf source code ááœááºáá±á¬áºááŒáá¬ážááá·áºá¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºá
áááºáááºá
á¬ážáá«áá á¡á
ááŸááºááŒá
áºááá¯ááºáááºá
á€áá±á¬ááºážáá«ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááá»ááºážáááºááŸá¯á ááŒá¿áá¬áá»á¬ážááŸáá·áº áá»áŸáááŸá¯ááᯠááá¯á¡á¬áá¯á¶á
áá¯ááºáááºááá¯ááºáá«- áááºáá¯ááºááŒááºážáá»á°áá¬áá»á¬ážá á¡áá»ááºá¡áááºáá»á¬ážááᯠá¡ááœáŸááºážáá»á¬ážááœáẠááááºážáááºážááŒááºážááŸáá·áº áá¯ááºáá±ááŒááºážáá¯ááºáááºážá
ááºáá
áºáá¯áá¯á¶ážá¡ááŒá±á¬ááºáž - á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠDmitry Stolyarov á áááºááá±á¬á¡á
á®áááºáá¶á
á¬ááœáẠá¡áá±ážá
áááºáá±á¬áºááŒáá¬ážáááº- "
á¡ááŸá áºáá»á¯ááºáááº
unnested registries áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážáá°áá®ááŸá¯ áááŸáááŒááºážááẠáá»áœááºá¯ááºááá¯á· ááá¯á·ááá¯áẠáá»áœááºá¯ááºááá¯á·áááá¬ážáá±á¬ werf á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœáẠááááºááá¯á·ááŒááºážááá¯ááºáá±á ááá¯ááá¯áá»ááºááŒáá·áºáá±á¬ DevOps á¡ááá¯ááºážá¡ááá¯ááºážá¡ááœáẠtool ááá¯ááá¯ááá¯á¡áááºááŒá±á á±áááºá¡ááœááºááá¯áá²á·ááá¯á·áá±á¬ááá·áºáááºáá»ááºááá¯áááºááŸá¬ážááŒááºážáááºáá¯áá¹ááááŸááá¯á¶ááááºá áááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŒáá·áº ááœááºááááºáá¬ááŸááºáá¯á¶áááºááŒááºážááá¯ááºáᬠááŸááºážáááºážáá±ážááá¹ááá¬ážááᯠááŒááºáááºáá¯ááºáá±á¬ááºáá¬ááœáẠá¡áááá¡áááºá¡áá²ááᯠáááºááá¯ááºáá²á·ááááºá á¡áᯠá¡á¬ážáá¯á¶ážá¡áááºááá·áºááŒá áºááŒá®á áá áºá á¯á¶áá áºáá±á¬ááºá¡ááœáẠááá¯ááœááºáá°áá¬áááºááá¯áᬠááá±á¬áá±á«ááºááá¯ááºáá¬áá²á· áá»áœááºáá±á¬áºááá¯á· (ááá±á¬áá»ááºáá²á· á¡ááá developer áá»á¬ážá¡áá±áá²á·) áá®á¡ááºá¹áá«áááºááᯠáááºáá¶áá¶á·ááá¯ážáá¬ááŸá¬ áááá¬áááºááŸá¬ážáá²á· á¡áááºá¡áá²ááœá± ááŸááá±á¬á·ááŸá¬ ááá¯ááºáá«áá°ážá
áá»áœááºá¯ááºááá¯á·ááŸáá·áºá¡áá°áá±áá«á áááŒá¬áá®ááœáẠá¡ááŒá¬ážáá®ááœááºáááºážáá
áºááŸá¯áá»á¬ážá¡ááŒá±á¬ááºáž ááá·áºá¡á¬áž ááŒá±á¬ááŒáá«áááºá
PS
áá»áœááºá¯ááºááá¯á·áááá±á¬á·ááºááœááºáááºážáááºáá«
- «
ááᯠáááºááẠáá¯á¶ááŸáẠDockerfile ááᯠá¡áá¯á¶ážááŒá¯á werf ááœáẠDocker áá¯á¶áá»á¬ážááᯠáááºáá±á¬ááºááá¯ááºáá«ááŒá®á "; - «
werf - Kubernetes ááŸá CI/CD á¡ááœáẠáá»áœááºá¯ááºááá¯á·ááááááᬠ(ááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááºááŸáá·áº áá®áá®ááá¯á¡á á®áááºáá¶á á¬) "á
source: www.habr.com