GitLab+Jenkins集群+docker CICD集成

2023-05-16

前言

最近部门进行CICD架构升级将引入k8s编排docker容器。借此机会梳理下目前应用部署发布方式。当前架构是我刚到公司时基于gitlab+jenkins+docker+nexus搭建。引入K8S后将调整pod yaml生成方式通过kubectl 命令启动。具体文章请参考

基于GitLab+Jenkins集群+K8S+Docker CICD方案实践

功能介绍及实现方式

  • 代码管理工具选择gitlab社区版
  • 搭建nexus 作为maven私服与dockerhub服务器
  • 通过三台物理机搭建jenkins主从集群
  • jenkins 安装各种插件
  • 通过jenkins流水线编写jenkinsfile
  • 编写dockerfile
  • 编写启动脚本
  • 集成应用项目

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3lzdGVtdXBfdjE=,size_20,color_FFFFFF,t_70,g_se,x_16

其实在外企比较常见的CICD一般会与jira集成,通过jira跟踪每次build然后进行发布

由于当前部门研发人员不多管理的项目不超过50个这套方案也算够用。

整体使用流程相对简单

  1. 首先开发人员提交merge request, project owner 同意合并分支
  2. 开发人员登陆jenkins 执行build
  3. jenkins 流水线开始执行
  4. 下载执行分支代码,编译,构建镜像,推送镜像
  5. ssh 登陆到具体物理机执行脚本 停容器 删除老镜像,下载新景象,启动容器

以上所有操作通过如下三个文件完成。


  

 Jenkinsfile

由于项目使用maven多module方式管理,jenkinsfile可以参考如下方式

node {
   stage('prepare') {
        checkout([$class: 'GitSCM', branches: [[name: 'origin/****']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '***********', url: 'http://******']]])  
   }
   stage('build') {
        sh "mvn clean install -pl ${project_name} -am -amd -Dmaven.test.skip=true -P ${build_env}"
        pom_path = sh (script: 'echo ${project_name}/pom.xml', returnStdout: true).trim()
        pom = readMavenPom file: pom_path
        app_name = "${pom.artifactId}"
        source_file= "${pom.artifactId}/target/*.jar"
        jar_file="${pom.artifactId}.jar"
        commit_id = sh (script: 'git rev-parse --short HEAD', returnStdout: true).trim()
        echo "commit id: $commit_id"
        docker_img_name = "${dockerHub}:****/${app_name}"
        echo "docker-img-name: ${docker_img_name}"
        sh "docker build --build-arg APP_NAME=${app_name} --build-arg SOURCE_FILE=${source_file} --build-arg JAR_FILE=${jar_file} -t ${docker_img_name}:${commit_id} ."
        sh "docker login -u **** -p **** ${dockerHub}:****"
        sh "docker push ${docker_img_name}:${commit_id}"
        echo "delete images"
        sh "docker rmi `docker images | grep  '${app_name}' | awk '{print \$3}'`"
   }
   stage('deploy'){
        for (ip in ipList.tokenize(',')){
           def remote = [:]
           remote.name = ip
           remote.host = ip
           remote.user = ****
           remote.password = ****
           remote.allowAnyHosts = true
           sshPut remote: remote, from: 'deploy.sh', into: '/'
           sshCommand remote: remote, command: "chmod 777 /deploy.sh"
           sshCommand remote: remote, command: "docker login -u **** -p **** ${dockerHub}:****"
           sshCommand remote: remote, command: "sh /deploy.sh ${docker_img_name}:${commit_id} ${pom.artifactId} ${nacosServer} ${port}"
         }
      }
}

 总结

CICD 集成其实不难,难点是如何规范的使用。后续也会分享升级为k8s后的架构与实现方案

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitLab+Jenkins集群+docker CICD集成 的相关文章

