一、准备工作
拥有一个 GitHub 仓库
确保你的项目代码已经存储在一个 GitHub 仓库中。如果没有,先创建一个新的仓库并将本地代码推送到该仓库。
确定部署目标环境
例如,你的应用可能要部署到服务器(如 Linux 服务器)、云平台(如 AWS、Azure、Google Cloud 等)或者容器环境(如 Docker 容器)。了解目标环境的详细信息,包括访问方式(如 SSH 密钥、API 密钥等),这对于后续配置部署步骤至关重要。
编写必要的构建和部署脚本
根据你的项目类型(如 Python 项目可能需要setup.py
用于构建,Node.* 项目可能需要package.*on
中的脚本),编写构建脚本。
对于部署脚本,例如,如果要部署到服务器,可能需要编写一个deploy.sh
脚本,其中包含将构建好的文件传输到服务器并启动服务的步骤。如果是部署到云平台,可能需要使用相应的云平台 CLI 工具编写部署脚本。
二、创建 GitHub Acti* 工作流文件
在仓库中添加.github/workflows
目录
如果该目录不存在,在仓库的根目录下创建.github
目录,然后在其中创建workflows
目录。
创建工作流文件(例如deploy.yml
)
在.github/workflows
目录下创建一个新的.yml
(YAML)文件,文件名可以自定义,这里以deploy.yml
为例。
以下是一个简单的工作流文件示例,用于一个 Node.* 项目的构建和部署到服务器:
name: CI/CD Pipeline on: push: branches: - main # 可以修改为你想要触发工作流的分支,如'*'或'develop' jobs: build-and-deploy: runs - on: ubuntu - latest steps: - name: Checkout code uses: acti*/checkout@v3 - name: Setup Node.* uses: acti*/setup - node@v3 with: node - version: '18.x' # 根据你的项目需求修改Node.*版本 - name: Install dependencies run: npm install - name: Build project run: npm run build - name: Deploy to server uses: appleboy/ssh - action@v0.1.4 with: host: ${{ secrets.SERVER_HOST }} # 从仓库 Secrets中获取服务器主机地址 username: ${{ secrets.SERVER_USERNAME }} # 从仓库 Secrets中获取服务器用户名 key: ${{ secrets.SERVER_SSH_KEY }} # 从仓库 Secrets中获取SSH密钥 script: | cd /path/to/deployment/directory # 修改为服务器上的部署目录 tar -xzf build.tar.gz # 假设构建后的文件打包为build.tar.gz,根据实际情况修改 pm2 restart app.* # 假设使用PM2启动应用,根据实际情况修改
- 在这个示例中:
name
定义了工作流的名称。on
部分指定了工作流的触发条件,这里是在main
分支有代码推送时触发。jobs
部分定义了一个名为build - and - deploy
的任务。runs - on
指定了任务运行的环境,这里是*的 Ubuntu 环境。- 每个
steps
部分的name
是步骤名称,uses
表示使用已有的 GitHub Acti* 动作,run
表示执行自定义的命令。例如,acti*/checkout@v3
用于检出代码,acti*/setup - node@v3
用于设置 Node.* 环境,后续的npm
命令用于安装依赖、构建项目,*使用appleboy/ssh - action@v0.1.4
通过 SSH 连接到服务器并执行部署脚本。 - 三、配置敏感信息(Secrets)
- 访问仓库的 Settings - > Secrets
- 在 GitHub 仓库页面,点击
Settings
,然后在左侧菜单中选择Secrets
。 - 添加敏感信息
- 例如,对于上面的示例,需要添加
SERVER_HOST
(服务器主机地址)、SERVER_USERNAME
(服务器用户名)和SERVER_SSH_KEY
(SSH 密钥)。这些信息是保密的,通过 Secrets 存储可以避免在工作流文件中直接暴露敏感数据。
- 在工作流文件中引用 Secrets
- 在工作流文件中,使用
${{ secrets.SECRET_NAME }}
的格式来引用存储的 Secrets,如上面示例中的${{ secrets.SERVER_HOST }}
等。
- 四、测试工作流
- 提交代码并触发工作流
- 在本地对代码进行一些修改,然后提交并推送到配置的分支(如
main
)。这将触发 GitHub Acti* 工作流的运行。
- 在本地对代码进行一些修改,然后提交并推送到配置的分支(如
- 查看工作流运行状态
- 在 GitHub 仓库的
Acti*
选项卡中,可以查看工作流的运行状态。它会显示每个步骤的执行情况,包括是否成功、失败或者正在运行。如果某个步骤出现问题,可以查看详细的日志来排查错误。
- 在 GitHub 仓库的