在实际项目中,你是否每次发布都需要手动登录服务器执行一系列繁琐的操作?手动构建镜像、手动登录仓库、手动拉取镜像、手动启动容器…这些重复性工作不仅耗时,还容易因为人为疏忽导致部署失败。
本文将以部署Next.js应用为例,手把手教你搭建完整的CI/CD流水线:通过GitHub Actions实现代码推送后自动构建Docker镜像,一键推送到腾讯云私有仓库,并在服务器上自动完成部署。整个过程完全自动化,开发者只需专注代码开发,部署全部由流水线自动完成。
# 准备工作
在开始配置之前,你需要准备以下内容:
- GitHub仓库:用于托管代码和配置Actions工作流
- 腾讯云账号:需要开通容器镜像服务TCR
- 服务器:用于运行Docker容器(需安装Docker)
# GitHub Actions工作流配置
# 创建工作流文件
在GitHub仓库的.github/workflows目录下创建build-docker.yml文件:
# build-docker.yml
# 填入到github的secrets中 https://github.com/test/repo/settings/secrets/actions
name: 构建和上传镜像到腾讯云私有镜像仓库
on:
push:
branches: [master]
jobs:
build-and-push:
runs-on: ubuntu-latest
env:
# 设置镜像名称,请根据你的实际情况修改
IMAGE_NAME: my-app
# 腾讯云镜像仓库命名空间,请替换为你的命名空间
TCR_NAMESPACE: test-hk
TZ: Asia/Shanghai # 在这里设置时区
REGISTRY: hkccr.ccs.tencentyun.com # 腾讯云镜像仓库地址
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Generate Docker image tag with timestamp
id: tag
run: |
# 验证时区设置
echo "当前时区:"
date
# 生成时间戳标签,格式为 2025-10-10-12-00-00(精确到秒)
TIMESTAMP=$(date +'%Y-%m-%d-%H-%M-%S')
echo "生成的时间戳: $TIMESTAMP"
echo "TIMESTAMP=$TIMESTAMP" >> $GITHUB_ENV
# 设置镜像标签,格式为 hkccr.ccs.tencentyun.com/命名空间/镜像名:时间戳
echo "IMAGE_TAG=${{ env.REGISTRY }}/${{ env.TCR_NAMESPACE }}/${{ env.IMAGE_NAME }}:$TIMESTAMP" >> $GITHUB_ENV
- name: Log in to Tencent Cloud Container Registry
uses: docker/login-action@v3
with:
# https://github.com/test/repo/settings/secrets/actions
# https://github.com/docker/login-action
# 腾讯云镜像仓库地址 https://console.cloud.tencent.com/tcr/repository/
registry: ${{ env.REGISTRY }}
username: ${{ secrets.TENCENT_USERNAME }}
password: ${{ secrets.TENCENT_PASSWORD }}
- name: Set up Docker Buildx
uses: