<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://1984.lsi.us.es/wiki-egc/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joszamama</id>
		<title>Wiki de EGC - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://1984.lsi.us.es/wiki-egc/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joszamama"/>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php/Especial:Contribuciones/Joszamama"/>
		<updated>2026-05-21T16:16:40Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9213</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9213"/>
				<updated>2021-12-11T22:22:10Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a 127.0.0.1:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user decide with password 'decide'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner decide&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER decide CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'decide',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'decide',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
$ cd decide&lt;br /&gt;
$ ./manage.py migrate&lt;br /&gt;
$ ./manage.py createsuperuser&lt;br /&gt;
$ ./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ejecutamos los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ systemctl daemon-reload&lt;br /&gt;
$ systemctl enable decide.service&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
Vamos a instalar Nginx y Ngrok, que son las herramientas que nos van a permitir poner en línea nuestro sistema. Para ello vamos a ejecutar los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la URL que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://19ab-217-217-114-58.ngrok.io y jenkins en https://19ab-217-217-114-58.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuración y seleccionar Webhooks. Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://19ab-217-217-114-58.ngrok.io/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
= Finalización =&lt;br /&gt;
&lt;br /&gt;
Con todos los pasos previos realizados correctamente, hemos conseguido nuestra propia herramienta de CI/CD, sin utilizar servicios como Travis CI o Heroku. Para acabar, si la máquina se reinicia o cierras la terminal de Ngrok, la URL quedará inaccesible, por consiguiente debemos entrar en la máquina con VNC, ejecutar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y deberemos copiar esta URL en el archivo de configuración de Nginx situado en /etc/nginx/sites-enabled. Reiniciamos el servicio de Nginx y ya está todo funcionando de nuevo.&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9212</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9212"/>
				<updated>2021-12-11T22:11:17Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Autorecarga de Decide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user decide with password 'decide'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner decide&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER decide CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'decide',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'decide',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
$ cd decide&lt;br /&gt;
$ ./manage.py migrate&lt;br /&gt;
$ ./manage.py createsuperuser&lt;br /&gt;
$ ./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ejecutamos los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ systemctl daemon-reload&lt;br /&gt;
$ systemctl enable decide.service&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
Vamos a instalar Nginx y Ngrok, que son las herramientas que nos van a permitir poner en línea nuestro sistema. Para ello vamos a ejecutar los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la URL que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://19ab-217-217-114-58.ngrok.io y jenkins en https://19ab-217-217-114-58.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuración y seleccionar Webhooks. Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://19ab-217-217-114-58.ngrok.io/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
= Finalización =&lt;br /&gt;
&lt;br /&gt;
Con todos los pasos previos realizados correctamente, hemos conseguido nuestra propia herramienta de CI/CD, sin utilizar servicios como Travis CI o Heroku. Para acabar, si la máquina se reinicia o cierras la terminal de Ngrok, la URL quedará inaccesible, por consiguiente debemos entrar en la máquina con VNC, ejecutar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y deberemos copiar esta URL en el archivo de configuración de Nginx situado en /etc/nginx/sites-enabled. Reiniciamos el servicio de Nginx y ya está todo funcionando de nuevo.&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9211</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9211"/>
				<updated>2021-12-11T22:10:57Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Autorecarga de Decide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user decide with password 'decide'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner decide&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER decide CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'decide',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'decide',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
$ cd decide&lt;br /&gt;
$ ./manage.py migrate&lt;br /&gt;
$ ./manage.py createsuperuser&lt;br /&gt;
$ ./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ejecutamos los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ systemctl daemon-reload&lt;br /&gt;
$ systemctl enable decide.service&lt;br /&gt;
&amp;lt;/source&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
Vamos a instalar Nginx y Ngrok, que son las herramientas que nos van a permitir poner en línea nuestro sistema. Para ello vamos a ejecutar los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la URL que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://19ab-217-217-114-58.ngrok.io y jenkins en https://19ab-217-217-114-58.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuración y seleccionar Webhooks. Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://19ab-217-217-114-58.ngrok.io/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
= Finalización =&lt;br /&gt;
&lt;br /&gt;
Con todos los pasos previos realizados correctamente, hemos conseguido nuestra propia herramienta de CI/CD, sin utilizar servicios como Travis CI o Heroku. Para acabar, si la máquina se reinicia o cierras la terminal de Ngrok, la URL quedará inaccesible, por consiguiente debemos entrar en la máquina con VNC, ejecutar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y deberemos copiar esta URL en el archivo de configuración de Nginx situado en /etc/nginx/sites-enabled. Reiniciamos el servicio de Nginx y ya está todo funcionando de nuevo.&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9210</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9210"/>
				<updated>2021-12-11T18:46:15Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user decide with password 'decide'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner decide&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER decide CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'decide',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'decide',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
