CI/CD流水线实战

不知道为什么,现在什么技术都想学,因为我觉得我遇到了技术的壁垒,大的项目接触不到,做的项目一个字辣*。所以,整个人心浮气躁,我已经得通过每天的骑行和长跑缓解这种浮躁了。一个周末,我再次宅在了家里,学习了一下CICD

先分享一下shigen的学习视频资源:CICD流水线实战

git

分布式版本控制器。gitlab可以创建私人的仓库,github私有仓库需要付费。

SVN 不推荐!不是喷它,技术的革新,新技术会解决老技术的各种问题。

由于SVN的集中式架构、对离线工作支持较差、分支和合并复杂以及缺乏现代化功能等原因,它已经不再被推荐作为主要的版本控制系统。 目前,Git已成为广泛使用的分布式版本控制系统,并且具有更强大的功能和更好的性能。——来自chatGPT的总结

git原理

再多的概念都没有一张图来的实在和清晰:

git配置

~/.gitconfig会保存git的全局配置,可以在这里修改git用户的信息,如name email

cat ~/.gitconfig

git在项目中

在项目的根路径下也会存在.git文件夹,里边也有一个config文件,存储的是当前的项目配置。

查看配置信息

git config --list

设置

通常用来配置name email

git config set name=shigen

查看分支和提交

我本地配置了gitlog, 具体的配置shigen分享在下边啦。

gitlog='git log --graph --abbrev-commit --decorate --format=format:'\''%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'\'\''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'\'' --all'

执行命令,就是这样的,是不是很清晰明了:

shigen更推荐tig。直接在mac上执行brew install tig即可。

效果非常的炫酷、友好,可以直接在控制台查看文件的改动。

常用的命令

虽然图像化的操作工具如我常用的idea ugit等都能很好的满足日常所需,但是:底层的原理还是得了解一下。想想,万一只有终端操作咋办。

  • 初始化
git init
  • 文件添加到暂存
git add xxx
  • 提交
git commit -m 'msg'
  • 查看日志
git log
  • 暂存区状态
git status
  • 当前文件与上次提交的差别
git diff
  • 回到某个版本
git reset --hard xxxx
  • 从本地push到主分支

一般的公司,master分支可是不允许直接push代码的,这里只是一个例子哈。

git push -u origin master

gitlab

安装

发现直接安装会有问题,如:找不到镜像源。尝试使用docker安装,发现云服务器的内存不够用,安装的脚本如下:

mkdir -p etc/gitlab var/log/gitlab /var/opt/gitlab 
docker run -d -p 81:80 -p 10011:443 -p 10012:22  \--restart no \--name gitlab \-v $PWD/etc/gitlab:/etc/gitlab \-v $PWD/var/log/gitlab:/var/log/gitlab \-v $PWD/var/opt/gitlab:/var/opt/gitlab \--privileged=true \gitlab/gitlab-ceecho '访问81端口'

参考文章:Gitlab----使用Docker方式安装部署Gitlab

感兴趣的可以看看在M1芯片的电脑上如何的安装:如何在M1的Mac上搭建gitlab

特色:添加用户、使用邮箱、代码合并

Nexus3

maven的仓库,私服。直接下载、解压、启动。和docker的harbor类似。

jenkins

  • 自动的构建
  • 易于安装和配置
  • 分布式构建,多台计算机一起构建
  • 支持的插件很多

容器化CI/CD流程

本地代码---git---jenkins---harbor----docker(k8s)

部署

参考文章:Mac M1 部署 Jenkins

brew install jenkins-lts
brew services restart jenkins-lts 
open 127.0.0.1:8080

获得jenkins的默认密码:

cat /Users/xxxx/.jenkins/secrets/initialAdminPassword

按照教程下载推荐的插件、创建账户、使用默认的URL即可。

配置

  • 中文的配置

参考文章:jenkins设置中文

  • 全局工具的配置

Java的路径:

/opt/homebrew/opt/openjdk@17/bin
  • 权限的划分,需要使用到插件
  • 部署的过程推荐文章:Mac M1部署jenkins

本地新建项目并上传gitee

