Docker + Github WorkFlow 部署go服务

Date
Created
Jul 19, 2024 01:33 AM
Descrption
提效永无止境
Tags
CI/CD
后端
工具
notion image
使用 Docker 实现 Go 服务的 CI/CD(持续集成和持续部署)流程,可以确保代码在一致的环境中构建、测试和部署。以下是一个简要的步骤概述:

1. 准备 Go 服务项目

首先,确保你的 Go 服务项目结构如下:
my-go-service/ ├── Dockerfile ├── main.go ├── go.mod └── go.sum

2. 创建 Dockerfile

创建一个 Dockerfile,定义如何构建你的 Go 应用和运行它:
# 使用官方的Go镜像作为基础镜像 FROM golang:1.18-alpine AS builder # 设置工作目录 WORKDIR /app # 将 go.mod 和 go.sum 文件复制到工作目录 COPY go.mod go.sum ./ # 下载依赖 RUN go mod download # 将当前目录的代码复制到工作目录 COPY . . # 构建 Go 应用 RUN go build -o my-go-service . # 使用一个更小的基础镜像 FROM alpine:latest # 设置工作目录 WORKDIR /root/ # 从构建阶段复制二进制文件到最终镜像 COPY --from=builder /app/my-go-service . # 暴露应用的端口 EXPOSE 8080 # 运行 Go 应用 CMD ["./my-go-service"]

3. 设置 CI/CD 工具

使用 CI/CD 工具(如 GitHub Actions、GitLab CI、Jenkins 等)来自动化构建、测试和部署流程。以下是使用 GitHub Actions 的示例:
在项目中创建 .github/workflows/ci-cd.yml 文件:
name: CI/CD Pipeline on: push: branches: - main pull_request: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Go uses: actions/setup-go@v2 with: go-version: 1.18 - name: Cache Go modules uses: actions/cache@v2 with: path: | ~/go/pkg/mod ~/.cache/go-build key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Install dependencies run: go mod download - name: Run tests run: go test ./... - name: Build Docker image run: docker build -t my-go-service . - name: Log in to Docker Hub run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin - name: Push Docker image run: | docker tag my-go-service:latest ${{ secrets.DOCKER_USERNAME }}/my-go-service:latest docker push ${{ secrets.DOCKER_USERNAME }}/my-go-service:latest deploy: runs-on: ubuntu-latest needs: build steps: - name: SSH and deploy uses: appleboy/ssh-action@master with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} script: | docker pull ${{ secrets.DOCKER_USERNAME }}/my-go-service:latest docker stop my-go-service || true docker rm my-go-service || true docker run -d --name my-go-service -p 80:8080 ${{ secrets.DOCKER_USERNAME }}/my-go-service:latest

4. 配置 CI/CD 密钥和环境变量

确保在 GitHub 仓库的 “Settings” > “Secrets and variables” > “Actions” 中添加以下密钥:
• DOCKER_USERNAME:你的 Docker Hub 用户名
• DOCKER_PASSWORD:你的 Docker Hub 密码
• SERVER_HOST:你的部署服务器的主机名或 IP 地址
• SERVER_USER:用于 SSH 登录到服务器的用户名
• SERVER_SSH_KEY:用于 SSH 登录的私钥

5. 测试和验证

推送代码到主分支后,GitHub Actions 将自动触发 CI/CD 流水线,构建、测试、打包 Docker 镜像并部署到指定服务器。
通过这些步骤,你就可以借助 Docker 和 GitHub Actions 实现 Go 服务的 CI/CD 流程。