1
resposta

Jenkins x Docker Multistage

Pessoal estou seguindo passo a passo do curso porém mudando para a minha realidade ontem tenho 2 imagens que precisam ser criadas (um app e outra db)

Como posso fazer para que o jenkins build as 2 imagens? Atualmente estou usando um unico dockerfile contendo o code abaixo:

FROM python:3.5-alpine AS app
WORKDIR /app
COPY source_code/ /app

RUN pip install -r requirements.txt

ENTRYPOINT ["python", "server.py"]

FROM mysql:5.5 as DB

ENV MYSQL_DATABASE crud_flask
ENV MYSQL_USER dev
ENV MYSQL_PASSWORD dev
ENV MYSQL_RANDOM_ROOT_PASSWORD yes

COPY database/ /docker-entrypoint-initdb.d/

Quando faço o build na mão eu build os stages e nomeio sem problemas mas percebi que no jenkins não consigo fazer isso, alguém tem alguma luz?

1 resposta

Olá Wallace, tudo bem? Nesse cenário penso que é melhor você utilizar Docker with Pipeline, como está indicando na documentação, então você pode executar mais de uma imagem:

pipeline {
    agent none
    stages {
        stage('Back-end') {
            agent {
                docker { image 'maven:3-alpine' }
            }
            steps {
                sh 'mvn --version'
            }
        }
        stage('Front-end') {
            agent {
                docker { image 'node:14-alpine' }
            }
            steps {
                sh 'node --version'
            }
        }
    }
}

Bem como adaptar esse código para fazer o build das imagens, como nessa outra parte da documentação explica:

node {
    checkout scm
    def dockerfile = 'Dockerfile.test'
    def customImage = docker.build("my-image:${env.BUILD_ID}", "-f ${dockerfile} ./dockerfiles") 
}

Espero ter ajudado!