git commit -m "first commit"
git remote add origin https://gitee.com/shigen/wx-develop.git
git push -u origin "master"

jenkins的项目面板新建项目,具体的过程参见:jenkins+gitee实现代码自动化部署

在脚本的实现部分,我手写了一个,上传到我自己的harbor。这里仅作为一个测试使用,具体的实际开发、应用场景都是类似。

首先需要知道的是我拉取的代码的位置,shigen电脑上的位置是这样的:

/Users/xxxx/.jenkins/workspace/wx-develop

shell脚本

shigen的脚本是这样的。首先就是通过maven对代码进行编译和打包,之后用docker将java 服务的jar打包进容器,生成的容器推到harbor,本地运行。

#!/bin/bash
# jenkins shell script to deploy the java projectecho '------start deployment--------'
echo "java -version && mvn -version"mvn clean install -DskipTestsDATE="$(date +%y%m%d-%H%M%S)"
APP_NAME="wx-xxxxx"
APP_PORT="80"
HARBOR_DOMIAN="xxxxxxxx"TAG="$APP_NAME:$DATE"
docker build -t $TAG -f Dockerfile .docker login $HARBOR_DOMIANNEW_TAG="$HARBOR_DOMIAN/xxxx/$TAG"
docker tag $TAG $NEW_TAG
docker push $NEW_TAG
echo "$TAG uploaded successfully"docker run -d --name $APP_NAME-$DATE -p $APP_PORT:$APP_PORT $NEW_TAGecho "Successfully started"

具体的配置如下:

点击build now会出现一个新的任务:

具体的日志是这样的:

本地和harbor上也确实有这个服务和镜像的存在,这里就不再做进一步的验证了。

最后,总结一下jenkins的自动化流程的步骤:

pipline流水线

参考文章:pipeline流水线

以上就是shigen最近几天学习的成果,关于CICD流水线实战的全部内容。后期也会攻克k8s,期待进一步和大家分享。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker容器基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Docker概述1、docker是什么2、Docker的设计宗旨3、容器在内核中支持2种重要技术: 三、Docker的核心概念四、Docker相关命令1.安装依赖包2.设置阿里云…

STM32 F103C8T6学习笔记2:GPIO的认识—GPIO的基本输入输出—点亮一个LED

今日继续学习使用 STM32 F103C8T6开发板 点亮一个LED灯,文章提供源码,测试工程,实验效果图,希望我的归纳总结会对大家有帮助~ 目录 GPIO的认识与分类 : 引脚安排整理: 定时器的引脚例举: …

Linux:shell脚本 正则表达式与AWK

一、正则表达式 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件…

硬件产品经理:从入门到精通(新书发布)

目录 简介 新书 框架内容 相关课程 简介 在完成多款硬件产品从设计到推向市场的过程后。 笔者于2020年开始在产品领域平台输出硬件相关的内容。 在这个过程中经常会收到很多读者的留言,希望能推荐一些硬件相关的书籍或资料。 其实,笔者刚开始做硬…

【UE】Web Browser内嵌网页的使用

零、准备 1.在Edit菜单打开插件界面 搜索Web Browser并勾选,按提示重启引擎。 2.在资源窗口右键创建Widget Blueprint,并打开 3.搜索canvas panel 并拖拽到下方 4.在实验分类中找到Web Browser拖拽到Canvs Panel下 4.选中WebBrowser在右侧细节面板中…

pycharm,VSCode 几个好用的插件

pycharm Tabnine AI Code 可以在编写程序的时候为你提供一些快捷方式,增加编程速度 Chinese 对英文不好的程序员来说是个不错的选择,可以将英文状态下的pycharm变为中文版的 ChatGPT 可以跟ai聊天,ai可以解决你80%的问题 ,也可以帮…

用对角线去遍历矩阵

声明 该系列文章仅仅展示个人的解题思路和分析过程,并非一定是优质题解,重要的是通过分析和解决问题能让我们逐渐熟练和成长,从新手到大佬离不开一个磨练的过程,加油! 原题链接 用对角线遍历矩阵https://leetcode.c…

自动化安装系统(一)

