[Gitops--3]项目代码发布案例Argocd+Gitlab-Runner

news2024/12/27 14:30:50

项目代码发布案例Argocd+Gitlab-Runner

1. 项目文件

demo项目放在gitee上需要自取

git clone https://gitee.com/qqmiller/godemo.git

1.1 项目代码

apidemo.go

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	r := gin.Default()
	r.GET("/info", Info)
	r.Run(":10088")
}

func Info(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"version": "1.1.1",
	})
}

1.2 Dockerfile

FROM centos:centos7	# 基础镜像
ADD ./apidemo /root # 将编译后的可执行文件添加至/root目录下
EXPOSE 10088 # 服务暴露端口
CMD ["/root/apidemo"] #容器运行命令

1.3 项目部署文件

1.3.1 deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: apidemo
  name: apidemo
  labels:
    app: apidemo
spec:
  replicas: 4
  selector:
    matchLabels:
      app: apidemo
  template:
    metadata:
      name: apidemo
      labels:
        app: apidemo
    spec:
      containers:
        - name: apidemo
          image: 192.168.31.104/apidemo/apidemo:v1.1.1
          imagePullPolicy: Always
          ports:
            - containerPort: 10088

1.3.2 service

apiVersion: v1
kind: Service
metadata:
  namespace: apidemo
  name: apidemo
  labels:
    app: apidemo
spec:
  type: NodePort
  ports:
    - name: apidemoport
      port: 10088
      targetPort: 10088
      nodePort: 30080
  selector:
    app: apidemo

1.3.3 ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-apidemo                    #自定义ingress名称
  namespace: apidemo
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - host: apidemo.intra.com                   # 自定义域名
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: apidemo     # 对应上面创建的service名称
                port:
                  number: 10088

1.3.4 kustomization

定义项目依赖文件

resources:
- apidemo-deployment.yaml
- apidemo-service.yaml
- apidemo-ingress.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

1.3.5 gitlab-ci

workflow:  #设置工作流
  rules:
    - if: $CI_COMMIT_BRANCH == 'master'  #如果代码分支为master则使用以下环境变量
      variables:
        registry: $ci_registry  #镜像仓库地址,gitlab配置全局变量
        registry_name: $ci_registry_name #镜像仓库登录用户,gitlab配置全局变量
        registry_passwd: $ci_registry_passwd #镜像仓库登录密码,gitlab配置全局变量

variables:  #
  app_name: $CI_PROJECT_NAME #项目名,gitlab项目仓库名,gitlab内置变量
  app_version: $CI_COMMIT_SHORT_SHA #app版本号,每次push项目的编号,后面会作为镜像版本,gitlab内置变量
  namespace: $CI_PROJECT_NAMESPACE #项目所在组,gitlab内置变量
  GIT_CLONE_PATH: '$CI_BUILDS_DIR/$CI_JOB_ID/$CI_PROJECT_NAME' #定义gitlab-runner,clone代码的位置

stages: #定义流水线有几个阶段
  - build #编译阶段
  - deploy #部署阶段

build code: #自定义的步骤名称
  stage: build #此步骤为build阶段
  script:
    - go build #具体执行的命令,此处为编译go项目,编译完成会产生apidemo可执行文件
  artifacts: #gitlab流水线文件内置关键字,作用为保留制品
    paths: #保留制品所在位置
      - apidemo #当前步骤需要保留的制品文件,提供个下一步骤使用

docker build:
  stage: build
  script:
    - docker build -t $app_name:$app_version .  #此步骤通过项目源码内的Dockerfile文件编译docker镜像
  needs: #gitlab流水线文件内置关键字,作用为此步骤所依赖的步骤,只有当被依赖的步骤完成后,此步骤才会执行
    - build code #此步骤被依赖的步骤

docker tag:
  stage: build
  script:
    - docker tag $app_name:$app_version $registry/$app_name/$app_name:$app_version #此步骤为上一步骤生成的镜像打上仓库标签
  needs:
    - docker build

docker push:
  stage: build
  script:
    - docker login -u $ci_registry_name -p $ci_registry_passwd $ci_registry #登录镜像仓库
    - docker push $registry/$app_name/$app_name:$app_version #推送镜像至镜像仓库
    - docker logout #登出镜像仓库
  needs:
    - docker tag

