Olá, meu nome é Lucas Ribeiro Mata, sou instrutor na Alura.
Audiodescrição: Lucas se declara como uma pessoa branca. Tem barba e cabelo preto e usa óculos de armação preta e redonda. Esta vestindo uma camiza cinza e está no estúdio da Alura. Está sentado em uma cadeira games de encosto preto e tem um microfone à sua frente. O fundo é uma parede iluminada por luzes rosa e roxa e, no lado direito, há uma estante com vários itens decorativos, como figuras de ação e placas decorativas.
Boas-vinda a este curso! Nele, daremos passo importante no aprendizado de automatização de processos, utilizando scripts em Python. Recomendamos que você tenha concluído o curso anterior desta formação, assim poderá aproveitar melhor o conteúdo que vamos explorar.
Construiremos scripts de automação de tarefas, utilizando Python como linguagem. Além disso, criaremos pipelines de desenvolvimento e vamos automatizar a realização de testes e análises em códigos.
Também vamos gerar uma documentação e artefatos para fazer o deploy de forma automatizada. Por fim, analisaremos como criar scripts para fazer análise de dados gerados por sistemas de uma forma rápida.
O que aprenderemos:
- Construção scripts de automatização de tarefas em Python;
- Criação pipeline de desenvolvimento;
- Automatização testes e análise de códigos;
- Criação de deploy automatizado;
- Criação de scripts para análise de dados.
Aprenderemos tudo isso de forma contextualizada e prática. Vamos nos deparar com algumas situações reais de uso de scripts em Python. Nessa jornada, adotaremos como ferramenta o Jenkins, um servidor de código aberto que podemos utilizar para automatização do pipeline de desenvolvimento, adotando práticas de CI/CD bem comuns no cotidiano de DevOps.
Vamos iniciar a nossa jornada de estudos!
A criação de ambientes virtuais é uma prática bastante comum quando lidamos com diferentes projetos. Muitas vezes, podemos estar construindo uma aplicação em um dado momento, mas queremos conferir outras aplicações similares para fazer um benchmark (comparação) com o código e a abordagem de desenvolvimento que estamos utilizando.
Para analisar essas diferentes aplicações, cada uma com seu conjunto de dependências e bibliotecas, para não ter nenhum tipo de conflito no nosso ambiente, criamos um ambiente virtual. Dentro desse ambiente virtual, instalamos todas as dependências necessárias para a execução de uma dada aplicação.
Essa é uma prática interessante porque isola as dependências, que ficam instaladas dentro desses ambientes virtuais. Assim, elas não terão nenhum tipo de conflito com outras dependências que eventualmente possam estar instaladas no ambiente de trabalho que estamos usando.
Quando trabalhamos com projetos Python, temos a Virtual Env (vitualenv
), uma ferramenta que nos ajuda a criar ambientes virtuais, e agora instalaremos essa ferramenta no nosso PC. Para isso, em uma interface de linha de comando, podemos usar o pip
, gerenciador de pacotes do Python, com o comando install virtualenv
para fazermos o download de todos os pacotes.
pip install virtualenv
Após essa instalação partir desse momento, temos essa ferramenta na nossa máquina e já conseguimos criar um ambiente virtual para projetos Python, e é o que faremos. Ainda por linha de comando, criaremos um ambiente chamado de teste
, executando o comando:
virtualenv test
As informações que recebemos na nossa interface indicam que nosso ambiente foi criado.
Para acessarmos esse ambiente, usamos o comando source nome-do-ambiente/bin/activate
, portanto, nosso comando é:
source teste/bin/activate
Notem que já não estamos mais na home da nossa interface, no meu caso, do Ubuntu. Agora estamos no ambiente virtual "teste", que acabamos de criar.
Uma das coisas que trabalharemos ao longo desse curso é a automatização de tarefas e processos, principalmente aquelas relacionadas à construção de projetos. Estamos começando com a criação de um ambiente virtual porque podemos usar um script em Python para tornar mais simples esse processo de criação de ambientes virtuais.
Ao invés de termos que ficar digitando comando a comando para criarmos esses ambientes virtuais, o que pode ser ainda mais complexo. Por exemplo, podemos precisar instalar as dependências para um projeto que será executado dentro desse ambiente virtual.
Por exemplo, ao acessarmos o projeto "dash", no GitHub da Alura, encontramos um projeto baseado no framework Flask. Esse projeto é uma modificação do framework Flask, chamado de "Dash".
O Dash possibilita a visualização e a interação com dashboards, permitindo que consigamos visualizar modelos estatísticos. Esse projeto foi construído especificamente visualizar alguns modelos de machine learning (aprendizagem de máquina). Como sabemos, machine learning envolve muita estatística, portanto, conseguimos visualizar estatística e graficamente os dados.
Analisando a pasta desse projeto, encontramos o arquivo requirements.txt
. Clicando nesse arquivo, encontramos todas as dependências necessárias para a boa execução do Dash. Agora que já temos um ambiente virtual criado, se tivéssemos que prepará-lo para a execução desse projeto, teríamos que ir instalando cada uma das dependências necessárias:
plotly==5.19.0
ucimlrepo==0.0.3
pandas==2.2.0
dash==2.15.0
scikit-learn==1.4.1.post1
xgboost==2.0.3
dash-bootstrap-components==1.0.0
Para tornar isso mais prático, poderíamos construir uma ferramenta que cria esse ambiente onde informamos a localização do diretório do projeto, e que as dependências necessárias para ele funcionar, e que precisam ser instaladas, estão em um arquivo .txt
. Podemos fazer isso usando um script do Pyton.
Para começarmos, precisamos pensar nas etapas que precisamos cumprir para que esse processo ser concluído com êxito, o chamado pensamento algorítmico. A partir desse pensamento mais analítico, constatamos quais etapas que devemos realizar e partimos para a construção do código propriamente dito.
Retornando para nossa interface de linha de comando, para sairmos do ambiente virtual, usamos o comando deactivate
. Assim voltamos para a o início da interface.
Podemos começar a construir esse script, nesse caso, usaremos o editor de texto padrão do Ubuntu: o Nano. Ao executarmos o comando nano
no Ubunu, acessamos o editor de texto.
O primeiro passo ao construirmos um script em Python é identificar quais as bibliotecas que utilizaremos nessa construção. Nesse curso, usaremos três bibliotecas, que vão nos permitir a interação direta com o sistema operacional, incluindo a realização de alguns comandos no sistema.
Bibliotecas que utilizaremos:
- OS
- Subprocess
- Sys
Primeiramente escreveremos o comando import os
, que fornecerá as funções para a interação com o sistema operacional. Depois o import subprocess
, que nos permite realizar alguns subprocessos no sistema. Por fim, o import sys
.
Completaremos esse script no próximo vídeo.
Continuaremos escrevendo um script para automatizar a criação de ambiente virtual e instalar todas as dependências necessárias para a execução de um projeto. Já importamos as bibliotecas e agora começamos a implementar as funções.
Na função principal (def main()
), nosso primeiro passo será solicitar que a pessoa usuária informe algum tipo de argumento com o caminho do diretório do projeto para o qual ela deseja criar esse ambiente virtual. Espera-se que a pessoa, ao executar este script usando Python, porque é a linguagem do nosso script, passe o python3 nome_do_script
e um path (caminho) para o diretório do projeto.
Portanto, faremos a coleta da primeira variável, que definiremos como diretorio_projeto
. Esta variável será igual ao argumento informado pela pessoa usuária, e extrairemos essa informação com a função sys.argv[]
da biblioteca sys
. Entre os colchetes, passaremos o número 1
, ou seja, passaremos o primeiro argumento informado pela pessoa usuária.
import os
import subprocess
import sys
def main():
diretorio_projeto = sys.argv[1]
Após essa variável, verificaremos se esse diretório tem arquivo requirements.txt
. Armazenaremos esse arquivo na variável requirements_file
, seguindo a mesma nomenclatura que estamos adotando.
Mais uma vez, usaremos uma função das bibliotecas que importamos: os.path.join()
. Nos parênteses, passaremos dois parâmetros: o diretorio_projeto
, onde ele buscará o arquivo, e o arquivo 'requirements.txt'
, que deve estar no diretório do projeto.
import os
import subprocess
import sys
def main():
diretorio_projeto = sys.argv[1]
requirements_file = os.path.join(diretorio_projeto, 'requirements_txt')
Definimos essas duas primeiras variáveis que usaremos neste script. Agora precisaremos implementar duas funções: uma para criar um ambiente virtual e outra para instalar as dependências dentro desse ambiente.
Dentro dessas funções, faremos algumas verificações, por exemplo, se o caminho do diretório é válido e se o requirements.txt
existe. Se não existir, informaremos à pessoa usuária.
Começaremos com a função para criar o ambiente virtual, e chamaremos de criar_ambiente()
. Como parâmetro dessa função, passaremos o diretorio_projeto
, a variável que acabamos de criar. Abaixo dela, criaremos a função instalar_dependencias()
, passando como parâmetro o diretorio_projeto
e a variável requirements_file
.
# código omitido
def main():
diretorio_projeto = sys.argv[1]
requirements_file = os.path.join(diretorio_projeto, 'requirements_txt')
criar_ambiente(diretorio_projeto)
instalar_dependencias(diretorio_projeto, requirements_file)
Atenção: Como a interface do Nano não é muito amigável, precisamos tomar cuidado com a digitação do código. Qualquer erro de digitação também será um erro na execução do script.
Após criarmos as funções, podemos começar a implementá-las. Começando pela função criar_ambiente
, cima da def main()
, escreveremos def criar_ambiente(diretorio):
.
Dentro dessa função, o primeiro passo é verificar se o caminho do diretório é válido, codando if not os.path.exists(diretorio_projeto)
. Ou seja, se esse caminho for inválido, usaremos a função os.path.exists()
, que vem da biblioteca os
, passando o diretório como parâmetro. Se for confirmado que o diretório não existe, usaremos um print()
para reportar isso para pessoa usuária. Por fim, finalizamos o if
com um return
.
def criar_ambiente(diretorio_projeto):
if not os.path.exists(diretorio_projeto):
print("O diretorio informado não existes")
return
A próxima tarefa dentro da criar_ambiente
é criar um caminho para o ambiente virtual, então criaremos uma variável chamada venv_path
que recebe a função os.path.join()
. Como argumentos, passaremos primeiro o diretorio_projeto
e depois o termo 'venv'
. Este será o nome do ambiente virtual que criaremos.
venv_path = os.path.join(diretorio_projeto, 'venv')
Em seguida, verificaremos se já existe um ambiente virtual com esse nome, usando mais um if
:
if os.path.exists(venv_path):
print("O ambiente virtual já existe")
return
Informamos o nome da variável que acabamos de criar para verificar a existência do ambiente virtual. Caso exista, fazemos um print("O ambiente virtual já existe")
e, por fim, o return
.
Dica: O espaçamento maior dentro da função melhora a visibilidade do código.
A próxima tarefa é criar o ambiente virtual de fato. Para isso, codamos o try
e, dentro dele, usamos uma função da biblioteca subprocess
, a função run()
. Essa função roda um comando dentro da nossa máquina, e escrevemos como subprocess.run()
.
Nos parênteses, escreveremos primeiro colchetes ([]
) contendo a sequência de comandos para a criação de um ambiente virtual. O primeiro é o 'virtualenv'
. Normalmente chamamos de "venv", mas o comando é virtualenv
. Ainda nos parênteses, mas fora dos colchetes, terminamos a execução com check=True
.
subprocess.run(['virtualenv', venv_path], check=True)
Abaixo da linha da função, indicaremos para a pessoa usuária se o ambiente virtual foi criado, com um print("Ambiente criado com êxito")
. Por fim, caso ocorra algum tipo de erro na criação desse ambiente, usaremos o except subprocess.CalledProcessError as e:
.
Com essa função, indicamos para a pessoa usuária que ocorreu um erro e mostraremos quais erros ocorreram nesse processo. Sendo assim, também usaremos um print()
passando o f"Erro ao criar o ambiente: {e}"
. Dessa forma, além de indicar que houve um erro, indicamos qual o erro aconteceu, passando {e}
.
def criar_ambiente(diretorio_projeto):
if not os.path.exists(diretorio_projeto):
print("O diretorio informado não existes")
return
venv_path = os.path.join(diretorio_projeto, 'venv')
if os.path.exists(venv_path):
print("O ambiente virtual já existe")
return
try:
subprocess.run(['virtualenv', venv_path], check=True)
print("Ambiente criado com êxito")
except subprocess.CalledProcessError as e:
print(f"Erro ao criar o ambiente: {e}")
Já temos a função de criação do ambiente virtual implementada no script. A seguir, continuaremos a construção desse script com a implementação da função de instalação de dependência. Com isso, finalizaremos e revisaremos o que elaboramos.
O curso Scripting: automação de tarefas com Python e criação de Pipelines no Jenkins possui 141 minutos de vídeos, em um total de 45 atividades. Gostou? Conheça nossos outros cursos de Automação de processos em DevOps, ou leia nossos artigos de DevOps.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.