系统安装过程 加载boot loader加载启动安装菜单加载内核和initrd文件加载根系统运行anaconda的安装向导 安装光盘中与安装相关的文件 安装autofs启动后会自动出现/misc目录。 在虚拟机设置中添加CD/DVD,使用系统ISO文件,登录系统后mount /dev/cdrom …

【UE4 RTS】07-Camera Boundaries

前言 本篇实现的效果是当CameraPawn移动到地图边缘时会被阻挡。 效果 步骤 1. 打开项目设置,在“引擎-碰撞”中,点击“新建Object通道” 新建通道命名为“MapBoundaries”,然后点击接受 2. 向视口中添加 阻挡体积 调整阻挡体积的缩放 向四…

Redis中的数据类型

Redis中的数据类型 Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型: 字符串string哈希hash列表list集合set有序集合sorted set

【vue】简洁优雅的火花线、趋势线

来由 在github发现个好看易用的vue趋势线组件,特此记录。 效果 趋势图生成后效果如上,线条为渐变色,可设置是否平滑。具体线条走势,根据数据动态生成。 使用 安装 npm i vuetrend -S 引入 import Vue from "vue"…

Triangle Area

三角形面积,同底等高,等底等高,等底同高,转换 2 3 5 7 10 15 ? 32

Python系统学习1-9-类(一)

一、类之初印象 1、类就是空表格,将变量(列名)和函数(行为)结合起来 2、创建对象,表达具体行 3、创建类就是创建数据的模板 --操作数据时有提示 --还能再组合数据的行为 --结构更加清晰 4、类的内存分配…

LeetCode 778. Swim in Rising Water【最小瓶颈路;二分+BFS或DFS;计数排序+并查集;最小生成树】2096

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

计算机视觉五大核心研究任务全解:分类识别、检测分割、人体分析、三维视觉、视频分析

目录 一、引言1.1 计算机视觉的定义1.1.1 核心技术1.1.2 应用场景 1.2 历史背景及发展1.2.1 1960s-1980s: 初期阶段1.2.2 1990s-2000s: 机器学习时代1.2.3 2010s-现在: 深度学习的革命 1.3 应用领域概览1.3.1 工业自动化1.3.2 医疗图像分析1.3.3 自动驾驶1.3.4 虚拟现实与增强现…

java面试基础 -- ArrayList 和 LinkedList有什么区别

目录 基本介绍 有什么不同?? ArrayList的扩容机制 ArrayLIst的基本使用 基本介绍 还记得我们的java集合框架吗, 我们来复习一下, 如图: 可以看出来 ArrayList和LinkedList 都是具体类, 他们都是接口List的实现类. 但是他们底层的逻辑是不同的, 相信学过这个的应该大概有…

CI+JUnit5并发单测机制创新实践

目录 一. 现状问题 二. 分析原因 三. 采取措施 四. 实践步骤 五. 效能提升 资料获取方法 一. 现状问题 针对现如今高并发场景的业务系统,“并发问题” 终归是必不可少的一类(占比接近10%),每次出现问题和事故后&#xff0c…

JVM基础了解

JVM 是java虚拟机。 作用:运行并管理java源码文件锁生成的Class文件;在不同的操作系统上安装不同的JVM,从而实现了跨平台的保证。一般在安装完JDK或者JRE之后,其中就已经内置了JVM,只需要将Class文件交给JVM即可 写好的…

Linux MQTT智能家居项目(LED界面的布局设置)

文章目录 前言一、LED界面布局准备工作二、LED界面布局三、逻辑实现总结 前言 上篇文章我们完成了主界面的布局设置那么这篇文章我们就来完成各个界面的布局设置吧。 一、LED界面布局准备工作 首先添加LED灯光控制的图标。 将选择好的LED图标添加进来: 图标可以…

SpringBoot 配置⽂件

SpringBoot 配置⽂件 1. 配置文件的作用2. .配置⽂件的格式2.1 properties2.1.1 基本语法2.1.2 读取配置⽂件 2.2 yml2.2.1 概念2.2.2 基本语法2.2.3 配置对象2.2.4 配置集合 2.3 properties 和 yml 对比 1. 配置文件的作用 整个项⽬中所有重要的数据都是在配置⽂件中配置的&a…