deploy dev:
  stage: deploy
  before_script: #gitlab流水线内置关键字,作用为在该步骤执行流水线操作前所依赖步骤。这里需要runner通过修改kustomization.yaml文件,来修改镜像版本信息
    #所以需要在修改镜像版本信息后,重新push代码
    - git remote set-url origin http://${CI_USERNAME}:${CI_PASSWORD}@192.168.31.14/apidemo/apidemo.git #设置远程仓库地址,CI_USERNAME为代码仓库登录用户名,需要在gitlab自定义全局变量,CI_PASSWORD为代码仓库登录密码,需要在gitlab自定义全局变量
    - git config --global user.name "Administrator" #配置本地仓库用户名信息
    - git config --global user.email "admin@example.com" #配置本地仓库邮箱信息
  script:
    - git checkout -B master #切换项目分支
    - cd base #进入资源清单文件目录
    - kustomize edit set image $registry/$app_name/$app_name:$app_version #runner通过kustomize客户端工具修改镜像版本信息
    - cat kustomization.yaml
    - git commit -am '[skip ci] DEV image update'  #git 本地提交,注意“skip ci”为gitlab流水线文件内置关键字,作用为跳过ci流水线操作,未设置可能导致流水线进入死循环
    - git push origin master #重新提交修改镜像版本后的代码
  needs:
    - docker push

1.4 将代码推送到gitlab

请添加图片描述

请添加图片描述

推送完成后在gitlab的master分支就能看到文件了

请添加图片描述

2. Gitlab设置变量

依次添加五个变量

变量作用
ci_registry192.168.31.104Harbor仓库地址
ci_registry_nameadminHarbor仓库用户名
ci_registry_passwdroot123Harbor仓库密码
CI_USERNAMErootGitlab用户名
CI_PASSWORDP@ssw0rdGitlab密码

请添加图片描述

这里注意:保护变量不要勾选

请添加图片描述

3. 提交项目代码

添加远程仓库

请添加图片描述

http://192.168.31.14/apidemo/apidemo.git

请添加图片描述

4. ArgoCd配置

4.1 创建项目

请添加图片描述

请添加图片描述

4.2 创建仓库配置

请添加图片描述

请添加图片描述
请添加图片描述

4.3 配置项目

SOURCE REPOSITORIES

请添加图片描述

DESTINATIONS

请添加图片描述

CLUSTER RESOURCE ALLOW LIST

请添加图片描述

4.4 添加应用

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

更新版本

请添加图片描述

此时gitlab收到了更新,触发cicd

请添加图片描述

构建完成后镜像自动上传到harbor

请添加图片描述

随之触发argocd的发布

请添加图片描述

当发布完成后刷新/info页面.就获取到了之前提交的最新版本内容 v1.5.3

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术应用

随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提…

Bugku——应急加固1

来打一下bugku的应急加固靶场,靶场链接:https://ctf.bugku.com/ctfplus/detail/id/2.html 启动环境 1、JS劫持域名 直接访问ip地址,发现是xxx学院二手交易市场,随后被劫持跳转到了一个博客页面。 博客地址就是第一个flag&…

记录踩的坑:python gdal 重采样+坐标系转换

源数据:1/0 二值数据,30m 分辨率,WGS_1984_UTM_Zone_53N 坐标系,东北区域。 目标:将源数据制成与 MODIS tile 的坐标系(Sinusoidal)、分辨率(463.3127165m)都一致的tif。…

padans关于数据处理的杂谈

情况:业务数据基本字段会有如下: Index([时间, 地区, 产品, 字段, 数值], dtypeobject)这样就会引发一个经典“三角不可能定理”,如何同时简约展现分时序、分产品、分字段数据。)一般来说, 1、时序为作为单独的分类&…

10KV高压开关柜怎么进行无线测温

摘要:文章提出了一种用于小车式开关柜的无线测温系统,包括设于小车动触头套管上的温度传感器、环绕设于小车动触头上的电流传感器,温度传感器及电流传感器均分别连接有数据接收处理器,数据接收处理器电连接有设于小车式开关柜上的…

实例分享| anyRTC 部署南京某区城市运行“一网统管”综合调度系统

近年来国家城运中心,加大了对城运信息化系统的建设的投入,通过对城运的信息化建设,提升城市服务能力和现代化管理水平、进一步增强城市竞争力、让信息化切实做到为人民服务的根本能力。 南京市首先提出城市运行”一网统管“的计划&#xff0…

R语言地理空间分析、可视化及模型预测

随着地理信息系统(GIS)和大尺度研究的发展,空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用,其中在空间分析方面扮演着重要角色,与空间相关的包的数量也达到130多个。在本…