随机推荐

  • bash环境中的通配符和特殊符号的简单介绍

    Bash环境中可以用通配符 wildcard 来更好的对数据进行处理 下面介绍一些常用的通配符 符号 意义 代表0个到无穷多个任意字符 代表一定有一个任意字符 代表一定有一个在中括号内得字符 非任意字符 例如 abcd 代表一定有一个字符
  • spring boot自定义注解拦截接口

    自定义注解 xff0c 拦截接口请求 maven依赖管理 span class token generics function span class token punctuation lt span dependency span cla
  • nacos与spring cloud

    前言 从微服务兴起后 xff0c 服务治理问题已经成为其最大问题 起初有eureka xff0c zookeeper consul同台竞争 xff0c 本人也使用过eureka 43 config server作为注册中心和配置中心 xff
  • nacos与sentinel

    sentinel 高可用流控 sentinel 是阿里开源的一款系统流控系统 xff0c 可以在线配置本系统请求访问请求控制 软件下载 源码 运行版 运行 nohup java jar sentinel dashboard 1 7 2 ja
  • jenkins 结合ssh 实现多服务器部署jar包

    jenkins使用手册 简介 官网介绍 xff1a Jenkins是开源的CI CD xff08 持续集成 持续交付 xff09 软件领导者 有如下几个优点 xff1a 简单安装配置简单丰富的插件 超过1000个插件扩展性分布式 一 软件下
  • feign调用初始化问题

    最近使用spring cloud微服务遇到一个问题 xff0c 微服务之间使feign第一次调用时会非常的耗时 xff0c 一个请求如果调用链长的情况下 xff0c 接口返回可能会达到10s以上 xff0c 这是一个正常系统都不能容忍的 基
  • VScode 无法下载Go工具解决方案

    使用七牛云代理下载所需要的工具依赖 xff0c 具体配置请查看 说明 https goproxy cn
  • Sonar代码质量管理服务搭建并导入java项目

    1 软件下载 7 4 2 软件配置 打开解压后文件conf sonar properties mysql版本必须大于5 6小于8 0 MySQL gt 61 5 6 amp amp lt 8 0 sonar jdbc url 61 mysq
  • java join方法实现线程的串行

    java实现多线程之间串行执行 xff0c 网上也有很多的教程 在这里我主要说的是 xff1a java Thread类的join函数 xff0c 先贴代码吧 xff1a package cn com fhz thread Created
  • Windows上Rust所依赖的msvc到底怎么装?

    在Windows上面安装Rust的开发环境 xff0c 看起来颇具挑战性 我们会被告知需要安装一个名叫Microsoft Visual Studio C 43 43 build tools的编译工具 xff0c 并被给到一个官方链接 然而
  • Word 转 Markdown

    1 Pandoc 工具将 Word 文档转为 Markdown 可以借助 Pandoc 工具将 Word 文档转为 Markdown xff0c 例如 xff0c 此处将 README docx 转成 README md xff0c 命令如
  • c语言现代方法 chapter20自学笔记

    如果编写程序需要用到数据在内存中如何存储 xff0c 那么除非必要 xff0c 否则不用 xff0c 如果用 xff0c 那么集中在程序中的某个模块 xff0c 不要分散在各处 20 1 移位运算符 c语言提供了6个位运算符 这些运算符可以
  • 查看python源码之jieba安装

    Python 2 x 下的安装 全自动安装 xff1a easy install jieba 或者 pip install jieba 半自动安装 xff1a 先下载http pypi python org pypi jieba xff0c
  • 在Ubuntu Linux上搭建go语言环境

    一 安装VMware Tools 1 在刚装好的ubuntu linux上 xff0c 如果没有安装VMware Tools xff0c 那么我们就要先安装它 打开我们的ubuntu linux xff0c 然后点击左上角的虚拟机 xff0
  • Linux nohup实现后台运行程序及查看(nohup与&)

    1 后台执行 一般运行linux上的程序都是执行 sh 文件 xff08 sh文件 xff09 xff0c 那如果不影响当前CMD窗口的操作 xff0c 需要后台运行怎么办呢 xff1f 这时就需要借助 nohup 和 amp 命令来实现
  • CA 认证过程及 https 实现方法

    CA 认证过程 CA 概述 xff1a Certificate Authority 的缩写 xff0c 通常翻译成认证权威或者认证中心 xff0c 主要用途是为用户发放数字证书 CA 认证的流程和公安局派出所颁发身份证的流程一样 认证中心
  • C++代码详解:string的赋值与C风格字符串转换

    C 43 43 代码详解 string的赋值与C风格字符串转换 61 61 61 61 61 string简介 61 61 61 61 61 string是C 43 43 里默认的字符串容器 xff0c 用于代替C风格的字符串指针与字符串数
  • nginx 基本配置

    一篇比较好的参考文 https www digitalocean com community tutorials how to install nginx on ubuntu 18 04 1 在 Ubuntu 上安装 Nginx sudo
  • 解决[[NSFileManager defaultManager] contentsOfDirectoryAtPath 方法获取不到数据的bug

    在说这个问题之前 必须先解释一下 我们在引入工程的时候 xcode会给我们3个选项 1 Copy items if needed 主要是说明 xff0c 是否要将文件拷贝到工程所在目录 如果不选中 xff0c 而且该库文件不在工程目录下 x
  • GitLab+Jenkins集群+docker CICD集成

    前言 最近部门进行CICD架构升级将引入k8s编排docker容器 借此机会梳理下目前应用部署发布方式 当前架构是我刚到公司时基于gitlab 43 jenkins 43 docker 43 nexus搭建 引入K8S后将调整pod yam