ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Golang Microservices Go的CI/CD管道搭建:GitHub Actions与GitLab CI自动化部署

Golang Microservices Go的CI/CD管道搭建:GitHub Actions与GitLab CI自动化部署 Golang Microservices Go的CI/CD管道搭建GitHub Actions与GitLab CI自动化部署【免费下载链接】microservices-goGolang Microservice Boilerplate using PSQL, Docker and Cucumber, API REST. Gin Go and GORM with pagination and implementation of a Clean Architecture.项目地址: https://gitcode.com/gh_mirrors/mi/microservices-goGitHub 加速计划 / mi / microservices-go 是一个基于 Golang 的微服务模板项目它采用了 PSQL、Docker、Cucumber、API REST 等技术结合 Gin Go 和 GORM 实现了分页功能并遵循清晰架构设计。本文将详细介绍如何为该项目搭建高效的 CI/CD 管道通过 GitHub Actions 与 GitLab CI 实现自动化部署让开发流程更加顺畅。CI/CD 自动化部署的核心价值 ✨在现代软件开发中CI/CD 管道扮演着至关重要的角色。它能够将代码从提交到部署的整个过程自动化大大减少了手动操作带来的错误提高了开发效率和软件质量。对于 Golang Microservices Go 这样的项目而言搭建完善的 CI/CD 管道可以实现代码的自动测试、构建和部署确保每次代码变更都能快速、安全地交付到生产环境。GitHub Actions 工作流配置指南 工作流文件结构GitHub Actions 的工作流配置文件位于项目的.github/workflows目录下例如deploy.yml。该文件定义了触发条件、执行的任务以及任务之间的依赖关系。测试阶段在测试阶段我们需要对代码进行全面的测试确保代码的质量和稳定性。以下是测试阶段的关键配置test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Set up Go uses: actions/setup-gov4 with: go-version: 1.24.2 - name: Run tests run: | go test -v ./... ./coverage.sh - name: Run security scan run: | trivy fs . gosec ./...首先通过actions/checkoutv3动作获取代码。然后使用actions/setup-gov4动作设置 Go 环境指定 Go 版本为 1.24.2。接下来运行go test -v ./...执行所有测试并通过./coverage.sh生成测试覆盖率报告。最后使用trivy fs .和gosec ./...进行安全扫描检查代码中可能存在的安全漏洞。构建阶段构建阶段的主要任务是将代码构建为 Docker 镜像并推送到镜像仓库。配置如下build: needs: test runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Set up Docker Buildx uses: docker/setup-buildx-actionv2 - name: Login to Docker Hub uses: docker/login-actionv2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push Docker image uses: docker/build-push-actionv4 with: context: . push: true tags: | your-registry/microservices-go:latest your-registry/microservices-go:${{ github.sha }} cache-from: typegha cache-to: typegha,modemax该阶段依赖于测试阶段的成功完成。首先同样需要获取代码。然后使用docker/setup-buildx-actionv2动作设置 Docker Buildx。接着通过docker/login-actionv2动作登录到 Docker Hub这里的用户名和密码通过 GitHub Secrets 存储确保安全性。最后使用docker/build-push-actionv4动作构建 Docker 镜像并推送到指定的镜像仓库同时设置了缓存以提高构建效率。部署阶段部署阶段将构建好的 Docker 镜像部署到 Kubernetes 集群中。配置如下deploy: needs: build runs-on: ubuntu-latest if: github.ref refs/heads/main steps: - uses: actions/checkoutv3 - name: Configure kubectl uses: azure/k8s-set-contextv3 with: kubeconfig: ${{ secrets.KUBE_CONFIG }} - name: Deploy to Kubernetes run: | kubectl set image deployment/microservices-go appyour-registry/microservices-go:${{ github.sha }} -n microservices-go kubectl rollout status deployment/microservices-go -n microservices-go该阶段仅在代码推送到main分支时执行并且依赖于构建阶段的成功完成。首先获取代码。然后使用azure/k8s-set-contextv3动作配置 kubectl通过 GitHub Secrets 获取 Kubernetes 配置文件。最后运行kubectl set image命令更新 Deployment 中的镜像并使用kubectl rollout status命令检查部署状态。GitLab CI/CD 管道配置详解 管道文件结构GitLab CI/CD 的管道配置文件是项目根目录下的.gitlab-ci.yml文件它定义了管道的各个阶段和每个阶段执行的任务。测试阶段test: stage: test image: golang:1.24.2 script: - go test -v ./... - ./coverage.sh - trivy fs . - gosec ./...测试阶段使用golang:1.24.2镜像作为运行环境执行的脚本与 GitHub Actions 中的测试阶段类似包括运行测试、生成覆盖率报告和进行安全扫描。构建阶段build: stage: build image: docker:latest services: - docker:dind script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest - docker push $CI_REGISTRY_IMAGE:latest only: - main构建阶段使用docker:latest镜像并依赖docker:dind服务。脚本中首先构建 Docker 镜像标签为当前提交的 SHA 值然后推送到 GitLab 内置的镜像仓库。接着为镜像添加latest标签并再次推送。该阶段仅在main分支上执行。部署阶段deploy: stage: deploy image: bitnami/kubectl:latest script: - kubectl set image deployment/microservices-go app$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -n microservices-go - kubectl rollout status deployment/microservices-go -n microservices-go only: - main部署阶段使用bitnami/kubectl:latest镜像通过kubectl set image命令更新 Kubernetes 中的 Deployment 镜像并检查部署状态。该阶段同样仅在main分支上执行。自动化部署的关键步骤与注意事项 ⚠️环境准备在进行自动化部署之前需要确保以下环境准备工作已完成安装并配置好 Go 环境版本需为 1.24.2。安装 Docker 和 Docker Compose版本分别为 20.10 和 2.0。搭建 PostgreSQL 数据库版本为 13。配置好 Kubernetes 集群并确保 kubectl 工具能够正常连接集群。在 GitHub 或 GitLab 中设置好相关的 Secrets如 Docker 仓库的用户名和密码、Kubernetes 配置文件等。配置文件管理项目中的环境变量配置非常重要需要妥善管理。可以通过.env文件来设置环境变量例如# Server Configuration SERVER_PORT8080 GO_ENVproduction # Database Configuration DB_HOSTlocalhost DB_PORT5432 DB_USERpostgres DB_PASSWORDsecure_password DB_NAMEmicroservices_go # JWT Configuration JWT_ACCESS_SECRET_KEYyour_very_secure_access_secret_key JWT_REFRESH_SECRET_KEYyour_very_secure_refresh_secret_key JWT_ACCESS_TIME_MINUTE60 JWT_REFRESH_TIME_HOUR24在自动化部署过程中需要确保这些环境变量正确地传递到应用程序中。安全考虑在 CI/CD 管道配置中安全是一个重要的方面。需要注意以下几点敏感信息如密码、密钥等应通过 Secrets 进行管理避免直接暴露在配置文件中。进行安全扫描及时发现代码中的安全漏洞。配置适当的访问权限确保只有授权人员能够触发部署流程。监控与回滚部署完成后需要对应用程序进行监控确保其正常运行。可以通过健康检查 endpoint如/v1/health来检查应用程序的状态通过 Prometheus 和 Grafana 来监控性能指标。如果部署出现问题需要能够快速回滚到之前的版本。在 Kubernetes 中可以使用kubectl rollout undo命令来实现回滚。总结通过本文的介绍我们了解了如何为 Golang Microservices Go 项目搭建基于 GitHub Actions 和 GitLab CI 的 CI/CD 管道。从测试、构建到部署每个阶段都有详细的配置说明和注意事项。通过自动化部署可以大大提高开发效率减少人为错误确保软件的质量和稳定性。希望本文能够帮助你顺利搭建起高效的 CI/CD 管道让你的项目开发更加顺畅。【免费下载链接】microservices-goGolang Microservice Boilerplate using PSQL, Docker and Cucumber, API REST. Gin Go and GORM with pagination and implementation of a Clean Architecture.项目地址: https://gitcode.com/gh_mirrors/mi/microservices-go创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表