$ cd decide&lt;br /&gt;
$ ./manage.py migrate&lt;br /&gt;
$ ./manage.py createsuperuser&lt;br /&gt;
$ ./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
Vamos a instalar Nginx y Ngrok, que son las herramientas que nos van a permitir poner en línea nuestro sistema. Para ello vamos a ejecutar los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la URL que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://19ab-217-217-114-58.ngrok.io y jenkins en https://19ab-217-217-114-58.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuración y seleccionar Webhooks. Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://19ab-217-217-114-58.ngrok.io/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
= Finalización =&lt;br /&gt;
&lt;br /&gt;
Con todos los pasos previos realizados correctamente, hemos conseguido nuestra propia herramienta de CI/CD, sin utilizar servicios como Travis CI o Heroku. Para acabar, si la máquina se reinicia o cierras la terminal de Ngrok, la URL quedará inaccesible, por consiguiente debemos entrar en la máquina con VNC, ejecutar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y deberemos copiar esta URL en el archivo de configuración de Nginx situado en /etc/nginx/sites-enabled. Reiniciamos el servicio de Nginx y ya está todo funcionando de nuevo.&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9209</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9209"/>
				<updated>2021-12-11T18:40:45Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Sincronización con Github */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user decide with password 'decide'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner decide&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER decide CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'decide',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'decide',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
$ cd decide&lt;br /&gt;
$ ./manage.py migrate&lt;br /&gt;
$ ./manage.py createsuperuser&lt;br /&gt;
$ ./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
Vamos a instalar Nginx y Ngrok, que son las herramientas que nos van a permitir poner en línea nuestro sistema. Para ello vamos a ejecutar los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la URL que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://19ab-217-217-114-58.ngrok.io y jenkins en https://19ab-217-217-114-58.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuración y seleccionar Webhooks. Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://19ab-217-217-114-58.ngrok.io/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9208</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9208"/>
				<updated>2021-12-11T18:40:26Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Sincronización con Github */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user decide with password 'decide'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner decide&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER decide CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'decide',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'decide',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
$ cd decide&lt;br /&gt;
$ ./manage.py migrate&lt;br /&gt;
$ ./manage.py createsuperuser&lt;br /&gt;
$ ./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
Vamos a instalar Nginx y Ngrok, que son las herramientas que nos van a permitir poner en línea nuestro sistema. Para ello vamos a ejecutar los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la URL que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://19ab-217-217-114-58.ngrok.io y jenkins en https://19ab-217-217-114-58.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuración y seleccionar Webhooks. Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://URL-DE-NGROK/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9207</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9207"/>
				<updated>2021-12-11T18:39:47Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Apertura del sistema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user decide with password 'decide'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner decide&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER decide CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'decide',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'decide',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
$ cd decide&lt;br /&gt;
$ ./manage.py migrate&lt;br /&gt;
$ ./manage.py createsuperuser&lt;br /&gt;
$ ./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
Vamos a instalar Nginx y Ngrok, que son las herramientas que nos van a permitir poner en línea nuestro sistema. Para ello vamos a ejecutar los siguientes comandos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la URL que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  19ab-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://19ab-217-217-114-58.ngrok.io y jenkins en https://19ab-217-217-114-58.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuracion y seleccionar Webhooks&lt;br /&gt;
&lt;br /&gt;
Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://URL-DE-NGROK/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9206</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9206"/>
				<updated>2021-12-11T18:37:00Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Configuración de Decide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user decide with password 'decide'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner decide&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER decide CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'decide',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'decide',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
$ cd decide&lt;br /&gt;
$ ./manage.py migrate&lt;br /&gt;
$ ./manage.py createsuperuser&lt;br /&gt;
$ ./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la url que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Esta URL cambiará cada vez que reiniciemos la raspberry, asique debemos copiarla cada vez que apaguemos el sistema.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://TU-URL.ngrok.io y jenkins en https://TU-URL.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuracion y seleccionar Webhooks&lt;br /&gt;
&lt;br /&gt;
Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://URL-DE-NGROK/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9205</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9205"/>
				<updated>2021-12-11T18:36:34Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Configuración de Decide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user decide with password 'decide'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner decide&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER decide CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'decide',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'decide',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py migrate&lt;br /&gt;
./manage.py createsuperuser&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la url que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Esta URL cambiará cada vez que reiniciemos la raspberry, asique debemos copiarla cada vez que apaguemos el sistema.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://TU-URL.ngrok.io y jenkins en https://TU-URL.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuracion y seleccionar Webhooks&lt;br /&gt;
&lt;br /&gt;
Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://URL-DE-NGROK/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9204</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9204"/>
				<updated>2021-12-11T18:35:23Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Configuración de Jenkins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/your_github_username/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user joszamama with password 'joszamama'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner joszamama&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER joszamama CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'joszamama',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'joszamama',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py migrate&lt;br /&gt;
