• 作者:老汪软件技巧
  • 发表时间:2024-09-24 15:02
  • 浏览量:

本文将介绍如何使用 GitHub Actions 来实现 Go 项目的自动化构建和部署到阿里云服务器。这种方法可以大大简化部署流程,提高开发效率。

1. 创建工作流文件

首先,在 GitHub 仓库中创建 .github/workflows/deploy.yml 文件。这个文件定义了自动化部署的工作流程。

name: Deploy to Aliyun Server
on:
  workflow_dispatch:
    inputs:
      deployMessage:
        description: 'Deployment message'
        required: true
        default: 'Manual deployment triggered'
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Set up Go
      uses: actions/setup-go@v4
      with:
        go-version: '1.21'
    - name: Build
      run: go build -v ./...
    - name: Test
      run: go test -v ./...
    - name: Login to Aliyun Container Registry
      uses: docker/login-action@v2
      with:
        registry: 
        username: ${{ secrets.ALIYUN_CR_USERNAME }}
        password: ${{ secrets.ALIYUN_CR_PASSWORD }}
    
    - name: Generate config file
      run: |
        envsubst < configs/config.yaml.template > configs/config.yaml
      env:
        DB_USERNAME: ${{ secrets.DB_USERNAME }}
        DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
        DB_HOST: ${{ secrets.DB_HOST }}
        DB_NAME: ${{ secrets.DB_NAME }}
        JWT_SECRET: ${{ secrets.JWT_SECRET }}
    
    - name: Build and push Docker image
      uses: docker/build-push-action@v4
      with:
        context: .
        push: true
        tags: //blog-service:${{ github.sha }},//blog-service:latest
    - name: Deploy to Aliyun Server
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.ALIYUN_HOST }}
        username: ${{ secrets.ALIYUN_USERNAME }}
        key: ${{ secrets.ALIYUN_SERVER_SSH_KEY }}
        script: |
          docker login --username=${{ secrets.ALIYUN_CR_USERNAME }} --password=${{ secrets.ALIYUN_CR_PASSWORD }} 
          docker pull //blog-service:latest
          docker stop blog-service || true
          docker rm blog-service || true
          docker run -d --network my-network --name blog-service -p 8080:8080 --restart always //blog-service:latest

2. 配置工作流

工作流程包括以下主要步骤:

检出代码设置 Go 环境构建和测试 Go 项目登录到阿里云容器镜像服务生成配置文件构建 Docker 镜像并推送到阿里云容器镜像仓库通过 SSH 连接到阿里云服务器并部署

为了保护敏感信息,我们使用了 config.yaml.template 文件和环境变量。确保在 Dockerfile 中正确复制生成的配置文件:

COPY configs/config.yaml /root/configs/config.yaml

3. 设置密钥和环境变量

在 GitHub 仓库的 Settings -> Secrets and variables -> Actions 中添加以下密钥:

阿里定目标__阿里云服务器部署网站

4. 配置 Dockerfile

在项目根目录创建 Dockerfile:

# 构建阶段
FROM golang:1.21 as builder
WORKDIR /app
# 安装 Git(如果需要)
RUN apt-get update && apt-get install -y git
# 设置 Go 代理
ENV GOPROXY=https://goproxy.cn,direct
# 复制并下载依赖
COPY go.mod go.sum ./
RUN go mod download
# 复制源代码
COPY . .
# 构建应用
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main .
# 运行阶段
FROM alpine:3.15
WORKDIR /root/
# 从构建阶段复制二进制文件和配置
COPY --from=builder /app/main .
COPY configs/config.yaml /root/configs/config.yaml
# 设置可执行权限
RUN chmod +x ./main
EXPOSE 8080
CMD ["./main"]

5. 触发部署

可以通过以下方式触发部署:

6. 验证部署

部署完成后,可以通过以下方式验证:

SSH 连接到阿里云服务器,检查 Docker 容器状态:

docker ps

访问应用程序的公网地址和端口,确认服务是否正常运行。

通过实施这些建议,可以建立一个更加健壮和可靠的自动化部署流程,提高开发效率和系统稳定性。

注意:在实际使用时,请将 和 替换为自己项目的实际值。