Erro em homologação mas não ocorre local - Angular 13

40 respostas
G

Local não dá este erro

Mas no servidor de homologação ocorre

Quando faz o build no jenkis,

stage ('BUILD') {
        script {
            if (env.gitlabBranch == 'master') {
                gitlabCommitStatus("BUILD") {
                    env.NODEJS_HOME = "${tool 'NodeJsv16.13.0'}"
                    env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}"
                    sh 'npm install --force && ng build --prod --c=hom --base-href="/agenda/"'
                }
            } else {
                updateGitlabCommitStatus name: 'BUILD', state: 'canceled'
            }
        }
    }

O que pode ser ?

40 Respostas

G

Alguém ?

L

Tenta rodar o projeto localmente fazendo o build usando a flag prod pra ver se dá o mesmo erro.

G

Local tudo funciona normal

Node 16.

Como fazer para rodar o build local ?

Como homologação é mimificado, não tem como identificar o erro

L

Só executar o comando da pipeline:

ng build --prod

E depois executar a pasta build em algum http server, veja: How to Run an Angular Production Build Locally - Web Dev

G

O comando

ng build --prod

Gera sem erros.

G

Disto que precisava

G

Erro

L

Ah sim, na pipeline está sendo informado o href base. Tente executar o comando exato da pipeline pra ver o que muda:

ng build --prod --c=hom --base-href="/agenda/
G

Rodou normal, sem erros

G

Eu ainda acho que é o node.

L

Troque o node da sua maquina para a mesma versão que está no servidor.

Vc pode fazer isso facilmente usando o NVM

G

Instalei o nvm. Mas não consegui usar ele

L

Vc usa windows ou linux? Se for windows, tem que instalar o nvm-windows.

Antes de instalar o nvm, é recomendado desinstalar qualquer versão do node já instalada no seu computador.

Depois de instalado, vc pode:

  • nvm list: Listar os nodes instalados na maquina
  • nvm install <version>: Instalar uma versão específica
  • nvm use <version>: Alternar para uma versão instalada
G

image

G

Entrei como administrador e funcionou

G

Na versão 14.4.0, não deu erro local

G

Não consigo entender, porque está dando erro no servidor de homologação.

E como consigo pegar este erro.

L

Vc não conseguiu instalar a versão 16.13.0 do node localmente não?

G

Não dá erro

G
stage ('BUILD') {
        script {
            if (env.gitlabBranch == 'master') {
                gitlabCommitStatus("BUILD") {
                    sh 'npm install --force && ng build --prod --c=hom --base-href="/agenda/"'
                }
            } else {
                updateGitlabCommitStatus name: 'BUILD', state: 'canceled'
            }
        }
    }

Até assim dá erro

O certo seria gerar homologação sem ser mimificado. Tentar descobrir aonde é este erro.

L

Qual a versão exata do angular no seu projeto?

G

13.2.0

G

Outro projeto que rodou normal está com Angular 11.0.0

Outro com 12.0.2

E este com 13.2.0, só dá erro quando faz login

Sistema de agendas - normal

Sistema de agendas - normal

Para dar o erro

http://app.sistemasgh.com.br/agenda/

Login: [email removido]
Senha: 63Jeliel417%

Após logar, no console do navegador é mostrado o erro

L

Cara, tem problema enviar esses dados aqui não?

G

Não

L

Tem algum coisa de internacionalização no seu projeto? Algo como o pipe translate? Pelo que vi no javascript, parece ter algo a ver com isso, mas é complicado entender o erro dessa forma.

G

Tinha e eu tirei

package.json

