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.
-
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.
-
Implementação (tome o GitHub como exemplo)
-
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
- 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
- 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
- Segredo: segredo, usado para verificação
-
Adicionar chaves de implantação
-
Duas chaves públicas
- 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;
- 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
-
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"); ?>
-
Ver e adicionar a chave pública de implantação
-
Exibir chave pública de implantação
sudo cat /var/www/.ssh/id_rsa.pub
-
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
-
-
-
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"); ?>
-
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 .
-
-
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
-
Solicitação
- Cabeçalhos: cabeçalhos de solicitação, que contêm algumas informações básicas;
- 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.
-
Resposta
- Cabeçalhos: cabeçalhos de resposta
- 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
-
-
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)
-
Ao adicionar Webhooks, a coluna Segredo é preenchida com uma sequência aleatória, como: testWebhooks
-
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"; }
-
Nota:
-
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.
-
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:
-
Este artigo refere-se a: usar Webhooks para obter extração automática de código
-
Se precisar reimprimir, indique a fonte: https://www.cnblogs.com/zhuchenglin/p/12757602.html