Kontejnerové images
Každá úloha na GitLab CI se spouští v izolovaném prostředí – kontejneru.
Pomocí direktivy image v .gitlab-ci.yml
můžete specifikovat kontejnerový (docker) image, ze kterého se kontejner vytvoří.
Pokud tuto direktivu na úrovni jobu ani pipeline nespecifikujete, použije se jako výchozí image ict/images/alpine/ci:latest.
Lokální image
GitLab v sobě integruje Container Registry, službu pro uchovávání a distribuci kontejnerových (docker) images.
Každý projekt na GitLabu může mít svůj prostor pro ukládání images, které je navíc možné generovat automatizovaně přes CI (viz Vytváření images). Pokud projekt poskytuje nějaké images, jejich seznam najdete pod Package & Registries › Container Registry v daném projektu (nebo skupině).
Celé jméno lokálního image vždy obsahuje adresu registru a cestu projektu, volitelně pak další názvy rozlišující různé images v rámci jednoho projektu, vše oddělené lomítkem. A nakonec dvojtečkou oddělený tag, který zpravidla identifikuje konkrétní verzi image (více zde).
<registry-url>/<namespace>/[<subgroup>/[<subsubgroup>/]]<project-slug>[/<name-1>[/<name-2>[/<name-3>]]]:<tag>
Například:
gitlab.fit.cvut.cz:5000/ict/images/alpine/ci:latest
– image v projektu ict/images/alpinegitlab.fit.cvut.cz:5000/ict/images/jekyll:4.2
– image v projektu ict/images/jekyll
Pokud image použijete přímo v .gitlab-ci.yml
(direktiva image
), nahraďte adresu registru (gitlab.fit.cvut.cz:5000
) proměnnou $CI_REGISTRY
, například:
build:
image: $CI_REGISTRY/ict/images/alpine/ci:latest
before_script:
- apk add -U build-base # install base build dependencies for C/C++
script:
- make # build stuff
Images od ICT
Ve skupině ict/images najdete images spravované ICT oddělením. Všechny tyto images jsou automatizovaně generované a pravidelně aktualizované (zpravidla jednou týdně).
ict/images/alpine
Za zmínku stojí především image Alpine Linuxu v projektu ict/images/alpine.
Alpine Linux je Linuxová distribuce, která se vyznačuje důrazem na nízkou komplexitu a bezpečnost. Díky tomu se stala nejčastější volbou pro kontejnerové images (Alpine však není „distribuce pro Docker“, jde o univerzální distribuce podobně jako Arch Linux či Debian).
Tyto images se sestavují ve dvou variantách:
ict/images/alpine/base
– Minimální image odpovídající image alpine z Docker Hubu. Navíc obsahuje dumb-init, má přednastavenou časovou zónu Europe/Prague, fakultní mirror Alpine repositářů a ICT repositáře.ict/images/alpine/ci
– Image vycházející z předešlého image určený pro použití na CI. Obsahuje navíc balíčky curl, git a openssh-client.
Obě varianty jsou sestavovány pro každou podporovanou release větev, která je reprezentována tagem (např. 3.16
, 3.15
, …).
Tag latest
je alias pro poslední stabilní větev.
Docker Hub
Na GitLabu je možné také využívat images z Docker Hubu i jiných veřejných kontejnerových/docker registrů.
Ve jménech images z Docker Hubu se neuvádí adresa Registru, neb je (z historických důvodů) definovaný jako výchozí Registr.
Images mají proto krátká jména jako alpine:3.16
, redis/redis-stack:latest
apod.
Důležité:
Vzhledem k limitu na počet stažených images velmi doporučujeme omezit používání images z Docker Hubu a upřednostňovat lokální image.
Pokud opravdu potřebujete použít images z Docker Hubu a váš projekt je pod nějakou skupinou (nikoli přímo pod uživatelem), použijte Dependency Proxy.
build:
image: $CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX/debian:stable-slim
script:
- cat /etc/os-release