Так называемое автоматическое развертывание, как я понимаю, это средство для быстрого и автоматического развертывания кода на целевом сервере под предпосылкой пользователя, обеспечивающего качество кода.
Принцип реализации
Локальный push-код -> кодовая база -> сервер уведомлений веб-перехватчиков -> автоматически извлекать базовый код кода
Генерация и развертывание открытого ключа
Обратитесь к конкретным шагамНастроить открытый ключ SSH
1) Сгенерировать открытый ключ
# 使用给定的 email 生成 public/private rsa 密钥
# 如果使用非默认地址需要配置 .ssh/config
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
2) Добавить открытый ключ в кодирование
Развертывание вывода Gongyue
$ cat coding.pub
Разверните открытый ключ в разделе управления git.
3) Настройте файл конфигурации
редактировать~/.ssh/config
документ
Host git.coding.net
User xxxx@email.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/coding_rsa // 生成的非默认地址的公钥存放点
4) Проверьте, можете ли вы подключиться к серверу git@git.coding.net.
# 注意 git.coding.net 接入到 CDN 上所以会解析多个不同的 host ip
$ ssh -T git@git.coding.net
The authenticity of host 'git.coding.net (123.59.85.184)' can't be established.
RSA key fingerprint is 98:ab:2b:30:60:00:82:86:bb:85:db:87:22:c4:4f:b1.
Are you sure you want to continue connecting (yes/no)?
# 这里我们根据提示输入 yes
Warning: Permanently added 'git.coding.net,123.59.85.184' (RSA) to the list of known hosts.
Coding 提示: Hello duoli, You've connected to Coding.net via SSH. This is a deploy key.
duoli,你好,你已经通过 SSH 协议认证 Coding.net 服务,这是一个部署公钥
Настройка вебхуков
Разрешить кодовой базе уведомлять сервер о получении обновлений кода, когда кодовая база получает уведомление.
Этот способ веб-перехватчика для получения развертываемых запросов, запрос здесь используетpost
метод
php получить развертывание
Поскольку возможны перебои в обслуживании (например, время выполнения) при выполнении кода php-скрипта, что может не соответствовать действительности, для вызова планируется использовать скрипт.
Получить запрос -> сохранить в очереди -> очередь обработки монитора сценариев
Из-за использования фреймворка laravel после получения уведомления оно сохраняется в очереди, потому что очередь использует командную строку для мониторинга, поэтому прерывания при выполнении командной строки не будет.
Перед этим вам нужно настроить пользователя, который запускает код, чтобы он имел разрешение на доступ к серверу git, то есть, если ваш код начинается сwww-data
для запуска нужно использоватьwww-data
роль для доступаgit@git.coding.net
Сервер.В противном случае развертывание не может быть выполнено, так как ключ не соответствует и не имеет разрешения на получение содержимого.
1) Установка кода очередиapp/Jobs
<?php
namespace App\Jobs;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;
use Symfony\Component\Process\Process;
class WebDeploy extends Job implements SelfHandling, ShouldQueue
{
private $shellPath;
/**
* Create a new job instance.
*/
public function __construct()
{
$this->shellPath = dirname(dirname(__DIR__));
}
/**
* Execute the job.
* @return void
*/
public function handle()
{
if (!env('LM_DEPLOY_BRANCH')) {
echo 'ERR > ' . 'No branch Set'."\n";
}
$shell = "/bin/bash " . base_path('resources/shell/deploy.sh') . ' ' . base_path() . ' ' . env('LM_DEPLOY_BRANCH', 'master');
$process = new Process($shell);
$process->start();
$process->wait(function ($type, $buffer) {
if (Process::ERR === $type) {
echo 'ERR > ' . $buffer;
}
else {
echo 'OUT > ' . $buffer;
}
});
}
}
2) Активировать очередь
dispatch(new WebDeploy());
3) Разверните сценарий оболочки
#!/bin/bash
aim_path=$1
branch=$2
cd ${aim_path}
echo $PWD
/usr/bin/git pull origin ${branch} >/dev/null 2>&1
if [ $? -eq 0 ];then
echo "OK"
else
/usr/bin/git fetch -f
/usr/bin/git reset --hard
/usr/bin/git pull origin ${branch}
fi
4) Используйте супервизора для мониторинга выполнения очереди и задач очереди
местоположение файла/etc/supervisord.d/project.ini
[program:project_name]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/project/artisan queue:work --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
user=apache
numprocs=1
redirect_stderr=true
stdout_logfile=/webdata/logs/project.log
environment=QUEUE_DRIVER=database
Пункты к сведению
На изучение автоматизированного развертывания с коллегами ушло много времени, и до сих пор есть небольшие сомнения в том, что PHP компетентен для этой функции.Перед развертыванием в локальной сети можно добиться развертывания кода, но все остальное проверка времени не проходит.Я изменил этот метод и нашел способ запуска скрипта.По идее,неудачного выполнения не будет,пока я не увижу следующую ошибку:
OUT > /webdata/www/sour-lemon.com
ERR > Could not create directory '/usr/share/httpd/.ssh'.
ERR > Host key verification failed.
ERR > fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
потому что в настоящее времяshell
Работающий пользователь — apache, поэтому при вызове запрос будет называться apache, поэтому он отображаетсяCould not create directory '/usr/share/httpd/.ssh', поэтому рассмотрите возможность использования разрешений apache для настройки автоматического развертывания ssh.
Поскольку пользователю apache не разрешен вход в систему, вам необходимо сначала разрешить ему вход в систему, а затем установить соответствующий ключ ssh.
изменить файл/etc/passwd
Разрешить пользователю войти в систему
# 之前是 /sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/bin/bash
Затем переключитесь на пользователя apache, чтобы установить ключ ssh, который был протестирован и принят.
Справочная статья
- Отказано в доступе (открытый ключ) при доступе к Github
- Настроить открытый ключ SSH
- gist.github.com/jexch...Нажмите, чтобы просмотреть
- www.freebsd.org/cgi/m...
- help.github.com/artic...
- callmepeanut.blog.51ct...
- www.huamanshu.com/wall...
- walle-web.io/
- GitHub.com/Mooh Road/wall. …
- www.phptesting.org/in...