一个基于Go程序的持续集成/持续部署(CI/CD)

简介: 本教程通过一个简单的Go程序示例,展示了如何使用GitHub Actions实现从代码提交到Kubernetes部署的CI/CD流程。首先创建并版本控制Go项目,接着编写Dockerfile构建镜像,再配置CI/CD流程自动化构建、推送Docker镜像及部署应用。此流程基于GitHub仓库,适用于快速迭代开发。

编写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复制代码
//代码效果参考:http://www.mwgw.cn/sitemap.xml
//代码效果参考:https://www.h3cw.com/sitemap.xml
//代码效果参考:https://www.weibow.com/sitemap.xml
//代码效果参考:https://www.vipwb.com/sitemap.xml
//代码效果参考:https://www.uagu.cn/sitemap.xml
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流程。
效果:

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
21天前
|
存储 测试技术 持续交付
Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用
本文探讨了Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用。首先介绍了CI/CD的基本概念,接着阐述了Docker在环境一致性、快速部署、资源隔离和轻量化方面的优势。文章还详细讨论了构建、测试和部署阶段的具体集成方法,以及集成后带来的效率提升、可靠性增强、加速交付和易于管理等好处。最后,通过案例分析展示了集成的实际效果,强调了Docker与CI/CD结合的重要性和未来前景。
33 2
|
29天前
|
缓存 监控 前端开发
Go 语言中如何集成 WebSocket 与 Socket.IO,实现高效、灵活的实时通信
本文探讨了在 Go 语言中如何集成 WebSocket 与 Socket.IO,实现高效、灵活的实时通信。首先介绍了 WebSocket 和 Socket.IO 的基本概念及其优势,接着详细讲解了 Go 语言中 WebSocket 的实现方法,以及二者集成的重要意义和具体步骤。文章还讨论了集成过程中需要注意的问题,如协议兼容性、消息格式、并发处理等,并提供了实时聊天、数据监控和在线协作工具等应用案例,最后提出了性能优化策略,包括数据压缩、缓存策略和连接管理优化。旨在帮助开发者更好地理解并应用这些技术。
45 3
|
29天前
|
Go 数据处理 开发者
Go 语言的反射机制允许程序在运行时动态检查和操作类型信息,提供极大的灵活性和扩展性
Go 语言的反射机制允许程序在运行时动态检查和操作类型信息,提供极大的灵活性和扩展性。本文探讨了反射的基本原理、主要操作、应用场景及注意事项,并通过实例展示了反射的实际应用,帮助开发者更好地理解和使用这一强大特性。
31 2
|
1月前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
1月前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
38 3
|
1月前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
17天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
26 7
|
16天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
17天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
92 71
|
16天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
100 67
下一篇
DataWorks