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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 创建一个基于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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
11天前
|
JavaScript 前端开发 持续交付
Prettier 高级应用:集成 CI/CD 流水线与插件开发
【10月更文挑战第18天】Prettier 是一款流行的代码格式化工具,它能够自动将代码格式化成一致的风格,从而提高代码的可读性和维护性。对于希望进一步发挥 Prettier 潜力的高级用户而言,将 Prettier 集成到持续集成(CI)和持续部署(CD)流程中,确保每次提交的代码都符合团队标准,是非常重要的。此外,通过开发自定义插件来支持更多语言或扩展 Prettier 的功能也是值得探索的方向。本文将详细介绍这两方面的内容。
32 2
|
1天前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
9 3
|
21天前
|
缓存 监控 测试技术
掌握容器化持续集成/持续部署(CI/CD)的最佳实践
【10月更文挑战第8天】本文介绍了容器化持续集成/持续部署(CI/CD)的最佳实践,涵盖容器化CI/CD的概念、优势和实施步骤。通过使用容器技术,可以实现环境一致性、快速迭代和易于扩展,提高软件开发的效率和可靠性。文章还详细讨论了编写高效的Dockerfile、自动化测试、安全性、监控和日志管理等方面的最佳实践。
|
7天前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
30天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
63 0
|
30天前
|
存储 缓存 安全
如何使用 PHP 将天气跟踪集成到 Web 应用程序中
如何使用 PHP 将天气跟踪集成到 Web 应用程序中
31 0
|
30天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
84 0
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
266 6
|
4月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
324 4
|
4月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
290 1

热门文章

最新文章