云效CI/CD教程(PHP项目)

参考文档

参考云效的官方文档https://help.aliyun.com/zh/yunxiao/

一、新建代码库

这是第一步,和码云的差不多

二、配SSH密钥

这个和码云,github上类似,都需要,云效的SSH密钥证书不是采用 RSA算法,而是采用了ED25519 算法

步骤一、先确认下,本地公钥文件是否生成

bash 复制代码
cd ~/.ssh/

没有看到ed25519证书

步骤二、生成基于ED25519算法的SSH密钥

使用ssh-keygen生成证书时,需要带上参数ed25519,后面就一路回车下去,不用去输入密码

bash 复制代码
ssh-keygen -t ed25519 -C "ali-yunxiao"

密钥生成在~/.ssh/id_ed25519.pub

步骤三、在云效codeup上设置公钥

进入https://codeup.aliyun.com的 个人设置,把公钥拷贝进来,公钥过期时间不用选择

提交

本地存在多个git平台密钥时,如何自动选择

当本地存在多个密钥,如果不设置认证规则,本机将随机选择一个密钥认证,可能造成认证失败。因此,需要把不同的密钥配置文件配置在 config文件中

验证码云:

plain 复制代码
ssh -T git@gitee.com

表示成功:

Hi 黄(@allen-huang)! You've successfully authenticated, but GITEE.COM does not provide shell access.

验证阿里云效:

plain 复制代码
ssh -T git@codeup.aliyun.com

Welcome to Codeup, hjc_042043

三、克隆项目

以ssh的方式clone项目,以laravel项目,SLConsole为例子

plain 复制代码
git clone git@codeup.aliyun.com:67f508b2228615de936e3d98/SLConsole/main.slconsole.com.git

如果存在现有项目代码(注意去掉.git目录),就把代码拷贝到这个项目下面去,并push上去,最后在云效提交的结果是这样子的。

四、构建流水线(CI/CD)

上面建立好仓库之后,就可以来创建流水线了,有了CI/CD机制这样子可以很方便的来发布和回滚代码,提高系统的稳定性。

步骤一、选择流水线模板

选择流水线模板,这里是PHP,然后点右下角的创建

步骤二、添加流水线源

这个都不用去动,会默认加载仓库地址,分支以及代码拉取的预存目录(工作目录)

注意,这个默认是在mastert提交后,自动发布到生产服务器,碍于很多时候是小项目开发,直接使用 master,可以关闭掉"开启代码源触发"

这个可以根据自己实际需求来,默认是开启的。

步骤三、构建PHP

这里是有测试环节先删除掉,暂时不需要测试

重新创建PHP构建

不选择PHP镜像构建

先删除失效的部分

选择PHP版本,因为我们用的是laravel10,所以用php8.1

构建物上传

步骤四、部署主机

1. 选择制品

勾选下载制品,和选择制品

2. 创建主机组

这一步很重要,主要是来配置目标服务器组,可以把代码发布过去,服务器可以是一个或多个

主机组可以根据不同的服务器环境来配置,可以是测试环境,预发布环境,正式环境

从服务器组点进去

选择服务器,保存

3.选择服务器组
4.部署脚本

代码在传输到服务器上时,是通过打包的方式传输过来,不是git的方式拉取。所以需要解压出来,在执行服务。部署脚本如下:

bash 复制代码
# 部署脚本会在部署组的每台机器上执行。一个典型脚本逻辑如下:先将制品包(在下载路径中配置的下载路径)解压缩到指定目录中,再执行启动脚本(通常在代码中维护,如示例中deploy.sh)。关于这个例子的详细解释见 https://help.aliyun.com/document_detail/153848.html 

# tar zxvf /home/admin/app/package.tgz -C /home/admin/app/
# sh /home/admin/app/deploy.sh restart
# 如果你是php之类的无需制品包的制品方式,可以使用git clone 或者 git pull将源代码更新到服务器,再执行其他命令 
# git clone ***@***.git

dir="/www/wwwroot/main.slconsole.com"
 
if [ ! -d "$dir" ]; then
    mkdir -p "$dir"
fi

tar -zxvf /home/admin/app/package.tgz -C $dir

# 把项目权限改成0755,所有者改成www
chmod -R 0755 $dir
chown -R www:www $dir


# 进入laravel项目目录
cd $dir

# 执行脚本,主要预处理的脚本,像composer包的安装,服务启动等
/bin/bash start_service_prod.sh >> /www/wwwlogs/main.slconsole.com_devops.log 2>&1 &

将部署脚本贴到这个框里面,并把下面分批数量改成1

步骤五、发布测试

最后流水线的变成这样子了

发布完成后的

常见问题

1、部署主机

如果需要部署到多主机时,一定需要注意的是,往往我们新的服务器,是从老的服务器镜像出来的,那么老的服务器都是已经安装过runner的,所以在新服务器在安装runner时,会报错类似 instance i-uf62plfssupo4bphyucf is already registerd as an ecs runner 的错误。是说明runner已经安装,这个是因为新的服务器包含了老的runner,所以先删除这个runner。

解决:

bash 复制代码
cd root
rm -rf yunxiao

2、如果存在多个阿里云效仓库如何clone 代码

在~/.ssh/config 文件中配置了云效的多仓库

在克隆代码时,不能再使用git@codeup.aliyun.com:xxx

而是要是用:

git@[$Host]:6759813cad056eaad2a2e966/bossim

如:

git@codeup-boss-server:6759813cad056eaad2a2e966/bossim

3、代码在合并到 master 之后自动触发流水线

这个最好不要自动触发流水线,因为我们很多一些小项目都是在 master分支上开发的,所以要是每次提交 git 都触发,那是比较危险的事情,代码会自动提交到远程服务器上去了

有两种方式来处理:

方法一:

方法二,在发布时,需要去手动触发一下

相关推荐
BingoGo15 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack15 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082854 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe4 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5