--- 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) ![](https://i.imgur.com/YJC2oxO.png) 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 ```