创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线

简介: 创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线

创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线,涉及到代码拉取、镜像构建、镜像推送以及在Kubernetes(K8s)上启动服务等多个步骤。下面是一个简化的步骤说明,以及对应的命令行操作或配置文件示例,帮助你构建这样的流水线。

步骤一:环境准备

安装Git:用于代码拉取。

安装Docker:用于镜像构建和推送。

安装kubectl:用于与Kubernetes集群交互。

配置Docker Hub或私有仓库(如Harbor):用于存储Docker镜像。

配置Kubernetes集群:确保你有权限访问一个Kubernetes集群。

步骤二:编写Go程序

确保你的Go项目在GitHub(或其他Git服务)上有版本控制。以下是一个简单的hello.go示例:

go复制代码
 package main  
 
   
 
 import (  
 
     "fmt"  
 
     "net/http"  
 
 )  
 
   
 
 func handler(w http.ResponseWriter, r *http.Request) {  
 
     fmt.Fprintf(w, "Hello, Kubernetes!")  
 
 }  
 
   
 
 func main() {  
 
     http.HandleFunc("/", handler)  
 
     fmt.Println("Server is listening on 8080")  
 
     if err := http.ListenAndServe(":8080", nil); err != nil {  
 
         panic(err)  
 
     }  
 
 }

步骤三:Dockerfile编写

在项目根目录下创建Dockerfile,用于构建镜像:

Dockerfile复制代码
 # 使用官方Go运行时作为父镜像  
 
 FROM golang:1.16  
 
   
 
 # 设置工作目录  
 
 WORKDIR /app  
 
   
 
 # 将当前目录内容复制到位于/app中的容器中  
 
 COPY . .  
 
   
 
 # 构建Go应用  
 
 RUN go build -o hello-app  
 
   
 
 # 指定容器运行时执行的命令  
 
 CMD ["./hello-app"]  
 
   
 
 # 暴露端口  
 
 EXPOSE 8080

步骤四:使用CI/CD工具(以GitHub Actions为例)

在GitHub仓库中创建.github/workflows/ci-cd.yml文件,配置CI/CD流程:

yaml复制代码
 name: CI/CD  
 
   
 
 on:  
 
   push:  
 
     branches: [ main ]  
 
   
 
 jobs:  
 
   build:  
 
     runs-on: ubuntu-latest  
 
     steps:  
 
       - uses: actions/checkout@v2  
 
         
 
       - name: Set up Docker Buildx  
 
         uses: docker/setup-buildx-action@v1  
 
   
 
       - name: Login to DockerHub  
 
         uses: docker/login-action@v1  
 
         with:  
 
           username: ${{ secrets.DOCKER_USERNAME }}  
 
           password: ${{ secrets.DOCKER_PASSWORD }}  
 
   
 
       - name: Build and push  
 
         id: docker_build  
 
         uses: docker/build-push-action@v2  
 
         with:  
 
           push: true  
 
           tags: yourusername/hello-app:latest  
 
   
 
       - name: Deploy to Kubernetes cluster  
 
         uses: azure/k8s-deploy@v1  
 
         with:  
 
           namespace: default  
 
           manifests: |  
 
             deployment.yaml  
 
            image-pull-secrets: |  
 
             name: regcred  
 
            kubectl-version: latest

注意:你需要配置secrets.DOCKER_USERNAME和secrets.DOCKER_PASSWORD在GitHub仓库设置中。

步骤五:编写Kubernetes部署文件

在项目根目录下创建deployment.yaml:

yaml复制代码
 apiVersion: apps/v1  
 
 kind: Deployment  
 
 metadata:  
 
   name: hello-app  
 
 spec:  
 
   replicas: 1  
 
   selector:  
 
     matchLabels:  
 
       app: hello-app  
 
   template:  
 
     metadata:  
 
       labels:  
 
         app: hello-app  
 
     spec:  
 
       containers:  
 
       - name: hello-app  
 
         image: yourusername/hello-app:latest  
 
         ports:  
 
         - containerPort: 8080

步骤六:运行流水线

每次将代码推送到main分支时,GitHub Actions将自动触发CI/CD流程,包括构建Docker镜像、推送镜像到Docker Hub,并在Kubernetes集群中部署应用。

这只是一个基础的示例,根据你的具体需求,你可能需要调整Dockerfile、Kubernetes配置文件或CI/CD流程。

效果:

image.png

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
监控 前端开发 测试技术
如何实现前端工程化的持续集成和持续部署?
通过以上步骤,可以建立一套完整的前端工程化 CI/CD 流程,实现前端代码从开发、测试、构建到部署的全自动化,提高开发效率、保证代码质量,快速响应用户需求和市场变化。
|
JavaScript 前端开发 持续交付
Prettier 高级应用:集成 CI/CD 流水线与插件开发
【10月更文挑战第18天】Prettier 是一款流行的代码格式化工具,它能够自动将代码格式化成一致的风格,从而提高代码的可读性和维护性。对于希望进一步发挥 Prettier 潜力的高级用户而言,将 Prettier 集成到持续集成(CI)和持续部署(CD)流程中,确保每次提交的代码都符合团队标准,是非常重要的。此外,通过开发自定义插件来支持更多语言或扩展 Prettier 的功能也是值得探索的方向。本文将详细介绍这两方面的内容。
428 2
|
9月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
1043 2
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
526 2
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
运维 Devops jenkins
DevOps实践:持续集成与持续部署在现代软件开发中的作用
【10月更文挑战第42天】在快节奏的软件开发世界里,DevOps已经成为一种提升效率、确保质量和加速交付的重要方法。本文将深入探讨DevOps的核心组成部分—持续集成(CI)和持续部署(CD)—并展示它们如何通过自动化流程优化开发周期。我们将从基础概念讲起,逐步过渡到实际操作,最终通过一个简单代码示例来演示这一过程。文章旨在为读者提供清晰的指导,帮助他们理解和实现CI/CD流程,从而在软件开发领域取得竞争优势。
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
敏捷开发 Devops 测试技术
自动化测试中的持续集成与持续部署
在现代软件开发实践中,自动化测试是确保软件质量和快速迭代的关键。本文将探讨自动化测试如何与持续集成(CI)和持续部署(CD)流程相结合,以提高开发效率和软件质量。我们将分析CI/CD管道中自动化测试的最佳实践,以及如何克服实施过程中的挑战。
374 6
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
644 4
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
230 3