AndersonArruda

Artigos de tecnologia ao alcance de um clique!


Configurando Action Github - FTP SFTP
github action github ftp sftp workflow

Configurando Action Github - FTP SFTP

13/07/2022 11:42

Vamos aprender a como criar uma Action no Github para deploy automático através de um sftp/ftp.

Sei que a sftp/ftp andam arcaíco e em desuso mas é uma boa forma de introduzir vocês que me acompanham nesse blog ao mundo das Actions do Github.


Para isso irei utilizar esse aplicativo https://github.com/marketplace/actions/sftp-deploy


Ele irá servir para enviar para um servidor de teste que criei arquivos utilizando uma chave privada para se autenticar no SFTP.


Mas então o que é Github Actions?

É uma plataforma que serve para automatizar o fluxo de trabalho dos desenvolvedores. "Workflow"


Esse será o início de uma série onde aprofundarei cada vez mais o conhecimento sobre actions até que possamos construir um exemplo de CI / CD Pipeline com actions do Github próximos tutoriais falaremos sobre teste automatizados com actions, validação de issues antes do merge, outros tipos de deploy e muito mais.


Vamos criar uma action onde o gatilho "trigger" será o push.

Imagino que já tenha um repositório no Github, caso não tenha crie-o pois as actions estarão atreladas a um repositório.

Feito isso vamos começar a criar a action para SFTP.

Com seu repositório aberto clica na aba Actions, como na imagem abaixo.



Vamos iniciar um workflow extremamente simples utilizando o Simple Workflow by Github.



Vamos começar a configurar o arquivo yaml.

Caso não saiba muito sobre yaml tem esse tutorial em inglês que achei muito útil.

https://learnxinyminutes.com/docs/yaml/


Tem também as referências das sintaxe do workflow do Github no próprio Github.

https://docs.github.com/pt/actions/using-workflows/workflow-syntax-for-github-actions


Abaixo segue o meu arquivo yaml:

name: SFTP-Deploy
on:
  push:
    branches: [ "main" ]
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      -
        name: deploy
        uses: wlixcc/SFTP-Deploy-Action@v1.2.4
        with:
          username: 'usuario'
          server: 'ip_servidor'
          port: 2222
          ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}
          sftp_only: true
          local_pash: 'caminho_repositorio'
          remote_path: '/caminho/servidor'
          sftpArgs: '-o ConnectTimeout=20'


Vou explicar cada um dos argumentos que utilizei para que fique mais fácil e claro para replicar essa configuração e utilizá-la.


  • name: Nome da action
  • on: quando o evento irá ocorrer
  • push: o evento ocoerrá quando acontecer um push
  • branches: quais branches o evento é disparado
  • jobs: os serviços que ocorrerão quando o evento for disparado
  • deploy_job: um job que fará deploy do código
  • runs-on: Sistema operacional que rodará o evento, utilizei o ubuntu pois o evento é extremamente simples.
  • name: Esse name é do nome do job
  • uses: wlixcc/SFTP-Deploy-Action@v1.2.4 é o sistema que estamos utilizando para fazer o deploy, utilize sempre a versão mais recente, pode ver a documentação oficial aqui: https://github.com/marketplace/actions/sftp-deploy
  • with: dentro dessa sessão serão passados os parâmetros esperados pelo sistema que estamos utilizando, para ver os parâmetros possíveis verifique a documentação supra citada.
  • username: O nome do usuário do SFTP
  • server: ip ou hostname do servidor SFTP
  • port: A porta do servidor SFTP no meu caso é a porta 2222.
  • ssh_private_key: A chave privada ou o local onde encontra-se a chave privada, no caso da configuração supra citada utilizei o secrets do repositório que pode ser configurado em repo/settings/secrets onde SSH_PRIVATE_KEY é o name do secret adicionado no repositório. "Importante que o valor esteja no formato .pem"
  • sftp_only: Recebe true ou false, significa se é somente sftp, em caso de true não consegue criar pastas automáticamente.
  • local_path: Caminho local no repositório atual, existem várias possibilidades como citada na documentação oficial do sistema de sftp que estamos utilizando, vamos a alguns exemplos:
  • ./arquivo: Para enviar um arquivo único. "substituir a palavra arquivo pelo nome do arquivo"
  • ./diretorio/*: Para enviar todos os arquivos de um diretório específico. "substituir a palavra diretorio pelo nome do diretório"
  • ./*: Para enviar todos os arquivos do repositório.
  • remote_path: O diretório remoto ou seja do seu servidor SFTP onde será enviado os arquivos.
  • sftpArgs: Outros argumentos que queira usar no SFTP. Utilizei o ConnectTimeout=20 para que o tempo de expiração dos pedidos sejam de no máximo 20 segundos.


A action do github começando pelo SFTP foi a forma que encontrei para evoluir a cultura do fluxo de trabalho de um dos clientes da minha empresa, onde até o presente momento utiliza-se de SFTP e seus funcionários ainda acessam via SFTP, para poder forçar os funcionários a utilizarem o Github mitigando o acesso direto ao SFTP e o acesso sendo exclusivamente via Github Actions.


E quais a vantagens de fazer isso?

A grande vantagem é começar a criar uma cultura onde os funcionários passem a utilizar Git e Github, os códigos são matidos e versionados e abrem-se possibilidades futuras de Workflows mais robustos como CI/CD Pipeline.


Apesar de ser uma boa estratégia inicial, acabou que falhou pois o servidor é exclusivamente SFTP e quando é SFTP a action não consegue criar a pasta sozinha e não consegue suprir 100% a necessidade, por isso irei criar outro artigo explicando como fazer deploy de arquivos numa Google Cloud VM, se for FTP funciona muito bem.


Espero que esse artigo possa lhe ajudar.

Se puder compartilhe com seus amigos, vai ser de grande valia.

Até o próximo artigo!

Espaço para publicidade
0 Comentário(s)
Seja o primeiro a comentar o nosso artigo!
Todos os direitos reservados. © 2021-2031
SBBlog Powered By Powered By Sysborg | Powered By Anderson Arruda