Failed to resolve: com.github.adrielcafe:ffmpeg-android-java:2a627f6ecd

背景 项目中有引用 AndroidAudioConverter,引入方式: implementation com.github.adrielcafe:AndroidAudioConverter:0.0.8 gradle同步及编译代码都会报错: Failed to resolve: com.github.adrielcafe:ffmpeg-android-java:2a627f6ecd 原…

带你浅谈下Quartz的简单使用

Scheduler 每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题(jobDetail的实例也是新的) Quzrtz 定时任务默认都是并发执行,不会等待上一次任务执行完毕,只要间隔时间到就会执…

C/C++|物联网开发入门+项目实战|C语言基础|养成好习惯---规范编码方法 -学习笔记(5)

文章目录 养成好习惯---规范编码方法为什么规范编码很重要推荐书籍:规范编码的重要性规范编码,从Tab键开始代码行的规范写法空行和空格,让你的代码更赏心悦目空格空行 谈谈C代码的注释注释符位置 好代码,取名很重要商业代码基本要求&#xff…

Unity 热更新基础HybridCLR:安装部署(HybridCLR手记二)

Win 下 打包时遇到 xxxx\il2cpp\libil2cpp\utils\Il2CppHashMap.h(71): error C2039: hash_compare: is not a member of stdext 这是.net 7发布后最新版本vs改动打破了一些向后兼容性引起。你可以回退2022的旧版本或者使用2019之类的版本。 所以建议使用.net 6 之前的版本进行…

面试官:String s = new String(“xyz“) 创建了几个对象?

这个问题相信每个学习 java 的同学都不陌生,作为一个经典的面试题,到现在工作这么多年了我真是认为挺操蛋的一个问题,在网上到现在你仍然可以看见很多讨论这个问题的人,其中不乏工作很多年的人都有争论,我认为还是有必…

Django项目部署在服务器(配置Django+Mysql8.0+Python+Nginx+uWsgi)

Django项目部署在服务器(配置DjangoMysql8.0PythonNginxuWsgi) 项目配置版本服务器阿里云CentOS 7.6数据库Mysql8.0Python3.7.1 一、更新yum并设置自动更新 1、手动更新yum yum update -y2、安装自动更新的插件 yum install -y yum-cron3、设置自动…

面试官:项目中如何解决跨域问题(HttpClient、注解、网关)

为什么会有跨域问题 因为浏览器的同源政策,就会产生跨域。比如说发送的异步请求是不同的两个源,就比如是不同的的两个端口或者不同的两个协议或者不同的域名。由于浏览器为了安全考虑,就会产生一个同源政策,不是同一个地方出来的…

kafka安装及配置过程

kafka安装及配置过程 kafka 依赖于 zookeeper,zookeeper的安装可看:ZooKeeper的安装和配置过程 先说明一下,集群主机分别是:192.168.127.129,192.168.127.130,192.168.127.131 安装 kafka可以通过官网下…

Polardb 如何替换MYSQL 之 IMCI 列式(2)系统的核心与关键

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群。 本期继续上…

如何docker安装es和kibana以及ik分词器

推荐用portainer进行可视化 1.创建网络--让es和kibana容器互联 docker network create es-net 2.部署单点es docker run -d \ --name es \ -e "ES_JAVA_OPTS-Xms512m -Xmx512m" \ -e "discovery.typesingle-node" \ -v es-data:/usr/sha…

Java垃圾回收机制

Java垃圾回收机制 垃圾回收算法为什么垃圾回收回收哪些内存如何回收Marking-Sweep(标记-清除法)Marking-Compat(标记-整理法) 内存分代年轻代 Minor gc和Major gc的区别常见回收器Serial Garbage CollectorParallel Garbage Colle…

InnoDB的表空间

独立表空间结构 区概念 连续的64个页就是一个区,也就是说一个区默认用1MB空间大小。表空间由若干个连续的区(物理位置上的连续)组成的,256的区被划分成一组。 其中,extent0~extent256个区算是第一组,exten…

基于微信小程序的家政服务预约系统的设计与实现

基于微信小程序的家政预约系统,有效解决了人们网上随时预约家政服务的问题。依托于新的小程序开发环境,解决了"跨系统开发"这个难题,在一个"类操作底层"开发基于微信小程序的家政服务应用。功能模块包括:家政服务项目展示模块,服务报价模块,用户留言评价模…