"dependencies": {
    "@agm/core": "^1.1.0",
    "@angular/animations": "^13.2.0",
    "@angular/cdk": "^13.2.0",
    "@angular/common": "^13.2.0",
    "@angular/compiler": "^13.2.0",
    "@angular/core": "^13.2.0",
    "@angular/flex-layout": "^13.0.0-beta.38",
    "@angular/forms": "^13.2.0",
    "@angular/localize": "^13.2.0",
    "@angular/material": "^13.2.0",
    "@angular/platform-browser": "^13.2.0",
    "@angular/platform-browser-dynamic": "^13.2.0",
    "@angular/router": "^13.2.0",
    "@ckeditor/ckeditor5-angular": "^2.0.2",
    "@ckeditor/ckeditor5-build-classic": "^31.1.0",
    "@fullcalendar/angular": "^5.10.1",
    "@fullcalendar/core": "^5.10.1",
    "@fullcalendar/daygrid": "^5.10.1",
    "@fullcalendar/interaction": "^5.10.1",
    "@fullcalendar/list": "^5.10.1",
    "@fullcalendar/timegrid": "^5.10.1",
    "@ng-bootstrap/ng-bootstrap": "^11.0.0",
    "@ngx-loading-bar/core": "^5.1.2",
    "@swimlane/ngx-charts": "^19.2.0",
    "@swimlane/ngx-datatable": "^20.0.0",
    "@types/d3-shape": "^3.0.2",
    "acorn": "^8.6.0",
    "angular-feather": "^6.1.0",
    "angular-gauge": "^4.0.0",
    "angular2-text-mask": "^9.0.0",
    "apexcharts": "^3.32.0",
    "bootstrap": "^5.1.3",
    "browser-sync": "^2.27.7",
    "chart.js": "^2.9.4",
    "core-js": "^3.20.0",
    "echarts": "^4.9.0",
    "js-brasil": "^2.5.1",
    "moment": "^2.29.1",
    "ng-apexcharts": "^1.6.0",
    "ng-click-outside": "^9.0.0",
    "ng-image-fullscreen-view": "^2.0.0",
    "ng-pick-datetime": "^7.0.0",
    "ng2-charts": "^2.4.2",
    "ng2-dragula": "^2.1.1",
    "ngx-color-picker": "^11.0.0",
    "ngx-currency": "^2.5.3",
    "ngx-dropzone-wrapper": "^10.0.1",
    "ngx-echarts": "^8.0.1",
    "ngx-gauge": "^4.0.0",
    "ngx-mask": "^13.0.1",
    "ngx-material-file-input": "^3.0.0",
    "ngx-perfect-scrollbar": "^10.1.1",
    "ngx-spinner": "^11.0.1",
    "ngx-toastr": "^14.2.1",
    "ngx-webstorage": "^9.0.0",
    "rxjs": "^7.4.0",
    "subsink": "^1.0.2",
    "sweetalert2": "^11.3.0",
    "tslib": "^2.3.1",
    "zone.js": "~0.11.4"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~13.2.0",
    "@angular/cli": "^13.2.0",
    "@angular/compiler-cli": "^13.2.0",
    "@angular/language-service": "^13.2.0",
    "@types/jasmine": "~3.10.2",
    "@types/jasminewd2": "~2.0.10",
    "@types/node": "^17.0.2",
    "codelyzer": "^6.0.2",
    "del": "^6.0.0",
    "install": "^0.13.0",
    "jasmine-core": "~3.10.1",
    "jasmine-spec-reporter": "~7.0.0",
    "karma": "~6.3.9",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage-istanbul-reporter": "~3.0.3",
    "karma-jasmine": "~4.0.1",
    "karma-jasmine-html-reporter": "^1.7.0",
    "protractor": "~7.0.0",
    "run-sequence": "^2.2.1",
    "ts-node": "~10.4.0",
    "tslint": "~6.1.3",
    "typescript": "~4.5.4"
  }
}
G

Tinha, mas foi retirado do projeto

"@ngx-translate/http-loader": "^7.0.0",

L

Mesmo assim, é muito estranho não dá erro qdo roda local. Talvez o jeito é fazer igual o Jason: Ir por partes. Vá comentando os componentes (na rota que é aberta logo após o login) e vá publicando até o erro sumir. Com isso vc vai vendo o que pode está causando o erro.

G

Vou fazer isto

G

O erro era porque de class que extends desta classe UnsubscribeOnDestroyAdapter

@Injectable()
export class UnsubscribeOnDestroyAdapter implements OnDestroy {
  /**
   * The subscription sink object that stores all subscriptions
   */
  subs = new SubSink();
  /**
   * The lifecycle hook that unsubscribes all subscriptions when the component / object gets destroyed
   */
  ngOnDestroy(): void {
    this.subs.unsubscribe();
  }
}

Mas deu outro erro. Estou vendo o que é

G

image

G

Este nome está difícil de achar.

L

Esse do nome acontece local ou só no servidor tb?

G

Só servidor

L

Procura todas as referências que usam .nome para tentar entender o que pode está acontecendo.

G

Os que eu achei, eu comentei, mas não adiantou

L

Vc olhou em todos os NgOnInit? Parece que é um erro quando o componente é carregado.

G

ISto que estou fazendo

G

Voltamos a estaca zero

Estou observando que estou alterando o código e não está resolvendo
No servidor está gerando estas três pastas
image

docker-compose.yml

version: '3.1'
services:
  agenda:
    build: .
    container_name: agenda
    restart: unless-stopped
    ports:
      - '4306:80'
    external_links:
      - db:db
    networks:
      - db-net
networks:
  db-net:
    external:
      name: db-net

docker.sh

#!/bin/sh
cd /var/opt/netsig/agenda/
CONTAINER_NAME="agenda"
OLD="$(docker ps --all --quiet --filter=name="$CONTAINER_NAME")"
if [ -n "$OLD" ]; then
  docker stop $OLD && docker rm -f $OLD
fi

Dockerfile

FROM nginx:1.17.8-alpine
COPY  /dist/* /usr/share/nginx/html/
RUN ls /usr/share/nginx/html
EXPOSE 4306
CMD ["nginx", "-g", "daemon off;"]

Jenkinsfile

node("master") {
    try {
        stage('SCM') {
            gitlabCommitStatus("SCM") {
                git branch: 'master',
                credentialsId: 'jenkins-gitlab',
                url:  "git@${env.GITLAB_URL}:guilherme/agendaangular.git"
            }
        }
        stage('TESTE'){
            gitlabCommitStatus("TESTE") {
                sh 'echo TESTE'
            }
        }
    stage ('BUILD') {
        script {
            if (env.gitlabBranch == 'master') {
                gitlabCommitStatus("BUILD") {
                    sh 'npm install --force && ng build --prod --c=hom --base-href="/agenda/"'
                }
            } else {
                updateGitlabCommitStatus name: 'BUILD', state: 'canceled'
            }
        }
    }
    stage ('DEPLOY') {
        script {
            sh "echo BRANCH - ${env.gitlabBranch}"
            if (env.gitlabBranch == 'master') {
                gitlabCommitStatus("DEPLOY") {
                    sh "ssh ${PRODUCTION_USER_SSH}@${PRODUCTION_SERVER} mkdir -p /var/opt/netsig/agenda/"
                    sh "ssh ${PRODUCTION_USER_SSH}@${PRODUCTION_SERVER} rm -rf /var/opt/netsig/agenda/*"
                    sh "scp -rp ./dist ${PRODUCTION_USER_SSH}@${PRODUCTION_SERVER}:${PATH_DEPLOY}/agenda/"
                    sh "scp -p ./Dockerfile ${PRODUCTION_USER_SSH}@${PRODUCTION_SERVER}:${PATH_DEPLOY}/agenda/"
                    sh "scp -p ./docker-compose.yml ${PRODUCTION_USER_SSH}@${PRODUCTION_SERVER}:${PATH_DEPLOY}/agenda/"
                    sh "scp -p ./docker.sh ${PRODUCTION_USER_SSH}@${PRODUCTION_SERVER}:${PATH_DEPLOY}/agenda/"
                    sh '''
                        ssh ${PRODUCTION_USER_SSH}@${PRODUCTION_SERVER} "
                        cd /var/opt/netsig/agenda/ &&
                        chmod +x docker.sh &&
                        sh docker.sh &&
                        export DOCKERHOST=$(ifconfig | grep -E '([0-9]{1,3}.){3}[0-9]{1,3}' | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1) &&
                        echo 'DOCKERHOST' $DOCKERHOST &&
                        docker-compose up -d --build"
                    '''
                }
            } else {
                updateGitlabCommitStatus name: 'DEPLOY', state: 'canceled'
            }
        }
    }
    }catch (e) {
        stage('NOTIFY FAILED')
        {
            updateGitlabCommitStatus name: 'pipeline', state: 'failed'
        }
        throw e
    }
}

Entro no servidor digito este comando sudo nano /var/opt/netsig/nginx/nginx-local.conf

Incluo estas informações, mudando a porta e nome do sistema

location /agenda/ {
        proxy_pass  http://172.17.0.1:4306/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Request-Start $msec;
      }

Envio para o GIT, e o jenkis faz tudo.

Mas este deu erro, todos os outros deram certo.

O que pode ser ?

Criado 8 de fevereiro de 2022
Ultima resposta 10 de fev. de 2022
Respostas 40
Participantes 2