Flyway & Azure DevOps : Criando Release Pipeline
Tags: azure, sql, database, devops
Published: 2020-06-30 14:56:05

E vamos, enfim, criar o nosso *Deploy* continuo utilizando o Azure DevOps.

Se você não tem uma conta ainda, pode criar acessando esse [link](https://azure.microsoft.com/en-us/services/devops/?nav=min)

# Tópicos
* [Repositório GIT](#chapter-0)
* [Release Pipeline](#chapter-1)
* [Extensão do Flyway no Marketplace](#chapter-2)
* [Migração pelo Azure DevOps](#chapter-3)

## Repositório GIT <a name="chapter-0"></a>

Vamos criar o nosso projeto usando repositório GIT do serviço Repos do Azure DevOps.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/har6sj8u08i6cyv6ck57.png)


E vamos ir em *Repos > Files *.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/td5l4j3ssuuepkygnpsz.png)

Podemos iniciar nosso repositório.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/gney7f01gbg8p8she1qa.png)

E criar uma nova pasta. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/v05hxiaclbh8rppgzxcg.png)

Vamos chamá-la de *scripts* e vamos criar o arquivo *V2__SecoundScript.sql*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/6ruclv6imnyp0zdmommy.png)


E vamos adicionar o script abaixo no arquivo.

```
INSERT INTO Customers  (name,Priority ) VALUES ('Mr. T', 1);
INSERT INTO Customers  (name,Priority ) VALUES ('Bob', 5);
```

E podemos *commitar* na nossa *branch master*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/sx4yoe4vmddzxz29256l.png)

E agora, podemos adicionar ao nosso pipeline.

## Release Pipeline <a name="chapter-1"></a>

Vamos ir em *Pipelines > Releases*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lab9bk56y4d2tz5raw5g.png)

E vamos ir em *New Pipeline*.

Naã vamos selecionar um template. Usaremos o *empty job*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/vl6gvupx155wdavot3e3.png)

Vamos adicionar o nome de *Flyway Info* no primeiro *stage*.

E adicionar nosso artefato.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/dflp54vh4ylip3qepisf.png)

Vamos selecionar a opção *Azure Repos GIT*, o nosso projeto, repositório, a *branch master* e adicionar o nosso *alias* ao artefato.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/tcgm98ljvc8a8txm52r5.png)

Podemos agora editar o nosso *stage*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/aze60xkwt3kthtdzgwup.png)

## Extensão do Flyway no Marketplace <a name="chapter-2"></a>

Vamos adicionar uma nova tarefa e procurar por *flyway*.

E podemos ver a extensão abaixo. Precisamos instalar ela. Vamos ir em *Get it free* para adicionar ela a nossa organização do Azure DevOps.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/i4jls1gazd7ysy33z7ml.png)

E aqui podemos conferir que ainda está em *preview*. Mas vamos instalar ela. *Get it free*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/6a18ty26tm13n38wa9cc.png)

Vamos selecionar a nossa organização e clicar em *Install*.
Caso você utilize a versão *on-premise*  do Azure DevOps, pode baixar a extensão em *download*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/kf0sc0wd8acfogqapm57.png)

Podemos atualizar a nossa lista de tarefas do *agent job* e vemos 2 tarefas disponíveis: *Flyway CLI* e *Flyway Installer*.

Vamos incluir as duas no nosso agente.

Primeiro a tarefa *Installer*, onde devemos indicar a versão que queremos do nosso Flyway.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/zx9ower1ab8aku8fdbwj.png)

E depois, a tarefa *CLI*, onde vamos selecionar o comando *info* e vou indicar 3 variáveis a nossa tarefa: JDBC, password e user.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3s8j3zkh01eh2o9zgppa.png)

E vamos ir na aba *Variables* e criar as nossas variáveis.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/yyscd9nijk0flkh3cq6r.png)

E estamos prontos para rodar. Vamos alterar o nome do nosso pipeline, salvar e criar o nosso primeiro release.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/jj1yiq6b6v9yiqeg3nau.png)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/9miebhhip8b4xik0jk2g.png)

E vamos aguardar a execução.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/s9mdp1lxw2rcyk0tf98i.png)

E criou o release com sucesso!

Vamos ir em *Logs*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/svipzaqfbzgyqrv1kmji.png)

E vamos ir no log do *flyway info*.

o Flyway nos avisou que o primeiro script foi perdido e o segundo esta pendente para execução.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/4mnkxeclj9a2p1opd4iq.png)

Vamos fechar o *log*, editar o *Release Pipeline* e ativar a *trigger* de *Continuous Deployment*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/x5qod1vbf2hto8hxyprc.png)

E habilitar a *trigger*, incluindo a *branch master*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/zzl6zqqxh51rxddw8k4a.png)

Vamos salvar e ir no *Repos > Files*. Vamos fazer upload do nosso primeiro script  na pasta scripts.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ytz69xl3ggpog5ouhftr.png)

E *commitar* ele.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/gtztootodjkncher88bi.png)

Vamos ir em *Pipelines > Release* e veja que o nosso segundo release ja foi iniciado.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/4fvrs89noj0lwpwxin1m.png)

Depois de executa-lo, vamos novamente no *log* e verificar *flyway info*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/5xk7d6w6fi7ykv83tgfl.png)

E agora sim. O flyway identificou que o primeiro script rodou e estamos apenas pendente do segundo script.

Vamos editar o nome do nosso estagio.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/9xkiqr7brlfvk3ebfqi1.png)

E também editar o *agent job* do *stage*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/1zobilwn9kg6tuau5zxe.png)


## Migração pelo Azure DevOps <a name="chapter-3"></a>

Podemos clonar a tarefas *flyway info* e alterar o *command* para *migrate*, ficando como a imagem abaixo.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/trr31jd9truru0dnz2uo.png)

E agora, podemos salvar e gerar mais um *release*.

E gerou com sucesso. Podemos ir no Log e na tarefa *flyway migrate*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/4ardyicbdqyepqopui9w.png)

E vemos que executou com sucesso o nosso segundo script.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/4s7ld3cjnlqrar2tqlit.png)

E podemos conferir no *Query Editor* no nosso Azure SQL Database.

```
SELECT TOP (1000) * FROM [dbo].[Customers]
```

E lá está os 2 *Customers* adicionado no segundo script executado no Flyway diretamente do Release Pipeline do Azure DevOps.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/393attdiltg0u4cnjkpn.png)

:)