Skip to content

Commit 0b0b26b

Browse files
committed
Merge branch 'master' into feat-gitlab-update
2 parents d89eaac + 1b97ed4 commit 0b0b26b

File tree

130 files changed

+8907
-151
lines changed

Some content is hidden

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

130 files changed

+8907
-151
lines changed

.gitignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,12 @@ app/
2525

2626
# CDK8s demos
2727
*/08-ckd8s/00-hello-world-code/
28+
29+
# Private view
30+
.aws/
31+
lab/
32+
private.readme.md
33+
04-cloud/00-aks/03-virtual-kubelet/auth.json
34+
35+
# Vagrant
36+
.vagrant

03-cd/01-jenkins/00-instalando-jenkins/Dockerfile

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,40 @@ FROM jenkinsci/blueocean:latest
22

33
USER root
44

5-
# insatll node
5+
# install node
66
RUN apk add --update nodejs npm
77

88
# install docker-compose via python
99
RUN apk update \
10-
&& apk add --no-cache python3 \
11-
&& apk add --no-cache --virtual .docker-compose-deps python3 python3-dev py3-pip libffi-dev openssl-dev gcc libc-dev make cargo rust \
12-
&& pip3 install docker-compose # buildkit
10+
&& apk add --no-cache python3 \
11+
&& apk add --no-cache --virtual .docker-compose-deps python3 python3-dev py3-pip libffi-dev openssl-dev gcc libc-dev make cargo rust \
12+
&& pip3 install docker-compose # buildkit
1313

1414
# .NET Core deps
1515
RUN apk add --no-cache \
16-
ca-certificates \
17-
icu-libs \
18-
krb5-libs \
19-
libgcc \
20-
libintl \
21-
libssl1.1 \
22-
libstdc++ \
23-
zlib
16+
ca-certificates \
17+
icu-libs \
18+
krb5-libs \
19+
libgcc \
20+
libintl \
21+
libssl1.1 \
22+
libstdc++ \
23+
zlib
2424

2525
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true" \
26-
PATH="${PATH}:/root/.dotnet"
26+
PATH="${PATH}:/root/.dotnet"
2727

2828
# .NET Core SDK
2929
# see https://github.com/dotnet/dotnet-docker/blob/main/src/sdk/3.1/alpine3.14/amd64/Dockerfile
3030
RUN dotnet_sdk_version=3.1.201 \
31-
&& wget -O dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$dotnet_sdk_version/dotnet-sdk-$dotnet_sdk_version-linux-musl-x64.tar.gz \
32-
&& dotnet_sha512='9a8f14be881cacb29452300f39ee66f24e253e2df947f388ad2157114cd3f44eeeb88fae4e3dd1f9687ce47f27d43f2805f9f54694b8523dc9f998b59ae79996' \
33-
&& echo "$dotnet_sha512 dotnet.tar.gz" | sha512sum -c - \
34-
&& mkdir -p /usr/share/dotnet \
35-
&& tar -C /usr/share/dotnet -oxzf dotnet.tar.gz \
36-
&& ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \
37-
&& rm dotnet.tar.gz \
38-
# Trigger first run experience by running arbitrary cmd
39-
&& dotnet help
31+
&& wget -O dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$dotnet_sdk_version/dotnet-sdk-$dotnet_sdk_version-linux-musl-x64.tar.gz \
32+
&& dotnet_sha512='9a8f14be881cacb29452300f39ee66f24e253e2df947f388ad2157114cd3f44eeeb88fae4e3dd1f9687ce47f27d43f2805f9f54694b8523dc9f998b59ae79996' \
33+
&& echo "$dotnet_sha512 dotnet.tar.gz" | sha512sum -c - \
34+
&& mkdir -p /usr/share/dotnet \
35+
&& tar -C /usr/share/dotnet -oxzf dotnet.tar.gz \
36+
&& ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \
37+
&& rm dotnet.tar.gz \
38+
# Trigger first run experience by running arbitrary cmd
39+
&& dotnet help
4040

