Es como hacer un docker build . -t my-web-app -f docker/Dockerfile
pero hecho por gitlab automáticamente.
https://www.youtube.com/watch?v=qP8kir2GUgo
CI = Continuous Integration
Creá una cuenta en Gitlab. Creá un proyecto. Cloná el repositorio y creá una archivo llamado .gitlab-ci.yml
create_file:
image: alpine
script:
- echo "Building ..."
- mkdir build
- touch build/somefile.txt
Cuando pusheas el archivo verás un ícono running job. Bajo de pipeline habrá un dialogo llamado test
dentro create_file
. A la derecha te dirá la duración y el runner que está ejecutando ese trabajo.
En el menú izquierdo. Build > pipelines
encontrarás todos los trabajos ejecutados, cada vez que hagas un commit aparecerá un nuevo trabajo.
Test es un comando de linux. Esto no funcionará:
create_file:
image: alpine
script:
- echo "Building ..."
- mkdir build
- touch build/somefile.txt
test_file:
image: alpine
script:
- test -f build/somefile.txt
Esto nos dará un ERROR: job failed: exit code 1
es decir no encontró el archivo.
Por eso no funcionó, estás probando algo que no se creó.
Entonces tenemos que especificar stages
para ordenar los trabajos.
stages:
- build
- test
create_file:
image: alpine
stage: build
script:
- echo "Building ..."
- mkdir build
- touch build/somefile.txt
test_file:
image: alpine
stage: test
script:
- test -f build/somefile.txt
Cada vez que empezamos un trabajo, el runner empezará desde 0 usará una nueva imagen, si escribimos algún archivo esos archivos están perdidos, ese contenedor se destruye. Para resolver esto se usa artifacts.
Artifacts se usa para decirle a gitlab que creamos algo importante y necesitamos mantenerlo guardado.
stages:
- build
- test
create_file:
image: alpine
stage: build
script:
- echo "Building ..."
- mkdir build
- touch build/somefile.txt
artifacts:
paths:
- build/
test_file:
image: alpine
stage: test
script:
- test -f build/somefile.txt
Y ahora finalmente el pipeline es exitoso.
Si miramos dentro de test_file
en una parte dice downloading artifacts
el contenedor sigue siendo destruído pero los archivos se guardan en algún lugar y uploading artifacts
a la derecha encontrarás job artifacts
si le das browse encontrarás la carapeta llamada build y dentro estará el archivo: somefile.txt
.