大家用jenkins部署laravel都是热更新吗?

每次部署都更新composer包吗?
jenkins要热更新有什么好的方案?
目前我方案是
构建时的操作

cd /var/www/html
php artisan down
rm -rf composer.lock
composer install

构建后的操作

cd /var/www/html
php artisan key:generate
supervisorctl reread
supervisorctl update
supervisorctl stop laravel-worker:*
supervisorctl start laravel-worker:*
php artisan up
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

你这个很硬,我没想通你为啥要删除 composer.lock。。。

我们公司用的 deployer。它是通过更换软链的方式来实现替代的。

比如说nginx 访问的目录是 curent。然后他会另外创建一个目录 1,然后在里面拉取代码,更新依赖,没有报错的话就会将 current 指向到 1。这样就实现了代码的热更新。

1年前 评论
mowangjuanzi (作者) 1年前
LXK (楼主) 1年前
Larva 1年前
讨论数量: 17

用过两次 Jenkins,现在改为 Drone。

Drone,功能简约、界面清爽、内存占用低、可靠性不错。

推荐。

1年前 评论
LXK (楼主) 1年前

你这个很硬,我没想通你为啥要删除 composer.lock。。。

我们公司用的 deployer。它是通过更换软链的方式来实现替代的。

比如说nginx 访问的目录是 curent。然后他会另外创建一个目录 1,然后在里面拉取代码,更新依赖,没有报错的话就会将 current 指向到 1。这样就实现了代码的热更新。

1年前 评论
mowangjuanzi (作者) 1年前
LXK (楼主) 1年前
Larva 1年前

用的rsync同步文件,基本2-3s能同步完

1年前 评论
LXK (楼主) 1年前

php项目还用得着Jenkins部署? 都没有进程 一行git pull就完事了

1年前 评论
xiaochong0302

我的开源项目:酷瓜云课堂 是这么操作的,码云搞个webhook,推送就自动更新,非常轻量级,小规模应用非常不错

webhook.php 内容如下:

<?php

$baseDir = '/root/ctc-docker';

$secret = 'xxx';

$branch = 'master';

$requestBody = file_get_contents('php://input');

if (empty($requestBody)) {
    header('HTTP/1.1 400 Bad Request');
    die('Bad Request');
}

$payload = json_decode($requestBody, true);

if (!isset($payload['timestamp']) || !isset($payload['sign'])) {
    header('HTTP/1.1 400 Bad Request');
    die('Invalid Payload');
}

$content = "{$payload['timestamp']}\n{$secret}";

$mySign = base64_encode(hash_hmac('sha256', $content, $secret, true));

if ($payload['sign'] != $mySign) {
    header('HTTP/1.1 403 Permission Denied');
    die('Permission Denied');
}

if ($payload['ref'] == "refs/heads/{$branch}" && $payload['total_commits_count'] > 0) {

    $result = shell_exec("bash {$baseDir}/upgrade.sh");

    echo $result;
}

upgrade.sh更新脚本内容如下:

#!/usr/bin/env bash

#docker目录
DOCKER_DIR=/root/ctc-docker

#ctc目录
CTC_DIR=${DOCKER_DIR}/html/ctc

#config.php
ctc_config_php=${CTC_DIR}/config/config.php

#静态文件版本号
static_version=$(date +%s)

#成功信息输出
success_print() {
  echo -e "\033[32m $1 \033[0m"
}

#失败信息输出
error_print() {
  echo -e "\033[31m $1 \033[0m"
}

if [ ! -d "${CTC_DIR}" ]; then
  error_print "\n------ ctc dir not existed ------\n"
fi

#拉取docker更新
cd ${DOCKER_DIR} && git pull --no-rebase

#拉取ctc源码更新
pull_result=$(cd "${CTC_DIR}" && git pull --no-rebase)

#更新静态资源版本号
sed -i "s/\$config\['static_version'\].*/\$config['static_version'] = '${static_version}';/g" "${ctc_config_php}"

docker exec -i ctc-php bash <<'EOF'

#切换到ctc目录
cd /var/www/html/ctc || exit

#安装依赖包
composer install --no-dev
composer dump-autoload --optimize

#数据迁移
vendor/bin/phinx migrate

#程序升级
php console.php upgrade

exit
EOF

success_print "\n------ upgrade finished -------\n"
1年前 评论
小李世界 1年前
xiaochong0302 (作者) 1年前
sunny123456 1年前
xiaochong0302 (作者) 1年前
sunny123456 1年前
xiaochong0302 (作者) 1年前

supervisorctl reload

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!