---
title: 'Proceso de CI/CD del proyecto siare-front'
---
Proceso de CI/CD del proyecto siare-front
===
* **Coordinador Tecnológico:** Rafael Palau
* **Arquitecto:** Marcelo López
* **Consultores:**
Julio Mello
Marcos Benítez
Marco Aquino
Ilse Grau
Lauro Segovia
Alan Sanier
# Contenido
[TOC]
# Integración continua (CI)

Figura 1. Pipeline CI-SIARE-FRONT
1. Configurar CI-SIARE-FRONT
* Parámetro: Parametro de texto, name: VersionBranch, Default Value: develop
* Parámetro: Valor booleano, name: NexusDeploy, Default Value: true
* Pipeline script:
``` shell=
#!groovy
@Library('pipelines@master') _
pipeSiareFront{
scmclone = "git@192.168.169.101:siare-develop/siare-front.git"
nexusRepo = "http://192.168.169.103:8081/repository/siare-angular/"
DIR = "frontend"
}
```
El `pipeSiareFront` hace referencia al archivo `pipeSiareFront.groovy` que se encuentra en un proyecto git. El archivo `pipeSiareFront.groovy` contine lo siguiente:
``` groovy=
def call(body) {
// evaluate the body block, and collect configuration into the object
def pipelineParams = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = pipelineParams
body()
node(){
stage('Clean Workspace'){
echo "---------------Cleaninig $WORKSPACE BEGIN -----------------------------"
deleteDir() // clean up our workspace
}
stage('Clone') {
echo "------------------------------Cloning GITLAB Repo------------------------------------ "
checkout(scm: [$class: 'GitSCM', userRemoteConfigs: [[url: "${pipelineParams.scmclone}", name: "origin"]], branches: [[name: "${VersionBranch}"]]])
}
stage('Build') {
echo "---------------------------------Compiling--------------------------------------------"
withEnv(["PATH=${tool 'nodejs'}/bin:${tool 'java11'}/bin:$PATH"]) {
sh """
cd ${WORKSPACE}
npm install
ng build --configuration production
"""
}
}
stage('Test'){
}
stage('Nexus Deploy') {
echo "---------------Deploy frontend Nexus -----------------------------"
if (params.NexusDeploy == true) {
NEXUS_VERSION = "nexus3"
NEXUS_PROTOCOL = "http"
NEXUS_URL = "192.168.169.103:8081"
NEXUS_REPOSITORY = "siare-angular"
NEXUS_CREDENTIAL_ID = "jenkins-nexus"
sh "tar -cvzf fe-siare-poc.tar.gz ./*"
withEnv(["JAVA_HOME=${ tool 'java11' }", "PATH+MAVEN=${tool 'maven'}/bin:${env.JAVA_HOME}/bin"]) {
withCredentials([string(credentialsId: 'truststorekey', variable: 'SECRET')]) {
sh "mvn deploy:deploy-file -DuniqueVersion=false -DgeneratePom=false -Dversion=${params.VersionBranch} -DgroupId=front -DartifactId=fe-siare-poc -DrepositoryId=nexus -Durl=${pipelineParams.nexusRepo} -Dfile=fe-siare-poc.tar.gz -Djavax.net.ssl.trustStore=/etc/ssl/keystore.jks -Djavax.net.ssl.trustStorePassword=${SECRET}\n"
}
}
}
}
}
}
```
# Despliegue continuo (CD)
1. Configurar CD-SIARE-FRONT
* Parámetro: Parametro de texto, name: VersionBranch, Default Value: develop
* Pipeline script:
``` groovy=
#!groovy
@Library('pipelines@master') _
pipeCDFront{
nexusRepo = "http://192.168.169.103:8081/repository/siare-angular/"
hostname= "dev.siare.gov.py"
iphost = "192.168.169.104"
}
```
El `pipeCDFront` hace referencia al archivo `pipeCDFront.groovy` que se encuentra en un proyecto git. El archivo `pipeCDFront.groovy` contine lo siguiente:
``` groovy=
def call(body) {
// evaluate the body block, and collect configuration into the object
def pipelineParams = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = pipelineParams
body()
node() {
stage('Clean Workspace') {
echo "---------------Cleaninig $WORKSPACE BEGIN -----------------------------"
deleteDir() /* clean up our workspace */
sh "rm -rf /home/jenkins/.m2/repository/front/*"
}
stage('Clonar de Nexus') {
echo "------------------------------ Descarga de Nexus ------------------------------------ "
withEnv(["JAVA_HOME=${ tool 'java11' }", "PATH+MAVEN=${tool 'maven'}/bin:${env.JAVA_HOME}/bin"]) {
withCredentials([string(credentialsId: 'truststorekey', variable: 'SECRET')]) {
sh "mvn dependency:get -Dartifact=front:fe-siare-poc:${params.VersionBranch} -Ddest=$workspace/fe-siare-poc-develop.gz -Dpackaging=gz -Djavax.net.ssl.trustStore=/etc/ssl/keystore.jks -Djavax.net.ssl.trustStorePassword=${SECRET}"
}
}
}
stage('Copiar en server'){
sh "scp fe-siare-poc-${params.VersionBranch}.gz jenkins@192.168.169.104:/tmp"
}
stage('Desplegar'){
node('db-dev'){
sh "/opt/scripts/kill_front.sh"
sh "rm -rf /opt/siarefront/*"
sh "mv /tmp/fe-siare-poc-${params.VersionBranch}.gz /opt/siarefront/"
sh "tar -xf /opt/siarefront/fe-siare-poc-${params.VersionBranch}.gz -C /opt/siarefront/"
sh "rm -f /opt/siarefront/fe-siare-poc-${params.VersionBranch}.gz"
sh "JENKINS_NODE_COOKIE=dontKillMe nohup /opt/scripts/deployFront.sh &"
}
}
}
}
```
### Nginx
1. Ingresar a la carpeta de configuración de nginx.
``` shell=
$ cd /etc/nginx/conf.d
```
2. Crear el archivo `siarefront.conf`
``` shell=
server {
listen 8093;
root /opt/siarefront/dist/siare-front;
location / {
try_files $uri $uri/ /index.html;
}
}
```
3. Verificar si se encuentra bien las configuraciones agregadas.
``` shell=
$ nginx -t
```
4. Listar los puertos permitidos.
``` shell=
$ semanage port -l | grep http
```
* Obs.: Si no se tiene instalado el `semange` se debe ejecutar `$ yum install policycoreutils-python-utils`
5. Agrega el puerto deseado.
``` shell=
$ semanage port -a -t http_port_t -p tcp 8093
```
6. Listar los puertos permitidos externamente por el firewall-cmd
``` shell=
$ firewall-cmd --zone=public --list-all
```
7. Agrega el puerto a la zona publica.
``` shell=
$ firewall-cmd --zone=public --add-port=8093/tcp --permanent
$ firewall-cmd --reload
```
8. Reiniciar el nginx
``` shell=
$ systemctl restart nginx
```
9. Estatus del nginx
``` shell=
$ systemctl status nginx.service
```