4141
USER jenkins

03-cd/01-jenkins/03-usando-pipelines-en-workflows-diferentes/00_usando_docker_pipeline_plugin.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,8 @@ Comienza desde `node:alpine3.12` e instala los paquetes y realiza una build. Des
195195

196196
En esta pipeline estamos pensando que pedimos a Jenkins que compile la aplicación, usando el `Dockerfile` en el repositorio, y después usar `verify` para imprimir node y npm y por último ejecutar un smoke test ejecutando el contenedor previamente generado.
197197

198-
But these are separate things, the image that was built as part of the `Dockerfile` that's an SDK may just not meant to be used by Jenkins taken part of your application.
199198

200-
Pero esto son cosas separadas, la imagen construida a como parte del `Dockerfile`, para construir la aplicación, no esta pensada para ser parte de la aplicación.
201-
202-
So it's going to see how that looks. So if we check this build its failed as expected, we go and look at the output. I could see all the lines for my `Dockerfile` being executed, and then I get these really weird Jenkins error messages telling me it is trying to do something with the container on.
199+
Pero esto son cosas separadas, la imagen construida como parte del `Dockerfile`, sirve para ejecutar la aplicación, no como entorno para construir la misma.
203200

204201
La build falla como esperábamos, echemos un ojo. Podemos ver todas las líneas ejecutadas del `Dockerfile`, y después vemos este mensaje que nos dice que tenemos un fallo al intentar ejecutar el contenedor.
205202

03-cd/exercises/README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
### 1. CI/CD de una Java + Gradle
66

7-
En el directorio raíz de este [código fuente](./jenkins-resources/calcultor), crea un `Jenkinsfile` que contenga un pipeline declarativa con los siguientes stages:
7+
En el directorio raíz de este [código fuente](./jenkins-resources), crea un `Jenkinsfile` que contenga un pipeline declarativa con los siguientes stages:
88

99
* **Checkout** descarga de código desde un repositorio remoto, preferentemente utiliza GitHub.
1010
* **Compile** compilar el código fuente, para ello utilizar `gradlew compileJava`
@@ -13,6 +13,10 @@ En el directorio raíz de este [código fuente](./jenkins-resources/calcultor),
1313
Para ejecutar Jenkins en local y tener las dependencias necesarias disponibles podemos contruir una imagen a partir de [este Dockerfile](./jenkins-resources/gradle.Dockerfile)
1414

1515
### 2. Modificar la pipeline para que utilice la imagen Docker de Gradle como build runner
16+
17+
* Utilizar Docker in Docker a la hora de levantar Jenkins para realizar este ejercicio.
18+
* Como plugins deben estar instalados `Docker` y `Docker Pipeline`
19+
* Usar la imagen de Docker `gradle:6.6.1-jre14-openj9`
1620

1721
## Ejercicios GitLab
1822

@@ -35,7 +39,7 @@ Para ejecutar Jenkins en local y tener las dependencias necesarias disponibles p
3539
En resumen, la `pipeline` de `CI/CD`, debe hacer la build de la aplicación generando los ficheros jar, hacer los tests de maven y finalmente dockerizar la app (el dockerfile ya se proporciona en el repo) y hacer un deploy en local.
3640