./manage.py createsuperuser&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la url que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Esta URL cambiará cada vez que reiniciemos la raspberry, asique debemos copiarla cada vez que apaguemos el sistema.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://TU-URL.ngrok.io y jenkins en https://TU-URL.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuracion y seleccionar Webhooks&lt;br /&gt;
&lt;br /&gt;
Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://URL-DE-NGROK/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9203</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9203"/>
				<updated>2021-12-11T18:34:06Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Configuración de Jenkins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/joszamama/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh (seleccionamos on SUCCESS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user joszamama with password 'joszamama'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner joszamama&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER joszamama CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'joszamama',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'joszamama',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py migrate&lt;br /&gt;
./manage.py createsuperuser&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la url que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Esta URL cambiará cada vez que reiniciemos la raspberry, asique debemos copiarla cada vez que apaguemos el sistema.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://TU-URL.ngrok.io y jenkins en https://TU-URL.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuracion y seleccionar Webhooks&lt;br /&gt;
&lt;br /&gt;
Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://URL-DE-NGROK/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9202</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9202"/>
				<updated>2021-12-11T18:32:23Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Configuración inicial */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y conectarnos a la IP usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/joszamama/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh if build was success&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user joszamama with password 'joszamama'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner joszamama&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER joszamama CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'joszamama',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'joszamama',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py migrate&lt;br /&gt;
./manage.py createsuperuser&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la url que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Esta URL cambiará cada vez que reiniciemos la raspberry, asique debemos copiarla cada vez que apaguemos el sistema.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://TU-URL.ngrok.io y jenkins en https://TU-URL.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuracion y seleccionar Webhooks&lt;br /&gt;
&lt;br /&gt;
Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://URL-DE-NGROK/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9201</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9201"/>
				<updated>2021-12-11T18:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Configuración inicial */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra máquina. Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario pi. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y reconectarnos usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/joszamama/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh if build was success&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user joszamama with password 'joszamama'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner joszamama&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER joszamama CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'joszamama',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'joszamama',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py migrate&lt;br /&gt;
./manage.py createsuperuser&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la url que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Esta URL cambiará cada vez que reiniciemos la raspberry, asique debemos copiarla cada vez que apaguemos el sistema.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://TU-URL.ngrok.io y jenkins en https://TU-URL.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuracion y seleccionar Webhooks&lt;br /&gt;
&lt;br /&gt;
Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://URL-DE-NGROK/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9200</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9200"/>
				<updated>2021-12-11T18:30:18Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra raspberry! Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario &amp;quot;pi&amp;quot;. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y reconectarnos usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/joszamama/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh if build was success&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuración de Decide =&lt;br /&gt;
&lt;br /&gt;
Vamos a hacer una build manual, que deberá dar fallo (esto es de forma intencionada). El fallo es que el sistema no detecta un local_settings.py, ya que no hemos configurado el proyecto decide que acaba de descargar jenkins en su workspace. Para ello vamos a realizar los contenidos vistos en la práctica 1 de la asignatura usando como proyecto var/lib/jenkins/workspace/Decide. Para ello vamos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ cd var/lib/jenkins/workspace&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install python3 python3-venv python3-pip postgresql libpq-dev&lt;br /&gt;
&lt;br /&gt;
$ source decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install wheel&lt;br /&gt;
$ sudo pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
$ sudo su - postgres&lt;br /&gt;
&lt;br /&gt;
psql -c &amp;quot;create user joszamama with password 'joszamama'&amp;quot;&lt;br /&gt;
psql -c &amp;quot;create database decidedb owner joszamama&amp;quot;&lt;br /&gt;
psql -c &amp;quot;ALTER USER joszamama CREATEDB;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debememos crear un fichero &amp;quot;local_settings.py&amp;quot; en var/lib/jenkins/workspace/Decide/decide, y configurarlo como hemos visto en la práctica 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'http://127.0.0.1:8000'&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': {&lt;br /&gt;
        'ENGINE': 'django.db.backends.postgresql',&lt;br /&gt;
        'NAME': 'decidedb',&lt;br /&gt;
        'USER': 'joszamama',&lt;br /&gt;
        'HOST': '127.0.0.1',&lt;br /&gt;
        'PASSWORD': 'joszamama',&lt;br /&gt;
        'PORT': '5432',&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, iremos a var/lib/jenkins/worspace/Decide, y haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py migrate&lt;br /&gt;
./manage.py createsuperuser&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Probamos a hacer una votación para comprobar que todo funciona correctamente, cerramos la terminal y volvemos a jenkins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Autorecarga de Decide =&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a registrar a decide como servicio de sistema. Para ello vamos a crear un fichero decide.sh en /usr/sbin/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cd /var/lib/jenkins/workspace/Decide&lt;br /&gt;
source decide-enviroment/bin/activate&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py runserver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo registramos como servicio de sistema creando un fichero decide.service en /etc/systemd/system/ con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description= Decide auto startup tool&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /usr/sbin/decide.sh&lt;br /&gt;
TimeoutStartSec=0&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a darle permisos a jenkins para que pueda ejecutar comandos shell con sudo, que nos hará falta posteriormente. Para ello vamos a ejecutar el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo visudo /etc/sudoers&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y justo debajo de la linea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
%sudo   ALL=(ALL:ALL) ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vamos a insertar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
jenkins ALL= NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con todo esto configurado, ya podemos ir a Jenkins y hacer una build manual, que deberá funcionar sin problemas y en 127.0.0.1/8000 podremos ver decide desplegado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Apertura del sistema =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install nginx&lt;br /&gt;
&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install snapd&lt;br /&gt;
$ sudo reboot&lt;br /&gt;
&lt;br /&gt;
$ sudo snap install core&lt;br /&gt;
$ sudo snap install ngrok&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrancamos Ngrok con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ ngrok http 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y se nos abrirá una terminal donde debemos copiar la url que nos proporciona en forwarding, en mi caso es &amp;quot;http://19ab-217-217-114-58.ngrok.io&amp;quot;. Esta URL cambiará cada vez que reiniciemos la raspberry, asique debemos copiarla cada vez que apaguemos el sistema.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a /etc/nginx/sites-enabled, borramos default y creamos un nuevo archivo &amp;quot;decide&amp;quot; sin extensión con el siguiente contenido:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80 default_server;&lt;br /&gt;
    listen [::]:80 default_server;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
    server_name _;&lt;br /&gt;
&lt;br /&gt;
    location /jenkins {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080/jenkins;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://127.0.0.1:8000;&lt;br /&gt;
	proxy_set_header Host  58d5-217-217-114-58.ngrok.io;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a /etc/default y modificamos el archivo jenkins, añadiendo el argumento --prefix=/jenkins a la última línea. Nos deberá quedar tal que:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
JENKINS_ARGS=&amp;quot;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto hecho, ya tenemos decide en https://TU-URL.ngrok.io y jenkins en https://TU-URL.ngrok.io/jenkins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sincronización con Github =&lt;br /&gt;
&lt;br /&gt;
Para acabar, vamos a hacer que cuando haya un commit en GitHub se arranque el ciclo CI/CD automáticamente. Este proceso es muy sencillo, solo debemos irnos nuestro repositorio en GitHub, navegar hasta Configuracion y seleccionar Webhooks&lt;br /&gt;
&lt;br /&gt;
Creamos uno nuevo con los siguientes datos:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
http://URL-DE-NGROK/jenkins/github-webhook/&lt;br /&gt;
application/json&lt;br /&gt;
just push the event&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añadimos el Webhook y listo, ahora si hacemos un commit en master podremos ver que jenkins ha empezado a trabajar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extras =&lt;br /&gt;
&lt;br /&gt;
Te recomiendo ver 2 funcionalidades para añadir a tu Jenkins, son muy rápidas y fáciles de añadir.&lt;br /&gt;
	&lt;br /&gt;
# Envío de correos automáticos una vez ejecutada la build. Con crearte una cuenta de gmail para el proyecto y configurar el plugin de correo puedes hacer que se te envíe el log automáticamente informándote del estado de la build cuando se ejecuta.&lt;br /&gt;
# Sistema y gestión por roles (Se instala con un plugin, es muy sencillo de configurar). Con esta puedes crear una cuenta de usuario para cada miembro del grupo, y tener un registro de las builds y cambios hechos por cada persona en jenkins.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9199</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9199"/>
				<updated>2021-12-11T17:21:24Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: /* Instalación de Jenkins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra raspberry! Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario &amp;quot;pi&amp;quot;. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y reconectarnos usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/joszamama/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh if build was success&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9198</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9198"/>
				<updated>2021-12-11T17:20:48Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra raspberry! Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario &amp;quot;pi&amp;quot;. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y reconectarnos usando VNC Viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Primero necesitamos instalar el JRE de Java para que Jenkins funcione:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt install openjdk-11-jre&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto vamos a crear las claves para añadir el repositorio de paquetes de jenkins al repositorio de la raspberry. Lo haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ curl https://pkg.jenkins.io/debian/jenkins.io.key | gpg --dearmor | sudo tee /usr/share/keyrings/jenkins-archive-keyring.gpg &amp;gt;/dev/null&lt;br /&gt;
$ sudo nano /etc/apt/sources.list.d/jenkins.list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y añadiremos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
deb [signed-by=/usr/share/keyrings/jenkins-archive-keyring.gpg] https://pkg.jenkins.io/debian binary/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego actualizaremos los paquetes e instalaremos Jenkins:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt install jenkinsç&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Una vez instalado, Jenkins genera una contraseña inicial que tendremos que dar en el primer arranque. La podemos ver con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copiamos la clave, entramos a [IP_DE_TU_RASPBERRY]:8080 y la ponemos, luego seleccionamos &amp;quot;Instalar Plugins Recomendados&amp;quot; y esperamos a que acabe la instalación. Jenkins está ahora instalado como servicio del sistema, que es justo lo que queremos. Esto significa que siempre que el sistema arranque jenkins también lo hará.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración de Jenkins =&lt;br /&gt;
&lt;br /&gt;
Vamos a instalar los plugins extras que vamos a necesitar, para ello iremos a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Panel de Control &amp;gt; Administrar Jenkins &amp;gt; Administrar Plugins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seleccionamos &amp;quot;Todos los plugins&amp;quot; e instalamos PostBuildScript. Una vez instaladas todas las herramientas necesarias, vamos al menú principal y seleccionamos &amp;quot;Nueva Tarea&amp;quot;. Aquí podemos configurar proyectos de distintas maneras, para nuestro caso vamos a utilizar &amp;quot;Crear proyecto de estilo libre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* En General, seleccionamos &amp;quot;Desechar ejecuciones antiguas&amp;quot;.&lt;br /&gt;
* En Configurar el origen del código fuente, seleccionamos Git.&lt;br /&gt;
* En URL ponemos la URL de nuestro repositorio &amp;quot;https://github.com/joszamama/decide.git&amp;quot;.&lt;br /&gt;
* Podemos configurar varias ramas, en mi caso uso &amp;quot;*/master&amp;quot;.&lt;br /&gt;
* En Disparadores de ejecuciones seleccionamos &amp;quot;GitHub hook trigger for GITScm polling&amp;quot;&lt;br /&gt;
* En Ejecutar, damos a añadir nuevo paso, ejecutar linea de comando shell y copiamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Create/Activate  virtualenv&lt;br /&gt;
python3 -m venv decide-enviroment&lt;br /&gt;
. ./decide-enviroment/bin/activate&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
# Run tests&lt;br /&gt;
cd decide&lt;br /&gt;
./manage.py test -v 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En Acciones para ejecutar después vamos a seleccionar &amp;quot;Add generic script file&amp;quot;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/usr/sbin/restart-decide.sh if build was success&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9197</id>
		<title>Guía para la Instalación de entorno de CI/CD en Rasperry Pi</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Gu%C3%ADa_para_la_Instalaci%C3%B3n_de_entorno_de_CI/CD_en_Rasperry_Pi&amp;diff=9197"/>
				<updated>2021-12-11T17:09:23Z</updated>
		
		<summary type="html">&lt;p&gt;Joszamama: Página creada con «  = Prerrequisitos =  * Raspberry Pi Model B (1/2/4/8) GB * Cargador USB Tipo-C * Tarjeta Micro SD (16 GB como mínimo) * Cable Ethernet * PuTTY &amp;quot;https://www.putty.org/&amp;quot; *...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Prerrequisitos =&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi Model B (1/2/4/8) GB&lt;br /&gt;
* Cargador USB Tipo-C&lt;br /&gt;
* Tarjeta Micro SD (16 GB como mínimo)&lt;br /&gt;
* Cable Ethernet&lt;br /&gt;
* PuTTY &amp;quot;https://www.putty.org/&amp;quot;&lt;br /&gt;
* VNC Viewer &amp;quot;https://www.realvnc.com/es/connect/download/viewer/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Instalación del SO =&lt;br /&gt;
	&lt;br /&gt;
Primero vamos a instalar el sistema operativo en la tarjeta micro SD. Para ello iremos a &amp;quot;https://www.raspberrypi.com/software/&amp;quot; y descargaremos Raspberry Pi OS. Una vez instalado, insertamos la tarjeta SD con un adaptador y seleccionamos:&lt;br /&gt;
&lt;br /&gt;
* Raspberry Pi OS (32-bit)&lt;br /&gt;
* Almacenamiento: Seleccionamos la tarjeta micro SD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le damos a escribir y a esperar. Una vez acabe el proceso, vamos al directorio raiz de la tarjeta y creamos un archivo llamado &amp;quot;ssh&amp;quot; sin extension. Esto habilitará SSH en la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Arranque del sistema =&lt;br /&gt;
&lt;br /&gt;
# Insertamos la tarjeta SD en la ranura de la Raspberry. (localizada en el lado contrario de los puertos USB) &lt;br /&gt;
# Conectamos un extremo del cable Ethernet a la Raspberry y el otro extremo a un ordenador.&lt;br /&gt;
# Conectamos el cable de alimentación a la Raspberry.&lt;br /&gt;
# Abrimos PuTTY y nos conectamos a raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuración inicial =&lt;br /&gt;
&lt;br /&gt;
Una vez abierta la sesión nos van a pedir usuario y contraseña, que por defecto son usuario: &amp;quot;pi&amp;quot;, contraseña: &amp;quot;raspberry&amp;quot;. Luego de iniciar sesión en la cuenta principal vamos a escribir&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y con las flechas navegamos hasta &amp;quot;3 INTERFACE OPTIONS&amp;quot;, habilitamos SSH y VNC. Cerramos la conexión y abrimos VNC Viewer. Nos conectamos de nuevo a raspberrypi.local y ya podremos ver la interfaz gráfica de nuestra raspberry! Ahora debemos seguir los pasos de configuración que aparecen en la pantalla, introduciendo la zona horaria, idioma y una contraseña nueva para el usuario &amp;quot;pi&amp;quot;. Para finalizar configuraremos la red WiFi y dejaremos que el asistente busque e instale las actualizaciones. (Esto puede tardar un rato). Cuando acabe abrimos una terminal, escribimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ sudo apt update&lt;br /&gt;
$ sudo apt upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Para finalizar nos quedaremos con la IP de nuestra máquina con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ hostname -I&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y con esto hecho ya podemos reiniciar la raspberry quitando el cable Ethernet y reconectarnos usando VNC Viewer.&lt;/div&gt;</summary>
		<author><name>Joszamama</name></author>	</entry>

	</feed>