Actualización manual de un build
En este apartado vamos a aprender los comandos que nos permiten gestionar los procesos de construcción a partir de un objeto BuildConfig. Para ello vamos a crear un BuildConfig usando la estrategia Docker y los ficheros necesarios se encuentra en el repositorio https://github.com/josedom24/osv4_python.
La aplicación muestra los municipios de una provincia, el nombre de la provincia se indica en la variable de entorno PROVINCIA. El fichero Dockerfile crea esta variable con una valor determinado.
Por lo tanto lo primero que vamos a hacer es crear el objeto BuildCondig, para ello:
oc new-build https://github.com/josedom24/osv4_python --name=app4
oc get bc
NAME TYPE FROM LATEST
app4 Docker Git 1
oc get build
NAME TYPE FROM STATUS STARTED DURATION
app4-1 Docker Git@8ab1cd8 Running 18 seconds ago
Como vemos en el campo LATEST, se indica que se ha creado un build, que de forma automática ha llamado app4-1.
Cuando termina la construcción, comprobamos que se ha creado un nuevo ImageStream apuntando a la nueva imagen:
oc get is -o name
imagestream.image.openshift.io/app4
Ahora, podríamos crear una nueva aplicación que utilizará esta nueva imagen que hemos generado (vamos a llamar a la aplicación con el mismo nombre que el build, aunque se podría llamar de forma distinta):
oc new-app app4 --name=app4
oc expose service app4

Primera modificación: Modificación de la aplicación
¿Qué pasa si mi equipo de desarrollo saca una nueva versión de la aplicación y queremos desplegar esta nueva versión?. Para ello vamos a modificar la aplicación y luego vamos a lanzar una nueva construcción:
- Modificamos el fichero
app/templates/base.htmly cambiamos la línea:<h1>Temperaturas: </h1>por esta otra<h1>Temperaturas: Versión 2</h1>. -
Guardamos los cambios en el repositorio:
git commit -am "Versión 2" git push -
Lanzamos manualmente una nueva construcción de la imagen:
oc start-build app4 build.build.openshift.io/app4-2 started oc get bc NAME TYPE FROM LATEST app4 Docker Git 2 oc get build NAME TYPE FROM STATUS STARTED DURATION app4-1 Docker Git@8ab1cd8 Complete 8 minutes ago 58s app4-2 Docker Git@a672300 Running 18 seconds ago oc get pod NAME READY STATUS RESTARTS AGE app4-1-build 0/1 Completed 0 9m40s app4-2-build 1/1 Running 0 10s app4-4fbd68446-trd56 1/1 Running 0 2m45sVemos como tenemos en ejecución otro Pod constructor (app4-2-build) donde se está creando la nueva imagen.
-
¿Qué ha ocurrido al finalizar la construcción de la nueva imagen? El despliegue se ha actualizado, al cambiar la imagen de origen, y por tanto ha creado un nuevo recurso ReplicaSet que ha creado un nuevo Pod:
oc get rs NAME DESIRED CURRENT READY AGE app4-55b7b94b66 0 0 0 8m34s app4-578d64d9ff 0 0 0 8m34s app4-65b86b5b8f 1 1 1 58s oc get pod NAME READY STATUS RESTARTS AGE app4-1-build 0/1 Completed 0 9m40s app4-2-build 0/1 Completed 0 101s app4-65b86b5b8f-jmh49 1/1 Running 0 45s -
Si accedemos a la aplicación vemos la modificación:

Segunda modificación: Modificación del valor de la variable de entorno
¿Qué pasa si modificamos el fichero Dockerfile, por ejemplo para cambiar el valor de la variable de entorno? De la misma forma, habrá que construir una nueva imagen, y desplegarla de nuevo.
- Modifica el fichero
Dockerfiley cambia el valor de la variable de entorno:ENV PROVINCIA=cadiz. -
Guardamos los cambios en el repositorio:
git commit -am "Modificación Dockerfile" git push -
Lanzamos manualmente una nueva construcción de la imagen:
oc start-build app4 build.build.openshift.io/app4-3 started oc get bc NAME TYPE FROM LATEST app4 Docker Git 3 oc get build NAME TYPE FROM STATUS STARTED DURATION app4-1 Docker Git@8ab1cd8 Complete 16 minutes ago 58s app4-2 Docker Git@a672300 Complete 8 minutes ago 1m0s app4-3 Docker Git@a672300 Running 8 seconds ago oc get pod NAME READY STATUS RESTARTS AGE app4-1-build 0/1 Completed 0 16m app4-2-build 0/1 Completed 0 8m27s app4-3-build 1/1 Running 0 12s app4-65b86b5b8f-jmh49 1/1 Running 0 7m31s -
Al terminar la construcción de la imagen, se ha actualizado el Deployment:
oc get rs NAME DESIRED CURRENT READY AGE app4-55b7b94b66 0 0 0 16m app4-578d64d9ff 0 0 0 16m app4-65b86b5b8f 0 0 0 8m42s app4-67df6db9bf 1 1 1 27s oc get pod NAME READY STATUS RESTARTS AGE app4-1-build 0/1 Completed 0 17m app4-2-build 0/1 Completed 0 9m44s app4-3-build 0/1 Completed 0 89s app4-67df6db9bf-xq5wg 1/1 Running 0 33s -
Si accedemos a la aplicación vemos la modificación:

Otras operaciones
Podemos cancelar una construcción ejecutando la instrucción oc cancel-build:
oc start-build app4
build.build.openshift.io/app4-5 started
oc cancel-build app4-5
build.build.openshift.io/app4-5 marked for cancellation, waiting to be cancelled
Por último si borramos el objeto BuildConfig se borrarán todas los objetos Builds y todos los Pods de construcción:
oc delete bc app4
buildconfig.build.openshift.io "app4" deleted
oc get build
No resources found in josedom24-dev namespace.
oc get pod
NAME READY STATUS RESTARTS AGE
app4-5ccc5ddf7f-lp297 1/1 Running 0 2m53s