- 作者:老汪软件技巧
- 发表时间: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
访问应用程序的公网地址和端口,确认服务是否正常运行。
通过实施这些建议,可以建立一个更加健壮和可靠的自动化部署流程,提高开发效率和系统稳定性。
注意:在实际使用时,请将 和 替换为自己项目的实际值。