Pular para conteúdo

Jenkins

Com a aplicação containerizada, o próximo passo é configurar um pipeline de CI/CD para automatizar o deploy em um provedor de nuvem. Você pode usar o provedor que preferir — AWS, Azure ou Google Cloud Platform. O pipeline deve incluir as seguintes etapas:

  1. SCM
  2. Dependências
  3. Build
  4. Push para o Docker Hub
  5. Deploy no K8s

A FAZER

Todos os microsserviços devem ser implantados no mesmo cluster. Cada microsserviço deve ter o seu próprio Jenkinsfile. O pipeline deve ser definido na raiz do projeto e deve cobrir todos os microsserviços:

  • account-service;
  • auth-service;
  • gateway-service;
  • product-service, e;
  • order-service.

Uma estrutura básica de diretórios para o projeto é a seguinte:

.
├── account-service
│   ├── Jenkinsfile
│   └── ...

Exemplo de Jenkinsfile para o account-service:

pipeline {
    agent any
    environment {
        SERVICE = 'account'
        NAME = "humbertosandmann/${env.SERVICE}"
    }
    stages {
        stage('Dependecies') {
            steps {
                build job: 'account', wait: true
            }
        }
        stage('Build') { 
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }      
        stage('Build & Push Image') {
            steps {
                withCredentials([usernamePassword(
                    credentialsId: 'dockerhub-credential',
                    usernameVariable: 'USERNAME',
                    passwordVariable: 'TOKEN')])
                {
                    sh "docker login -u $USERNAME -p $TOKEN"
                    sh "docker buildx create --use --platform=linux/arm64,linux/amd64 --node multi-platform-builder-${env.SERVICE} --name multi-platform-builder-${env.SERVICE}"
                    sh "docker buildx build --platform=linux/arm64,linux/amd64 --push --tag ${env.NAME}:latest --tag ${env.NAME}:${env.BUILD_ID} -f Dockerfile ."
                    sh "docker buildx rm --force multi-platform-builder-${env.SERVICE}"
                }
            }
        }
    }
}