3741
### 2. Crear un usuario nuevo y probar que no puede acceder al proyecto anteriormente creado
38-
* Añadirlo con el role `guest`, comprobar que acciones puede hacer.
42+
* Añadirlo con el role `guest`, comprobar que acciones puede hacer.
3943
* Cambiar a role `reporter`, comprobar que acciones puede hacer.
4044
* Cambiar a role `developer`, comprobar que acciones puede hacer.
4145
* Cambiar a role `maintainer`, comprobar que acciones puede hacer.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Local .terraform directories
2+
**/.terraform/*
3+
4+
# .tfstate files
5+
*.tfstate
6+
*.tfstate.*
7+
8+
# Crash log files
9+
crash.log
10+
crash.*.log
11+
12+
# Exclude all .tfvars files, which are likely to contain sentitive data, such as
13+
# password, private keys, and other secrets. These should not be part of version
14+
# control as they are data points which are potentially sensitive and subject
15+
# to change depending on the environment.
16+
#
17+
*.tfvars
18+
19+
# Ignore override files as they are usually used to override resources locally and so
20+
# are not checked in
21+
override.tf
22+
override.tf.json
23+
*_override.tf
24+
*_override.tf.json
25+
26+
# Include override files you do wish to add to version control using negated pattern
27+
#
28+
# !example_override.tf
29+
30+
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
31+
# example: *tfplan*
32+
33+
# Ignore CLI configuration files
34+
.terraformrc
35+
terraform.rc
36+
37+
.terraform.lock.hcl

04-cloud/00-aks/00-mi-primer-aks/00-crear-mi-primer-aks.sh

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,24 @@ brew install azure-cli
77
#También podemos crear un contenedor con Azure CLI. Así no tenemos que instalarlo en nuestro local ;-)
88
docker run -it --rm microsoft/azure-cli sh
99

10+
# Para ver el subconjunto de serviios que puedes gestionar a través de la linea de comandos:
11+
az
12+
1013
#Iniciamos sesión en nuestra cuenta de Azure
1114
az login
1215

1316
#Creamos un grupo de recursos en una ubicación concreta
14-
RESOURCE_GROUP="Mi-Primer-AKS"
17+
RESOURCE_GROUP="Lemoncode-CLI"
1518
LOCATION="northeurope"
1619

1720
az group create -n ${RESOURCE_GROUP} -l ${LOCATION}
1821

1922
#Creamos el clúster de AKS
20-
AKS_NAME="lemoncode-aks"
23+
AKS_NAME="aks-lemoncode-cli"
2124

2225
#https://docs.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az_aks_create
23-
az aks create -g ${RESOURCE_GROUP} -n ${AKS_NAME} \
26+
az aks create -g ${RESOURCE_GROUP} \
27+
-n ${AKS_NAME} \
2428
--node-count 1 --generate-ssh-keys
2529

2630
#Instalamos kubectl en local si no lo tenemos. En este caso en el contenedor con Azure CLI
@@ -32,14 +36,17 @@ az aks get-credentials -g ${RESOURCE_GROUP} -n ${AKS_NAME}
3236
#Recuperamos los nodos de nuestro clúster (en este ejemplo solo deberíamos de tener 1)
3337
kubectl get nodes
3438

35-
#Recuperamos todos los servicios desplegados en nuestro clúster
36-
kubectl get services --all-namespaces
37-
3839
#Escalar el número de nodos en el clúster
3940
az aks scale -g ${RESOURCE_GROUP} -n ${AKS_NAME} --node-count 3
4041

4142
#Ahora deberíamos tener 3 nodos en lugar de 1
4243
kubectl get nodes
4344

45+
# Crear un Wordpress en nuestro clúster
46+
kubectl apply -f wordpress.yaml
47+
48+
# Comprobar lo que acabamos de desplegar
49+
kubectl get all -n wordpress
50+
4451
#Si eliminamos el grupo de recursos eliminaremos el clúster
4552
az group delete -n ${RESOURCE_GROUP} --yes --no-wait
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
provider "azurerm" {
2+
features {}
3+
}
4+
5+
resource "azurerm_resource_group" "rg" {
6+
name = "Lemoncode-Terraform"
7+
location = "West Europe"
8+
}
9+
10+
resource "azurerm_kubernetes_cluster" "k8s" {
11+
name = "aks-lemoncode-tf"
12+
resource_group_name = azurerm_resource_group.rg.name
13+
location = azurerm_resource_group.rg.location
14+
dns_prefix = "aks-lemoncode-tf"
15+
16+
default_node_pool {
17+
name = "default"
18+
node_count = 1
19+
vm_size = "Standard_DS2_v2"
20+
}
21+
22+
identity {
23+
type = "SystemAssigned"
24+
}
25+
26+
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: wordpress
5+
6+
---
7+
apiVersion: apps/v1
8+
kind: Deployment
9+
metadata:
10+
name: wordpress-mysql
11+
namespace: wordpress
12+
labels:
13+
app: wordpress
14+
spec:
15+
selector:
16+
matchLabels:
17+
app: wordpress
18+
tier: mysql
19+
strategy:
20+
type: Recreate
21+
template:
22+
metadata:
23+
labels:
24+
app: wordpress
25+
tier: mysql
26+
spec:
27+
containers:
28+
- image: mysql:5.6
29+
name: mysql
30+
env:
31+
- name: MYSQL_ROOT_PASSWORD
32+
value: wp_password
33+
ports:
34+
- containerPort: 3306
35+
name: mysql
36+
volumeMounts:
37+
- name: mysql-storage
38+
mountPath: /var/lib/mysql
39+
volumes:
40+
- name: mysql-storage
41+
emptyDir: {}
42+
43+
---
44+
apiVersion: v1
45+
kind: Service
46+
metadata:
47+
name: wordpress-mysql
48+
namespace: wordpress
49+
labels:
50+
app: wordpress
51+
spec:
52+
ports:
53+
- port: 3306
54+
selector:
55+
app: wordpress
56+
tier: mysql
57+
clusterIP: None
58+
59+
---
60+
apiVersion: apps/v1
61+
kind: Deployment
62+
metadata:
63+
name: wordpress
64+
namespace: wordpress
65+
labels:
66+
app: wordpress
67+
spec:
68+
selector:
69+
matchLabels:
70+
app: wordpress
71+
tier: frontend
72+
replicas: 2
73+
strategy:
74+
type: Recreate
75+
template:
76+
metadata:
77+
labels:
78+
app: wordpress
79+
tier: frontend
80+
spec:
81+
containers:
82+
- image: wordpress:4.8-apache
83+
name: wordpress
84+
env:
85+
- name: WORDPRESS_DB_HOST
86+
value: wordpress-mysql
87+
- name: WORDPRESS_DB_PASSWORD
88+
value: wp_password
89+
ports:
90+
- containerPort: 80
91+
name: wordpress
92+
volumeMounts:
93+
- name: wordpress-storage
94+
mountPath: /var/www/html
95+
volumes:
96+
- name: wordpress-storage
97+
emptyDir: {}
98+
99+
---
100+
apiVersion: v1
101+
kind: Service
102+
metadata:
103+
name: wordpress
104+
namespace: wordpress
105+
labels:
106+
app: wordpress
107+
spec:
108+
ports:
109+
- port: 80
110+
selector:
111+
app: wordpress
112+
tier: frontend
113+
type: LoadBalancer

04-cloud/00-aks/02-cluster-autoscaler/cluster-autoscaler.sh

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
# Variables
32
RESOURCE_GROUP="Cluster-Autoscaler"
43
AKS_NAME="lemoncode-autoscaler"
@@ -8,8 +7,10 @@ LOCATION="northeurope"
87
az group create -n ${RESOURCE_GROUP} -l ${LOCATION}
98

109
#Crear cluster de AKS
11-
az aks create -g ${RESOURCE_GROUP} -n ${AKS_NAME} \
12-
--node-count 1 --generate-ssh-keys
10+
az aks create -g ${RESOURCE_GROUP} \
11+
-n ${AKS_NAME} \
12+
--node-count 1 \
13+
--generate-ssh-keys
1314

1415
# Recuperar el contexto para este clúster
1516
az aks get-credentials -n $AKS_NAME -g $RESOURCE_GROUP
@@ -30,7 +31,7 @@ az aks update \
3031
--name $AKS_NAME \
3132
--enable-cluster-autoscaler \
3233
--min-count 1 \
33-
--max-count 3
34+
--max-count 5
3435

3536
#Mientras esto se materializa puedes ver en el portal de Azure que el virtual machine scaleset está aumentando
3637
#el número de instancias. Este proceso puede llevar varios minutos ya que tiene que dar de alta las VMs

0 commit comments

Comments
 (0)