Implantação automática de código

Prefácio:
Plataformas de hospedagem de código como o Github fornecem uma função Webhooks. Toda vez que você pressiona o código, pode usá-lo para extrair automaticamente o código, o que pode reduzir o problema de implantar muito código.

  1. Webhooks

    O Webhooks é uma função fornecida pela plataforma de hospedagem de códigos. Para qualquer projeto, você pode definir uma URL e selecionar alguns eventos. Quando esses eventos são acionados (push, pull request, fork, etc.), a plataforma de hospedagem de códigos solicita automaticamente a URL. E traga alguns parâmetros necessários.

  2. Implementação (tome o GitHub como exemplo)

    1. Definir evento de seleção de URL de retorno de chamada

      Faça login no GitHub, crie um novo repositório, chamado testWebhooks, e clique em Configurações- > Webhooks- > Adicionar webhook

      1. A URL da carga útil é configurada como um endereço que pode ser acessado normalmente na máquina de teste. Por exemplo, index.php ou main.go em / www / e index.php é usado como exemplo abaixo, e o ambiente do servidor também é configurado, que pode ser acessado diretamente através de solicitações http. Para
      2. Tipo de conteúdo: A maneira como o POST carrega dados. Existem dois tipos de application / json e application / x-www-form-urlencoded no GitHub. Se você precisar usar os parâmetros solicitados no index.php definido acima, poderá escolher seu próprio método adequado. Você pode escolher um aqui
      3. Segredo: segredo, usado para verificação
    2. Adicionar chaves de implantação

      1. Duas chaves públicas

        1. Chave pública do usuário: as chaves SSH, autenticam a identidade do usuário, após adicionar a chave pública do usuário, têm permissões de leitura e gravação para todos os itens do usuário, utilizados para a máquina de desenvolvimento;
        2. Implantar chave pública: implante chaves, autorize o projeto, tenha permissões somente leitura e geralmente são usadas para servidores de produção ou teste.

        Referência: a diferença entre implantar chave pública e chave pública SSH em Coding

      2. Gerar chave pública

        Execute o seguinte comando no servidor

        sudo mkdir /var/www/.ssh
        //将目录 .ssh 的拥有者、所属组修改为 www-data
        sudo chown -R www-data:www-data /var/www/.ssh
        // 在 /var/www/.ssh 目录下生成密钥,同时将该密钥的拥有者、所属组修改为 www-data。在 Ubuntu 中,PHP 运行时的用户为 www-data,如果不修改,PHP 运行时的用户是读不到这个部署公钥的,也就拉不了代码了
        sudo -Hu www-data ssh-keygen -t rsa -C "[email protected]"
        

        Se você não tiver certeza de qual usuário usar quando o PHP do sistema estiver em execução, crie um arquivo PHP de teste test.php na máquina de teste e execute o seguinte

        // test.php
        <?php
            system("whoami");
        ?>
        
      3. Ver e adicionar a chave pública de implantação

        1. Exibir chave pública de implantação

          sudo cat /var/www/.ssh/id_rsa.pub
          
        2. Adicionar chave pública de implantação

          Clique em Configuração do projeto - > Implementar chaves - > Adicionar chave de implantação em sequência , cole a chave pública nela e clique em Adicionar chave para adicioná-la

    3. Preparar arquivo de gancho

      O arquivo index.php que pode ser acessado pelo URL de retorno de chamada definido anteriormente é o seguinte:

      <?php
        // 切换到项目目录,执行 git pull,加上 2>&1 会输出一些错误信息,便于调试
          shell_exec("cd /www/testWebhooks && git pull 2>&1");  
      ?>
      
    4. Clonar arquivo de projeto

      cd /www/
      sudo -Hu www-data git clone git地址
      

      Até o momento, toda vez que o código é enviado ao projeto, o servidor de teste o envia automaticamente para o servidor de teste.Se a solicitação não for bem-sucedida, talvez seja porque a chave de implantação e a pasta do projeto mencionadas acima não estão definidas para receber O usuário que buscou o script (arquivo index.php) enquanto estava em execução .

  3. Efeito

    Abra o projeto, clique na Configuração -> Webhooks , você pode ver apenas definir um URL de retorno, puxou o ponto inferior para as entregas recentes, tudo, mas ver o pedido é acionado eventos

    1. Solicitação

      1. Cabeçalhos: cabeçalhos de solicitação, que contêm algumas informações básicas;
      2. Carga útil: todas as informações que acionaram esse evento estão incluídas, incluindo nome do projeto, confirmação, nome do usuário etc. Se o arquivo de gancho no servidor precisar executar algumas operações avançadas, você poderá analisar este campo.
    2. Resposta

      1. Cabeçalhos: cabeçalhos de resposta
      2. Corpo: As informações retornadas do arquivo de gancho do servidor.As informações de saída de depuração podem ser gravadas no arquivo de gancho e você pode verificá-las aqui após a solicitação.

    O formato da carga útil enviada por cada evento é diferente.Para obter mais informações sobre a carga útil, consulte o documento oficial: Tipos de evento e cargas úteis

  4. Verifique quando o servidor extrai o código para evitar ataques maliciosos (o URL de retorno de chamada definido pode estar vazando e considerado uma solicitação)

    1. Ao adicionar Webhooks, a coluna Segredo é preenchida com uma sequência aleatória, como: testWebhooks

    2. O arquivo de função do gancho index.php é alterado para:

      <?php
      $secret = "testWebhooks";  //密钥,和 GitHub 上对应
      $path = "/var/www/html/Webhooks";  //服务器上的项目文件目录
      $signature = $_SERVER["HTTP_X_HUB_SIGNATURE"];  //获取散列字符串
      if($signature) {
          $rawPost = file_get_contents("php://input");  //获取收到的数据
          list($algo, $hash) = explode("=", $signature, 2);  //获取散列算法、散列值
          if ($hash === hash_hmac($algo, $rawPost, $secret)) {  //验证
      		shell_exec("cd /var/www/html/Webhooks && git pull 2>&1");
      		echo "代码拉取成功";
      	} else {
      	    echo "Secret 验证失败";
      	}
      } else {
          echo "请输入 Secret";
      }
      
    3. Nota:

      1. Cada vez que o evento é disparado, o GitHub usa o SHA-1 para fazer o hash dos dados enviados com o Secret para gerar uma sequência de hash, que precisa ser verificada no arquivo do gancho.

      2. Para outras plataformas de hospedagem de código, algumas não fornecem o campo Segredo e alguns Segredos são verificados diretamente no arquivo hook.Para uso específico, você precisa estudar as instruções oficiais.

Nota:

  1. Este artigo refere-se a: usar Webhooks para obter extração automática de código

  2. Se precisar reimprimir, indique a fonte: https://www.cnblogs.com/zhuchenglin/p/12757602.html

Acho que você gosta

Origin www.cnblogs.com/zhuchenglin/p/12757602.html
Recomendado
Clasificación