Skip to content

Commit 30a6fbb

Browse files
committed
Gitlab 2024
1 parent 4f86dff commit 30a6fbb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+986
-955
lines changed

03-cd/02-gitlab/README.md

Lines changed: 72 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212

1313
> **El entorno está preparado para funcionar tanto en docker(Recomendado) en local o con una maquina virtual vagrant**
1414
15+
> **Importante** - Esta configuración está destinada únicamente para entornos de desarrollo. No debe ser utilizada como referencia en un entorno productivo.
16+
1517
## Versiones de software
1618
### Entorno Docker (Recomendado)
1719
- Docker Engine: >= 20
18-
- [Docker Compose plugin](https://docs.docker.com/compose/install/)
1920

2021
### Entorno Vagrant
2122
- Vagrant: >= 2.2.x
@@ -97,179 +98,139 @@ bootcampVM: URL: https://vagrantcloud.com/ubuntu/jammy64
9798
```
9899

99100
3. Añadimos entrada al fichero hosts la entrada -> <Direccion_ip_local> gitlab.local
101+
>**Nota Importante**: Si usamos vagrant la ip sera la de la maquina virtual -> 192.168.56.150
100102
101103
* Linux en el fichero /etc/hosts
102104

103105
* Windows en el fichero c:\windows\system32\drivers\etc\hosts
104106

105-
## Un poco de arquitectura
106-
107-
108-
109-
- Gitlab![](https://docs.gitlab.com/ee/development/img/architecture_simplified_v14_9.png)
110-
111-
- Gitlab Runner(https://docs.gitlab.com/runner/#runner-execution-flow)
112-
113-
- Gitlab Runner Executors(https://docs.gitlab.com/runner/executors/)
114-
115-
- CI/CD Architecture ![](https://docs.gitlab.com/ee/development/cicd/img/ci_architecture.png)
116-
117107
## ¿Qué vamos a aprender?
118108

119109
1. Conceptos Gitlab
120110

121111
- ¿Qué es Gitlab?
122-
112+
113+
GitLab es una plataforma completa de DevOps que cubre todo el ciclo de vida del desarrollo de software, desde la planificación hasta la implementación. Ofrece un lugar centralizado donde los equipos pueden gestionar el código fuente, realizar pruebas, automatizar el despliegue y mucho más.
114+
- [Gitlab Architecture](https://docs.gitlab.com/ee/development/architecture.html)
115+
123116
- ¿Qué es un runner?
124-
117+
118+
Un GitLab Runner es una aplicación que ejecuta los trabajos de un pipeline dentro de un proyecto de GitLab. En otras palabras, los runners son los encargados de ejecutar el código o las tareas definidas en el pipeline de un proyecto. GitLab Runner puede ejecutarse en diversos entornos, como servidores físicos, virtuales, en contenedores Docker, entre otros.
119+
- [Gitlab Runner Executors](https://docs.gitlab.com/runner/executors/)
120+
- [Gitlab Runner Execution Flow](https://docs.gitlab.com/runner/#runner-execution-flow)
121+
125122
- ¿Qué es un pipeline?
126123

124+
Un pipeline en GitLab (y en el contexto de la integración continua y entrega continua, CI/CD) es un conjunto de tareas o trabajos automatizados que se ejecutan de manera secuencial o paralela para llevar a cabo una serie de procesos durante el desarrollo de un software.
125+
127126
2. Gestión de Usuarios
128127

129128
- Alta de usuarios
130-
131129
- Impersonate
132-
133130
- SSH Keys
134-
135131
- Access Token
136132

137-
3. Gestión de proyectos(repositorios)
133+
3. Gestión de proyectos(repositorios) y grupos:
138134

139-
- Miembros del proyecto
140-
141-
- Deploy Tokens
142-
143-
- Deploy Keys
144-
145-
- Protected Branches
146-
147-
- Protected TAGS
135+
- Miembros - [Roles and permissions](https://docs.gitlab.com/ee/user/permissions.html)
136+
- [Project Access Tokens](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html)
137+
- [Group Access Tokens](https://docs.gitlab.com/ee/user/group/settings/group_access_tokens.html)
138+
- [Deploy Tokens](https://docs.gitlab.com/ee/user/project/deploy_tokens/)
139+
- [Deploy Keys](https://docs.gitlab.com/ee/user/project/deploy_keys/)
140+
- [Protected Branches](https://docs.gitlab.com/ee/user/project/repository/branches/protected.html)
141+
- [Protected Tags](https://docs.gitlab.com/ee/user/project/protected_tags.html)
148142

149143
4. Entendiendo los pipelines
150144

151145
- Conceptos de Pipeline
152-
153-
- ¿Qué es un pipeline?
154-
155146
- ¿Como se define?
156-
157-
- ¿Cuando se ejecuta?
158-
147+
148+
Todas estas tareas estan definidas en un archivo de configuración llamado .gitlab-ci.yml.
149+
- [Referencia configuración de pipeline](https://docs.gitlab.com/ee/ci/yaml/)
150+
151+
- ¿Cuando se ejecuta? https://docs.gitlab.com/ee/ci/pipelines/
152+
153+
- Branch pipelines
154+
- Merge request pipeline
155+
- Tag pipeline
156+
- Scheduled pipeline
157+
- Parent-child pipeline
158+
- Multi-project pipeline
159+
160+
- ¿Qué es un job?
161+
162+
Los jobs son las tareas concretas que se ejecutan dentro de cada stage.
163+
159164
- ¿Qué es un stage?
160-
161-
- ¿Qué es un Job?
165+
166+
Es un nivel o fase dentro del pipeline que agrupa jobs relacionados entre sí y permite que estos se ejecuten en un orden específico.
162167

163-
- Herramientas para crear pipelines
168+
- Editores
169+
- PipeLine Editor
164170

171+
El Pipeline Editor de GitLab es una herramienta visual basada en la web que facilita la creación y gestión de pipelines de integración y entrega continua (CI/CD). Permite a los usuarios diseñar y configurar pipelines de manera intuitiva, sin tener que escribir manualmente los archivos de configuración en YAML. Con este editor, es posible definir las etapas, trabajos y otros aspectos de los pipelines de forma visual, validando la configuración en tiempo real para evitar errores.
165172
- Web IDE
166173

167-
- PipeLine Editor
168-
169-
- Estructura básica
174+
El Web IDE de GitLab es una herramienta de desarrollo totalmente basada en la web que permite a los usuarios escribir, modificar y gestionar su código directamente en GitLab, sin la necesidad de contar con un editor de código o IDE instalado en su equipo.
170175

176+
[Referencia configuración de pipeline](http://gitlab.local:8888/help/ci/yaml/index)
177+
- Estructura básica de un pipeline
178+
- default
171179
- image
172-
173-
- job
174-
175180
- stage
176-
177181
- script
178-
179182
- before_script
180-
183+
- after_script
184+
181185
- Variables de grupo, proyecto y pipeline
182-
183-
- Variables predefinidas
184-
186+
- [Variables Predefinidas](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html)
185187
- Usando variables
186-
187188
- Orden de precedencia
188-
189189
- Casos de uso
190190

191191
- Control sobre los pipelines
192-
193-
- Condicionales when y only
194-
195-
- Condicionales avanzados con rules
196-
197-
- Control de errores
192+
- Workflows
193+
- Rules
194+
- Allow failure
195+
- Needs
198196

199197
- Artifacts
200198

201-
- ¿Qué es un artifact?
202-
203-
- ¿Para que lo usamos?
204-
205-
- Casos de uso
199+
- Cache
206200

207201
- Environments
208-
209202
- ¿Qué es un environment?
210-
211203
- ¿Para que lo usamos?
212-
213204
- Redeploy
214-
215205
- Rollback
216206

217-
- Workflows
207+
- Services
218208

219-
5. Creacion de pipelines de build,test y deploy
209+
5. Uso de container registry y dependency proxy
220210

221-
6. Uso de container registry
222-
223-
- ¿Qué es un container registry?
224-
225-
- Repositando nuestra imágenes
211+
- ¿Qué es el container registry?, ¿y cómo se usa?
212+
- ¿Qué es el dependency proxy?, ¿y cómo se usa?
226213

227-
8. Pipelines de creación de imagenes Base
214+
6. Creacion de pipelines de build,test, deploy y release
215+
- App python con flask
216+
- App springboot
228217

229-
9. Usar nuestras Imágenes
218+
7. Downstream pipelines
219+
- Multi-project pipelines
220+
- Parent-child pipelines
230221

231-
10. Gitlab Pages
222+
8. Gitlab Pages
232223

233-
11. Bonus
234-
235-
- Releases
236-
237-
- Optimizando pipelines con Templates
238-
239-
- Triggers
240-
241-
## Cheatsheet
242-
243-
### [Variables Predefinidas](http://gitlab.local:8888/help/ci/variables/predefined_variables.md)
244-
245-
### [Referencia configuración de pipeline](http://gitlab.local:8888/help/ci/yaml/index)
224+
9. Optimizando pipelines con Templates
225+
- Anchors
226+
- Extends
227+
- Reference Tags
228+
- includes
246229

247230
## Información usada en la Clase
248231

249-
### Gestion de Usuarios
250-
251232
- User: **root**, Pass: **Gitl@bPass** , Access Level: **Admin** (Usuario ya creado)
252233

253234
- User: **developer1**, Pass: **dev€loper1** , Access Level: **Regular**
254235

255236
- User: **developer2**, Pass: **dev€loper2** , Access Level: **Regular**
256-
257-
### [Roles]( http://gitlab.local:8888/help/user/permissions)
258-
259-
- Guest
260-
261-
- Reporter
262-
263-
- Developer
264-
265-
- Maintainer
266-
267-
- Owner
268-
269-
### [Visibilidad de grupos y proyectos](http://gitlab.local:8888/help/public_access/public_access.md)
270-
271-
- **Private**: El grupo y sus proyectos sólo pueden ser vistos por los miembros.
272-
273-
- **Internal**: El grupo y los proyectos internos pueden ser vistos por cualquier usuario conectado, excepto los usuarios externos.
274-
275-
- **Public**: El grupo y los proyectos públicos pueden verse sin necesidad de autenticación.

03-cd/02-gitlab/pipelines-examples/15-push-container-registry.yml renamed to 03-cd/02-gitlab/custom-python-image/.gitlab-ci.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
variables:
2-
PYTHON_VERSION: "3.8"
3-
BASE_VERSION: "20.04"
2+
PYTHON_VERSION: "3.12"
3+
BASE_VERSION: "24.04"
44
BASE_IMAGE_NAME: "ubuntu"
55

66
stages:
7-
- docker:build
8-
9-
docker:build:
10-
stage: docker:build
7+
- docker
8+
9+
docker-build:
10+
stage: docker
1111
before_script:
1212
- docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY_IMAGE
1313
script:
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
ARG base_version
2+
ARG base_image_name
3+
FROM $base_image_name:$base_version
4+
ARG python_version
5+
RUN apt update
6+
RUN apt install -y python${python_version} python3-pip python${python_version}-venv
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
stages:
2+
- build
3+
- deploy
4+
- release
5+
6+
7+
build:
8+
stage: build
9+
before_script:
10+
- docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY/$CI_PROJECT_PATH
11+
script:
12+
- echo $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD
13+
- docker build -t $CI_REGISTRY/$CI_PROJECT_PATH/flaskapp:$CI_COMMIT_SHA .
14+
- docker push $CI_REGISTRY/$CI_PROJECT_PATH/flaskapp:$CI_COMMIT_SHA
15+
rules:
16+
- if: '$CI_COMMIT_BRANCH == "develop" ||$CI_COMMIT_BRANCH == "master"'
17+
18+
deploy-test:
19+
stage: deploy
20+
before_script:
21+
- docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY/$CI_PROJECT_PATH
22+
- if [[ "$(docker ps -a --filter "name=flaskapptest" --format '{{.Names}}')" == "flaskapptest" ]]; then docker rm -f flaskapptest; else echo "No existe"; fi
23+
script:
24+
- docker run --name "flaskapptest" -d -p 8081:8080 $CI_REGISTRY/$CI_PROJECT_PATH/flaskapp:$CI_COMMIT_SHA
25+
rules:
26+
- if: '$CI_COMMIT_BRANCH == "develop"'
27+
environment: test
28+
29+
deploy-prod:
30+
stage: deploy
31+
before_script:
32+
- docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY/$CI_PROJECT_PATH
33+
- if [[ "$(docker ps -a --filter "name=flaskapp$" --format '{{.Names}}')" == "flaskapp" ]]; then docker rm -f flaskapp; else echo "No existe"; fi
34+
script:
35+
- docker run --name "flaskapp" -d -p 8080:8080 $CI_REGISTRY/$CI_PROJECT_PATH/flaskapp:$CI_COMMIT_SHA
36+
rules:
37+
- if: '$CI_COMMIT_BRANCH == "master"'
38+
environment: prod
39+
40+
41+
release_job:
42+
stage: release
43+
image: registry.gitlab.com/gitlab-org/release-cli:latest
44+
script:
45+
- echo "running release_job"
46+
release:
47+
name: 'Release $CI_COMMIT_TAG'
48+
description: 'ESTA ES LA RELEASE $CI_COMMIT_TAG'
49+
tag_name: '$CI_COMMIT_TAG'
50+
assets:
51+
links:
52+
- name: 'Documentation'
53+
url: 'http://gitlab.com:8888/'
54+
link_type: 'other'
55+
rules:
56+
- if: $CI_COMMIT_TAG
57+
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
FROM python:3.8-slim
2-
MAINTAINER Sergio Ramírez "sergio@localhost"
3-
COPY ./requirements.txt /app/requirements.txt
1+
FROM gitlab.local:5001/base_images/python:v1.0.0
2+
COPY requirements.txt /app/requirements.txt
3+
RUN python3 -m venv /app/venv
4+
RUN /app/venv/bin/python -m pip install -r /app/requirements.txt
5+
COPY bootcamp.py /app/bootcamp.py
46
WORKDIR /app
5-
RUN pip install -r requirements.txt
6-
COPY bootcamp.py /app/
7-
ENTRYPOINT [ "python3" ]
8-
CMD [ "bootcamp.py" ]
9-
EXPOSE 8080
7+
ENTRYPOINT [ "/app/venv/bin/python", "/app/bootcamp.py" ]
8+
EXPOSE 8080

03-cd/02-gitlab/gitlab/Vagrantfile

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
# -*- mode: ruby -*-
22
# vi: set ft=ruby :
33
$install_docker = <<-SCRIPT
4-
apt-get update
5-
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
6-
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
7-
apt-key fingerprint 0EBFCD88
8-
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
9-
apt-get update
10-
apt-get install docker-ce=5:24.0.7-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.7-1~ubuntu.22.04~jammy containerd.io docker-compose-plugin -y
11-
4+
apt-get update
5+
apt-get install ca-certificates curl -y
6+
install -m 0755 -d /etc/apt/keyrings
7+
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
8+
chmod a+r /etc/apt/keyrings/docker.asc
9+
echo \
10+
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
11+
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
12+
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
13+
apt-get update
14+
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
1215
SCRIPT
1316

1417
$configure_docker = <<-SCRIPT
15-
echo '{"insecure-registries" : ["gitlab.local:5001"]}' > /etc/docker/daemon.json
18+
echo '{"insecure-registries" : ["gitlab.local:5001", "gitlab.local:8888"]}' > /etc/docker/daemon.json
1619
sed -i "/ExecStart/ s/$/ -H tcp:\\/\\\/0.0.0.0:2375/" /lib/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker
1720
echo "172.40.0.2 gitlab.local" >> /etc/hosts
1821
SCRIPT

0 commit comments

Comments
 (0)