Maison >développement back-end >Problème PHP >Comment implémenter le déploiement automatisé git de scripts php

Comment implémenter le déploiement automatisé git de scripts php

藏色散人
藏色散人original
2022-01-11 09:40:422552parcourir

Comment implémenter le déploiement automatisé de scripts php : 1. Installez git ; 2. Clonez le code de l'entrepôt ; 3. Changez les autorisations Linux et modifiez la configuration ; 4. Ajoutez l'utilisateur www aux sudoers ; . Remplissez le nom de domaine du webhook, téléchargez le script php.

Comment implémenter le déploiement automatisé git de scripts php

L'environnement d'exploitation de cet article : système Linux5.9.8, Git version 2.30.0, ordinateur DELL G3

Comment implémenter le déploiement automatisé git de scripts php ?

git+php déployer un webhook automatisé scripts pour réaliser la synchronisation du code

Cet article présentera git+php pour déployer des scripts automatisés de webhook pour réaliser la synchronisation du code
Git avec le déploiement automatisé de webhook n'est pas une technologie sophistiquée, mais j'ai fait de nombreux détours lors de mon premier déploiement, je suis principalement considéré comme un novice sous Linux. Cet article enregistre les problèmes et les pièges sujets aux erreurs
Préparation
Déployer des noms de domaine Web accessibles, des scripts php côté serveur et des processus automatisés de code d'entrepôt cloud. dans l'environnement lnmp, local push->gitee Warehouse webhook->linux server php script pull

Créez d'abord un entrepôt sur gitee code cloud

Utilisez le protocole ssh pour communiquer avec l'entrepôt localement. Mon ordinateur local est Windows, je ne le ferai pas. présentez ici comment générer l'adresse publique ssh. Clé, qui sera introduite sous Linux ci-dessous

1. Installez git

yum install git

2 Clonez le code de l'entrepôt "Notez que vous devez utiliser le protocole ssh, le reste est basé sur ssh. "

git initgit clone git@gitee.com:zhuyanbin/HiAdmin.git

3. Changez les autorisations Linux et modifiez la configuration

Parce que nous Le webhook informe le serveur qu'il s'agit d'un accès externe, donc l'utilisateur administrateur ici est l'utilisateur www par défaut, donc www doit recevoir des autorisations suffisantes

vim /etc/passwd
添加下面的一行
www:x:1001:1001::/home/www:/bin/bash

1001 est l'identifiant du groupe d'utilisateurs, utilisez la commande suivante pour afficher l'identifiant de l'utilisateur www
cat /etc/group

Ajoutez l'utilisateur www aux sudoers et exécutez le shell sans mot de passe

#(1) Ajoutez l'autorisation d'écrire des sudoers dans le utilisateur actuel

chmod u+w /etc/sudoers

#(2) Modifier sudoers

vim /etc/sudoers

#(3) Recherchez Autoriser root à exécuter n'importe quelle commande n'importe où, écrivez le contenu suivant sous la ligne correspondante de l'utilisateur root :

www     ALL=(ALL)       NOPASSWD:/usr/bin/git

#(4) Reprendre l'autorisation d'écriture à sudoers

chmod u-w /etc/sudoers

Modifier la configuration de php-fpm.conf pour définir le visiteur, mon voici www, également C'est la configuration par défaut de phpComment implémenter le déploiement automatisé git de scripts php

4. Enfin générer la clé (cette étape doit soyez l'utilisateur www pour générer la clé, ps : je suis bloqué à cet endroit depuis deux jours et j'utilise le compte administrateur root pour la générer. Baidu a passé plusieurs jours, a essayé diverses méthodes, puis est passé au www. utilisateur pour générer la clé et tout était ok)Comment implémenter le déploiement automatisé git de scripts php
Générer la clé publique

mkdir -p /home/www/.ssh
chown -R www.www /home/www/.ssh
ssh-keygen -t rsa

Afficher la clé publique

cat /home/www/.ssh/id_rsa.pub

Copiez la clé publique générée dans la clé publique de l'entrepôt du cloud de code gitee Remplissez l'endroit

https://gitee. com/profile/sshkeys



Supplément : Il y a deux endroits où gitee peut remplir la clé publique. L'un est la clé publique de l'entrepôt. Si vous remplissez la clé publique de l'entrepôt, l'autorisation git côté serveur le sera. seulement l'autorisation pull, et l'autre est la clé publique du compte. Si vous remplissez la clé publique de votre compte personnel, vous aurez les autorisations pull, push et autres. J'utilise la clé publique du compte personnel directement iciComment implémenter le déploiement automatisé git de scripts php 5. . Enfin, remplissez le nom de domaine du webhook et téléchargez le script php
Remplissez le nom de domaine de l'adresse de notification du webhook (le paramètre de mot de passe est vide, il n'y aura pas de vérification du mot de passe en php plus tard, si vous pensez à la sécurité, veuillez définir le mot de passe plus tard)


Accédez au gestionnaire de script php hook.php (exécutez la commande Linux) Comment implémenter le déploiement automatisé git de scripts php

    chdir("/home/wwwroot/default/HiAdmin");
    exec("git pull origin master 2>&1", $out);
    foreach($out as $v)
    {
        echo iconv( 'GB2312','UTF-8', $v)."<br>";
    }

Ça y est, après avoir configuré le code du serveur ci-dessus, il peut être automatiquement synchronisé pour terminer le déploiement automatisé

Un problème est survenu

1. Le script php n'est pas exécuté

La raison en est que de nombreuses fonctions PHP dans php.ini ne sont pas ouvertes par défaut, y compris l'exécution de la fonction de script Linux exec() shell_exec(), etc.

Recherchez php.ini, recherchez les fonctions désactivées. et supprimez la fonction correspondante, ou commentez la ligne entière


2. Impossible d'exécuter la commande git pullComment implémenter le déploiement automatisé git de scripts php
Problème 1

La vérification de la clé de l'hôte a échoué.

fatal : impossible de lire à partir du référentiel distant.

Veuillez vous assurer vous disposez des droits d'accès corrects
et le référentiel existe.

归根结底还是因为linux权限的问题,我遇到的是出现一下问题
Comment implémenter le déploiement automatisé git de scripts php
到这里的原因是因为root生成git公钥密钥,而切换到www后生成公钥密钥后就成功了(上述第四小步生成公钥,一定使用www生成公钥密钥)

问题二

error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed

这个还是没有权限执行git命令,只需要执行以下

第一步:cd .git/objects  定位到git下的objects文件下
第二步: ls -al 查看git库的所有者(git用户 git组)
第三步: chown -R yourname:yourgrounp * 或者sudo chmod 777 -R .git/objects 提交

最后解决完以上问题,大功告成,上一张成功的截图
Comment implémenter le déploiement automatisé git de scripts php
自己的后端语言是php,这里可以用多种方式去实现执行linux脚本,nodejs,python等等

推荐学习:《PHP视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn