一个基于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流程。
效果:

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
1396 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
人工智能 Kubernetes jenkins
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
|
监控 jenkins Shell
jenkins结合gitlab实现CI(持续集成)
通过本文的介绍,我们详细了解了如何结合Jenkins和GitLab实现持续集成。从环境准备、插件配置到Pipeline任务创建和CI流程监控,每一步都提供了详细的操作步骤和示例代码。希望本文能帮助开发者快速搭建起高效的CI系统,提高项目开发效率和代码质量。
1846 9
|
存储 测试技术 持续交付
Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用
本文探讨了Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用。首先介绍了CI/CD的基本概念,接着阐述了Docker在环境一致性、快速部署、资源隔离和轻量化方面的优势。文章还详细讨论了构建、测试和部署阶段的具体集成方法,以及集成后带来的效率提升、可靠性增强、加速交付和易于管理等好处。最后,通过案例分析展示了集成的实际效果,强调了Docker与CI/CD结合的重要性和未来前景。
423 2
|
运维 Devops jenkins
DevOps实践:持续集成与持续部署在现代软件开发中的作用
【10月更文挑战第42天】在快节奏的软件开发世界里,DevOps已经成为一种提升效率、确保质量和加速交付的重要方法。本文将深入探讨DevOps的核心组成部分—持续集成(CI)和持续部署(CD)—并展示它们如何通过自动化流程优化开发周期。我们将从基础概念讲起,逐步过渡到实际操作,最终通过一个简单代码示例来演示这一过程。文章旨在为读者提供清晰的指导,帮助他们理解和实现CI/CD流程,从而在软件开发领域取得竞争优势。
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
Go 编译器 Java
Go 程序的基本结构和要素
示例 package main import "fmt" func main() { fmt.Println("hello, world") } 包的概念、导入与可见性 包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容。
1137 0
|
10月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
454 2
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
678 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
503 0

热门文章

最新文章