SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Aula 03 – Introdução ao CI/CD e Infraestrutura como Código
linkedin.com/in/guijac
guilherme.cruz@alumni.usp.br
Prof. Esp. Guilherme Jorge Aragão da Cruz
Curso de Verão:
DevOps
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Roteiro
▪ Revisitando DevOps
▪ Continuous Integration (CI);
▪ Continuous Delivery e Deployment (CD);
▪ Juntando as Peças: CI+CD;
▪ Gitlab Runner
▪ Definição e o arquivo .gitlab-ci.yml.
▪ Github Actions
▪ O arquivo YAML.
▪ Infraestrutura como Código (IaC)
▪ Definição, Importância e Ferramentas.
▪ Terraform
▪ Definição, Características e Comandos Básicos.
▪ Referências Bibliográficas;
▪ Laboratório.
2 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Bibliografia
▪Cultura na Engenharia de Software que aproxima as equipes
de desenvolvimento (Dev) e operadoras/administradoras de
sistemas (Ops);
▪Visa melhorar a comunicação dos dois papéis dentro de um
projeto e defender a automação e monitoramento de um
software.
Fonte: The industry is moving towards a single application for the DevOps lifecycle | GitLab
3 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Bibliografia
▪Cultura na Engenharia de Software que aproxima as equipes
de desenvolvimento (Dev) e operadoras/administradoras de
sistemas (Ops);
▪Visa melhorar a comunicação dos dois papéis dentro de um
projeto e defender a automação e monitoramento de um
software.
Fonte: The industry is moving towards a single application for the DevOps lifecycle | GitLab
PyUnit
Management
Console
4 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Continuous Integration (CI)
▪A partir da entrega de um novo código (git push) realiza a
execução de testes automatizados;
▪Os testes e a geração do pacote (build) são realizados em
um “Servidor de CI“ (CI Server), visando antecipar a
descoberta de erros.
Fonte: CI/CD concepts | GitLab
5 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Continuous Delivery e Deployment (CD)
Fonte: Adaptado de CI/CD concepts | GitLab
▪ O código alterado é implantado
nos ambientes
de Desenvolvimento (Review),
Homologação (Staging) e
Produção:
▪ Implantação Manual = Continuous
Delivery;
▪ Implantação Automática =
Continuous Deployement.
▪ Podem ser executados testes
mais abrangentes (análise
estática e/ou dinâmica com foco
em segurança, por exemplo).
6 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Juntando as Peças: CI+CD
Fonte: Adaptado de CI/CD concepts | GitLab
7 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Gitlab Runner – Definição
▪Recurso do Gitlab que permite a execução de pipelines¹ para
um CI/CD da sua própria aplicação;
▪Permite a orquestração de todas as etapas para a
implantação da sua aplicação: build, testes e deploy.
¹ Termo derivado de Arquitetura de Computadores, consiste na técnica de hardware que permite que a CPU realize a busca de uma ou mais
instruções além da próxima a ser executada, criando uma fila de atividades, agrupadas por estágios (stages).
Fonte: GitLab CI/CD for Beginners [FREE Course] - DEV Community
8 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Gitlab Runner – O Arquivo .gitlab-ci.yml
▪ Arquivo YAML (YAML Ain't Markup Language) que especifica
as instruções para a execução da pipeline através do Gitlab
Runner;
▪ O arquivo deve ser salvo na raiz do projeto sempre com o
nome .gitlab-ci.yml;
▪ Possui uma série de palavras-chave para diversas situações
de uso, como acionamento em branches especificas;
▪ A sintaxe completa do arquivo pode ser consultada na
documentação de referência e seu preenchimento pode ser
validado no Editor de Pipelines do Gitlab ou através de uma
extensão do VSCode.
Arquivo .gitlab-ci.yml que executa um stage chamado “test-job” exibindo o valor informado a partir do comando “echo”
dentro da interface gráfica do Gitlab (menu CI/CD > Pipelines > Jobs).
test-job:
stage: test
script:
- echo "This job tests something"
9 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Gitlab Runner – O Arquivo .gitlab-ci.yml
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- echo "This job tests something"
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
Arquivo .gitlab-ci.yml com quatro stages, também realizando apenas a impressão dos comandos definidos dentro do bloco
“script” na interface gráfica do Gitlab.
10 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Github Actions – O Arquivo .gitlab-ci.yml
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- echo "This job tests something"
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
Arquivo .gitlab-ci.yml com quatro stages, também realizando apenas a impressão dos comandos definidos dentro do bloco
“script” na interface gráfica do Gitlab.
11 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Infraestrutura como Código – Definição
RED HAT (2022)
– Infraestrutura como código (IaC) refere-se ao
gerenciamento e provisionamento da infraestrutura
por meio de códigos, em vez de processos manuais. A
sigla vem do termo em inglês, "Infrastructure as
Code".
– Nesta abordagem, arquivos de configuração que
incluem as especificações da sua infraestrutura são
criados, facilitando a edição e a distribuição das suas
configurações.
12 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Infraestrutura como Código – Importância
▪ Forma de Gerenciamento de Configuração,
documentando todas as alterações de
infraestrutura, com apoio de um sistema de
controle de versão, como o Git.
Fonte: Infrastructure as Code (IaC) - A Developer’s Perspective (ssl2buy.com)
13 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Infraestrutura como Código – Importância
▪ Parte fundamental para a implementação das
práticas de integração e entrega contínuas (CI/CD);
▪ Favorece a colaboração entre as equipes de
desenvolvimento e de operações.
Fonte: Infrastructure as Code (IaC) - A Developer’s Perspective (ssl2buy.com)
14 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Infraestrutura como Código – Ferramentas
Fonte: Infrastructure as Code: Benefits, Types, and Tools | AltexSoft
15 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Infraestrutura como Código – Importância
▪ Possibilita o provisionamento de infraestrutura
através de uma linguagem de configuração de alto
nível, a Hashicorp Configuration Language (HCL);
▪ Oferece compatibilidade com diversos provedores
da nuvem, como Amazon Web Services (AWS),
Google Cloud Plataform (GCP), Microsoft Azure,
entre outros.
Fonte: Infrastructure Provisioning (hashicorp.com)
16 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Terraform – Características: Variáveis
▪ Utiliza-se de alguns conceitos de linguagens de
programação, tais como variáveis, que podem ser
tipadas como “string”, “number”, “bool” ou mesmo
tipos complexos, como “maps” (estrutura do tipo
chave-valor).
variable "region" {
type = string
default = "us-east-1"
}
variable "s3_name" {
type = string
}
variable "account_name" {
type = "map"
default = {
"account1" = "devops1"
"account2" = "devops2"
}
}
17 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Terraform – Características: Módulos e Recursos
▪ Organiza-se através de módulos (modules), que
podem possuir diversos recursos (resources), sendo
este o elemento base do Terraform, onde cada
bloco de recurso descreve um ou mais objetos de
uma infraestrutura.
resource "aws_s3_bucket" "this" {
bucket = var.s3_name
}
resource "aws_s3_bucket_acl" "this" {
bucket = aws_s3_bucket.this.id
acl = "private"
}
18 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Terraform – Características: State
• Armazena o estado (state) sobre a sua
infraestrutura gerenciada e configuração. Este
estado é utilizado para determinar quais
alterações irão ocorrer em uma determinada
infraestrutura (em caso de reexecução de uma
pipeline, por exemplo);
• O estado é armazenado em um backend, que no
Gitlab é do tipo “HTTP” e autogerenciado.
terraform {
backend "http" {
}
}
19 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Terraform – Comandos Básicos
.gitlab-ci.yml
Fonte: Terraform Command Basics - STACKSIMPLIFY (terraformguru.com)
include:
- template: Terraform/Base.gitlab-ci.yml
stages:
- validate
- build # terraform plan
- deploy # terraform apply
- cleanup # terraform destroy
20 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Referências Bibliográficas
ATLASSIAN. Infraestrutura como código. Disponível em
https://www.atlassian.com/br/microservices/cloud-computing/infrastructure-as-code. Acesso em 14 mar
2023;
FOWLER, Martin. Continuous Integration. Disponível em
https://martinfowler.com/articles/continuousIntegration.html. Acesso em 10 mar 2023;
GITHUB. Workflow syntax for GitHub Actions. Disponível em https://docs.github.com/en/actions/using-
workflows/workflow-syntax-for-github-actions. Acesso em 29 jun 2023;
GITLAB. CI/CD concepts. Disponível em https://docs.gitlab.com/ee/ci/introduction/. Acesso em 25 mai
2023;
HASHICORP. What is Infrastructure as Code with Terraform? Disponível em
https://developer.hashicorp.com/terraform/tutorials/aws-get-started/infrastructure-as-code. Acesso em
14 mar 2023;
HUMBLE, Jez; FARLEY, David. Continuous delivery: reliable software releases through build, test, and
deployment automation. Pearson Education, 2010;
KIM, Gene et al. The DevOps handbook: How to create world-class agility, reliability, & security in
technology organizations. IT Revolution, 2021.
21 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Por hoje (de teoria) é só!
linkedin.com/in/guijac
guilherme.jacruz@sp.senac.br
Prof. Esp. Guilherme Jorge Aragão da Cruz
Fonte: Adaptado de CI/CD concepts | GitLab
22 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Laboratório 1
▪ Primeira pipeline no Gitlab com execução de testes
unitários;
▪ Utilizar o projeto base flask-docker ou outro projeto
próprio em Python;
▪ Criar um arquivo .gitlab-ci.yml (página 10) no projeto
criado;
▪ Utilizar um Runner do Gitlab;
▪ Editar o arquivo .gitlab-ci.yml contemplando a execução
dos testes unitários com PyUnit e validar nossa pipeline.
▪ Referência: lab-devops/projetos-gitlab/flask-gitlab-ci at
main · guijac/lab-devops · GitHub
23 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Laboratório 2
▪ Construção de uma pipeline para provisionamento de um
bucket S3[1];
▪ Construção de uma pipeline para publicação de um site
estático com HTML no bucket S3 criado[2];
▪ [1] Referência: lab-devops/projetos-gitlab/s3-terraform-
gitlab-ci at main · guijac/lab-devops · GitHub;
▪ [2] Referência: lab-devops/projetos-gitlab/s3-gitlab-ci-
portal-rhcp at main · guijac/lab-devops · GitHub.
24 de 25
http://linkedin.com/in/guijac
linkedin.com/in/guijac
Por hoje (agora sim) é só!
linkedin.com/in/guijac
guilherme.jacruz@sp.senac.br
Prof. Esp. Guilherme Jorge Aragão da Cruz
Fonte: Adaptado de CI/CD concepts | GitLab
25 de 25
http://linkedin.com/in/guijac

Mais conteúdo relacionado

Semelhante a Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código

Apresentação Gerpro
Apresentação GerproApresentação Gerpro
Apresentação Gerprorafahreis
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias WebRildo Pragana
 
Como aplicar práticas DevOps em um sistema monólito
Como aplicar práticas DevOps em um sistema monólito Como aplicar práticas DevOps em um sistema monólito
Como aplicar práticas DevOps em um sistema monólito Anderson Silveira
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android EmbarcadoOdair Sousa
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Denis Santos
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
DevQA | Da zona de conforto ao comprometimento com a qualidade
DevQA | Da zona de conforto ao comprometimento com a qualidadeDevQA | Da zona de conforto ao comprometimento com a qualidade
DevQA | Da zona de conforto ao comprometimento com a qualidadeKamilla Queiroz Xavier
 
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...tdc-globalcode
 
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...Erick Bonnemasou Jaccoud
 
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...tdc-globalcode
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlManuel Lemos
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETRenato Groff
 
Migrations com Entity Framework Core
Migrations com Entity Framework CoreMigrations com Entity Framework Core
Migrations com Entity Framework CoreCaio Lorensetti
 

Semelhante a Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código (20)

Apresentação Gerpro
Apresentação GerproApresentação Gerpro
Apresentação Gerpro
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias Web
 
Como aplicar práticas DevOps em um sistema monólito
Como aplicar práticas DevOps em um sistema monólito Como aplicar práticas DevOps em um sistema monólito
Como aplicar práticas DevOps em um sistema monólito
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android Embarcado
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
DevQA | Da zona de conforto ao comprometimento com a qualidade
DevQA | Da zona de conforto ao comprometimento com a qualidadeDevQA | Da zona de conforto ao comprometimento com a qualidade
DevQA | Da zona de conforto ao comprometimento com a qualidade
 
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
 
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
 
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
 
Gitlab CI/CD com python
Gitlab CI/CD com pythonGitlab CI/CD com python
Gitlab CI/CD com python
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
 
Migrations com Entity Framework Core
Migrations com Entity Framework CoreMigrations com Entity Framework Core
Migrations com Entity Framework Core
 

Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código

  • 1. Aula 03 – Introdução ao CI/CD e Infraestrutura como Código linkedin.com/in/guijac guilherme.cruz@alumni.usp.br Prof. Esp. Guilherme Jorge Aragão da Cruz Curso de Verão: DevOps http://linkedin.com/in/guijac
  • 2. linkedin.com/in/guijac Roteiro ▪ Revisitando DevOps ▪ Continuous Integration (CI); ▪ Continuous Delivery e Deployment (CD); ▪ Juntando as Peças: CI+CD; ▪ Gitlab Runner ▪ Definição e o arquivo .gitlab-ci.yml. ▪ Github Actions ▪ O arquivo YAML. ▪ Infraestrutura como Código (IaC) ▪ Definição, Importância e Ferramentas. ▪ Terraform ▪ Definição, Características e Comandos Básicos. ▪ Referências Bibliográficas; ▪ Laboratório. 2 de 25 http://linkedin.com/in/guijac
  • 3. linkedin.com/in/guijac Bibliografia ▪Cultura na Engenharia de Software que aproxima as equipes de desenvolvimento (Dev) e operadoras/administradoras de sistemas (Ops); ▪Visa melhorar a comunicação dos dois papéis dentro de um projeto e defender a automação e monitoramento de um software. Fonte: The industry is moving towards a single application for the DevOps lifecycle | GitLab 3 de 25 http://linkedin.com/in/guijac
  • 4. linkedin.com/in/guijac Bibliografia ▪Cultura na Engenharia de Software que aproxima as equipes de desenvolvimento (Dev) e operadoras/administradoras de sistemas (Ops); ▪Visa melhorar a comunicação dos dois papéis dentro de um projeto e defender a automação e monitoramento de um software. Fonte: The industry is moving towards a single application for the DevOps lifecycle | GitLab PyUnit Management Console 4 de 25 http://linkedin.com/in/guijac
  • 5. linkedin.com/in/guijac Continuous Integration (CI) ▪A partir da entrega de um novo código (git push) realiza a execução de testes automatizados; ▪Os testes e a geração do pacote (build) são realizados em um “Servidor de CI“ (CI Server), visando antecipar a descoberta de erros. Fonte: CI/CD concepts | GitLab 5 de 25 http://linkedin.com/in/guijac
  • 6. linkedin.com/in/guijac Continuous Delivery e Deployment (CD) Fonte: Adaptado de CI/CD concepts | GitLab ▪ O código alterado é implantado nos ambientes de Desenvolvimento (Review), Homologação (Staging) e Produção: ▪ Implantação Manual = Continuous Delivery; ▪ Implantação Automática = Continuous Deployement. ▪ Podem ser executados testes mais abrangentes (análise estática e/ou dinâmica com foco em segurança, por exemplo). 6 de 25 http://linkedin.com/in/guijac
  • 7. linkedin.com/in/guijac Juntando as Peças: CI+CD Fonte: Adaptado de CI/CD concepts | GitLab 7 de 25 http://linkedin.com/in/guijac
  • 8. linkedin.com/in/guijac Gitlab Runner – Definição ▪Recurso do Gitlab que permite a execução de pipelines¹ para um CI/CD da sua própria aplicação; ▪Permite a orquestração de todas as etapas para a implantação da sua aplicação: build, testes e deploy. ¹ Termo derivado de Arquitetura de Computadores, consiste na técnica de hardware que permite que a CPU realize a busca de uma ou mais instruções além da próxima a ser executada, criando uma fila de atividades, agrupadas por estágios (stages). Fonte: GitLab CI/CD for Beginners [FREE Course] - DEV Community 8 de 25 http://linkedin.com/in/guijac
  • 9. linkedin.com/in/guijac Gitlab Runner – O Arquivo .gitlab-ci.yml ▪ Arquivo YAML (YAML Ain't Markup Language) que especifica as instruções para a execução da pipeline através do Gitlab Runner; ▪ O arquivo deve ser salvo na raiz do projeto sempre com o nome .gitlab-ci.yml; ▪ Possui uma série de palavras-chave para diversas situações de uso, como acionamento em branches especificas; ▪ A sintaxe completa do arquivo pode ser consultada na documentação de referência e seu preenchimento pode ser validado no Editor de Pipelines do Gitlab ou através de uma extensão do VSCode. Arquivo .gitlab-ci.yml que executa um stage chamado “test-job” exibindo o valor informado a partir do comando “echo” dentro da interface gráfica do Gitlab (menu CI/CD > Pipelines > Jobs). test-job: stage: test script: - echo "This job tests something" 9 de 25 http://linkedin.com/in/guijac
  • 10. linkedin.com/in/guijac Gitlab Runner – O Arquivo .gitlab-ci.yml build-job: stage: build script: - echo "Hello, $GITLAB_USER_LOGIN!" test-job1: stage: test script: - echo "This job tests something" test-job2: stage: test script: - echo "This job tests something, but takes more time than test-job1." - echo "After the echo commands complete, it runs the sleep command for 20 seconds" - echo "which simulates a test that runs 20 seconds longer than test-job1" - sleep 20 deploy-prod: stage: deploy script: - echo "This job deploys something from the $CI_COMMIT_BRANCH branch." Arquivo .gitlab-ci.yml com quatro stages, também realizando apenas a impressão dos comandos definidos dentro do bloco “script” na interface gráfica do Gitlab. 10 de 25 http://linkedin.com/in/guijac
  • 11. linkedin.com/in/guijac Github Actions – O Arquivo .gitlab-ci.yml build-job: stage: build script: - echo "Hello, $GITLAB_USER_LOGIN!" test-job1: stage: test script: - echo "This job tests something" test-job2: stage: test script: - echo "This job tests something, but takes more time than test-job1." - echo "After the echo commands complete, it runs the sleep command for 20 seconds" - echo "which simulates a test that runs 20 seconds longer than test-job1" - sleep 20 deploy-prod: stage: deploy script: - echo "This job deploys something from the $CI_COMMIT_BRANCH branch." Arquivo .gitlab-ci.yml com quatro stages, também realizando apenas a impressão dos comandos definidos dentro do bloco “script” na interface gráfica do Gitlab. 11 de 25 http://linkedin.com/in/guijac
  • 12. linkedin.com/in/guijac Infraestrutura como Código – Definição RED HAT (2022) – Infraestrutura como código (IaC) refere-se ao gerenciamento e provisionamento da infraestrutura por meio de códigos, em vez de processos manuais. A sigla vem do termo em inglês, "Infrastructure as Code". – Nesta abordagem, arquivos de configuração que incluem as especificações da sua infraestrutura são criados, facilitando a edição e a distribuição das suas configurações. 12 de 25 http://linkedin.com/in/guijac
  • 13. linkedin.com/in/guijac Infraestrutura como Código – Importância ▪ Forma de Gerenciamento de Configuração, documentando todas as alterações de infraestrutura, com apoio de um sistema de controle de versão, como o Git. Fonte: Infrastructure as Code (IaC) - A Developer’s Perspective (ssl2buy.com) 13 de 25 http://linkedin.com/in/guijac
  • 14. linkedin.com/in/guijac Infraestrutura como Código – Importância ▪ Parte fundamental para a implementação das práticas de integração e entrega contínuas (CI/CD); ▪ Favorece a colaboração entre as equipes de desenvolvimento e de operações. Fonte: Infrastructure as Code (IaC) - A Developer’s Perspective (ssl2buy.com) 14 de 25 http://linkedin.com/in/guijac
  • 15. linkedin.com/in/guijac Infraestrutura como Código – Ferramentas Fonte: Infrastructure as Code: Benefits, Types, and Tools | AltexSoft 15 de 25 http://linkedin.com/in/guijac
  • 16. linkedin.com/in/guijac Infraestrutura como Código – Importância ▪ Possibilita o provisionamento de infraestrutura através de uma linguagem de configuração de alto nível, a Hashicorp Configuration Language (HCL); ▪ Oferece compatibilidade com diversos provedores da nuvem, como Amazon Web Services (AWS), Google Cloud Plataform (GCP), Microsoft Azure, entre outros. Fonte: Infrastructure Provisioning (hashicorp.com) 16 de 25 http://linkedin.com/in/guijac
  • 17. linkedin.com/in/guijac Terraform – Características: Variáveis ▪ Utiliza-se de alguns conceitos de linguagens de programação, tais como variáveis, que podem ser tipadas como “string”, “number”, “bool” ou mesmo tipos complexos, como “maps” (estrutura do tipo chave-valor). variable "region" { type = string default = "us-east-1" } variable "s3_name" { type = string } variable "account_name" { type = "map" default = { "account1" = "devops1" "account2" = "devops2" } } 17 de 25 http://linkedin.com/in/guijac
  • 18. linkedin.com/in/guijac Terraform – Características: Módulos e Recursos ▪ Organiza-se através de módulos (modules), que podem possuir diversos recursos (resources), sendo este o elemento base do Terraform, onde cada bloco de recurso descreve um ou mais objetos de uma infraestrutura. resource "aws_s3_bucket" "this" { bucket = var.s3_name } resource "aws_s3_bucket_acl" "this" { bucket = aws_s3_bucket.this.id acl = "private" } 18 de 25 http://linkedin.com/in/guijac
  • 19. linkedin.com/in/guijac Terraform – Características: State • Armazena o estado (state) sobre a sua infraestrutura gerenciada e configuração. Este estado é utilizado para determinar quais alterações irão ocorrer em uma determinada infraestrutura (em caso de reexecução de uma pipeline, por exemplo); • O estado é armazenado em um backend, que no Gitlab é do tipo “HTTP” e autogerenciado. terraform { backend "http" { } } 19 de 25 http://linkedin.com/in/guijac
  • 20. linkedin.com/in/guijac Terraform – Comandos Básicos .gitlab-ci.yml Fonte: Terraform Command Basics - STACKSIMPLIFY (terraformguru.com) include: - template: Terraform/Base.gitlab-ci.yml stages: - validate - build # terraform plan - deploy # terraform apply - cleanup # terraform destroy 20 de 25 http://linkedin.com/in/guijac
  • 21. linkedin.com/in/guijac Referências Bibliográficas ATLASSIAN. Infraestrutura como código. Disponível em https://www.atlassian.com/br/microservices/cloud-computing/infrastructure-as-code. Acesso em 14 mar 2023; FOWLER, Martin. Continuous Integration. Disponível em https://martinfowler.com/articles/continuousIntegration.html. Acesso em 10 mar 2023; GITHUB. Workflow syntax for GitHub Actions. Disponível em https://docs.github.com/en/actions/using- workflows/workflow-syntax-for-github-actions. Acesso em 29 jun 2023; GITLAB. CI/CD concepts. Disponível em https://docs.gitlab.com/ee/ci/introduction/. Acesso em 25 mai 2023; HASHICORP. What is Infrastructure as Code with Terraform? Disponível em https://developer.hashicorp.com/terraform/tutorials/aws-get-started/infrastructure-as-code. Acesso em 14 mar 2023; HUMBLE, Jez; FARLEY, David. Continuous delivery: reliable software releases through build, test, and deployment automation. Pearson Education, 2010; KIM, Gene et al. The DevOps handbook: How to create world-class agility, reliability, & security in technology organizations. IT Revolution, 2021. 21 de 25 http://linkedin.com/in/guijac
  • 22. linkedin.com/in/guijac Por hoje (de teoria) é só! linkedin.com/in/guijac guilherme.jacruz@sp.senac.br Prof. Esp. Guilherme Jorge Aragão da Cruz Fonte: Adaptado de CI/CD concepts | GitLab 22 de 25 http://linkedin.com/in/guijac
  • 23. linkedin.com/in/guijac Laboratório 1 ▪ Primeira pipeline no Gitlab com execução de testes unitários; ▪ Utilizar o projeto base flask-docker ou outro projeto próprio em Python; ▪ Criar um arquivo .gitlab-ci.yml (página 10) no projeto criado; ▪ Utilizar um Runner do Gitlab; ▪ Editar o arquivo .gitlab-ci.yml contemplando a execução dos testes unitários com PyUnit e validar nossa pipeline. ▪ Referência: lab-devops/projetos-gitlab/flask-gitlab-ci at main · guijac/lab-devops · GitHub 23 de 25 http://linkedin.com/in/guijac
  • 24. linkedin.com/in/guijac Laboratório 2 ▪ Construção de uma pipeline para provisionamento de um bucket S3[1]; ▪ Construção de uma pipeline para publicação de um site estático com HTML no bucket S3 criado[2]; ▪ [1] Referência: lab-devops/projetos-gitlab/s3-terraform- gitlab-ci at main · guijac/lab-devops · GitHub; ▪ [2] Referência: lab-devops/projetos-gitlab/s3-gitlab-ci- portal-rhcp at main · guijac/lab-devops · GitHub. 24 de 25 http://linkedin.com/in/guijac
  • 25. linkedin.com/in/guijac Por hoje (agora sim) é só! linkedin.com/in/guijac guilherme.jacruz@sp.senac.br Prof. Esp. Guilherme Jorge Aragão da Cruz Fonte: Adaptado de CI/CD concepts | GitLab 25 de 25 http://linkedin.com/in/guijac