当前位置:首页 > 技术 > 正文内容

devops学习笔记-jenkins实现基础CI/CD操作

Lotus2022-10-06 19:05技术

在之前的devops工具链中完成了jenkins以及gitlab配置之后,可以实现基础的CI/CD操作。

操作流程

整体的操作的流程如下所示:

devops学习笔记-jenkins实现基础CI/CD操作_git

在开发环境配置好代码之后,将代码上传到gitlab,jenkins拉取gitlab的代码,由maven插件build,打包好后,构建 docker镜像,上传到目标服务器中运行,可以通过tag选择版本代码。

本地编写代码

使用idea编写一个基础的springboot web项目,代码如下所示:

devops学习笔记-jenkins实现基础CI/CD操作_服务器_02

/*
spring boot web
TestController.java
*/
package yangchao.demo1.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/*
*测试
*/
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
// return "Hello Jenkins ---v2.0.0";
return "Hello Jenkins --v1.0.0";

}
}

运行,确定在本地运行没有问题。

devops学习笔记-jenkins实现基础CI/CD操作_服务器_03

devops学习笔记-jenkins实现基础CI/CD操作_git_04


编写docker文件

在本地开发环境,在项目目录下新增docker目录,编写docerfile生成镜像,配置docker-compose文件,编排运行镜像。

devops学习笔记-jenkins实现基础CI/CD操作_服务器_05

dockerfile如下编写。

devops学习笔记-jenkins实现基础CI/CD操作_docker_06

FROM openjdk:11
COPY mytest.jar /usr/local/
WORKDIR /usr/local
CMD java -jar mytest.jar

说明:

  • FROM: 基础镜像,本次使用openjdk:11,为jdk11版本,切记,docker中基础镜像的java版本最好与本地开发环境版本一致,不然maven构建后的jar包在docker环境中不能运行
  • COPY :将生成的mytest.jar文件复制到容器的/usr/lcoal/目录下
  • WORKDIR:指定工作目录为/usr/local
  • CMD:容器运行的指令,java -jar mytest.jar

docker-compose的文件如下:

devops学习笔记-jenkins实现基础CI/CD操作_服务器_07


version: '3.1'            #版本,可以随意指定  
services:
mytest: #名称,可以随意指定
build:
context: ./ #上下文,即dockerfile所在的目录,为当前目录
dockerfile: Dockerfile # dockerfile的名称
image: mytest:v2.0.0 # doceker镜像版本,随意指定
container_name: mytest # 容器名称
ports: #暴露端口
- 8082:8080 #8082是宿主机端口,8080是容器运行的端口
#注意,不要与宿主机现在使用的端口冲突

本地运行镜像

为了保证生成的镜像能够正确的通过jenkins上传到目标服务器运行,首先在本地运行docker-compose,确保本地能够运行

#进入docker目录
docker-compose up -d # 运行docker-compose
docker image ls # 查看生成镜像
docker ps -a #查看运行的容器

devops学习笔记-jenkins实现基础CI/CD操作_git_08

devops学习笔记-jenkins实现基础CI/CD操作_git_09

devops学习笔记-jenkins实现基础CI/CD操作_服务器_10

此时代表本地运行容器没有问题,可以上传到jenkins了

加速镜像下载

在目标服务器上,可以配置国内代理的docker仓库地址,加快镜像的下载。

#vim /etc/docker/daemon.json  按照如下添加,国内仓库地址可以随便找
"registry-mirrors":["http://hub-mirror.c.163.com"]
systemctl restart docker # 重启docker
docker info # 确认配置是否生效

devops学习笔记-jenkins实现基础CI/CD操作_服务器_11

devops学习笔记-jenkins实现基础CI/CD操作_服务器_12


上传代码到gitlab

在gitlab中,新建一个项目。

devops学习笔记-jenkins实现基础CI/CD操作_docker_13

devops学习笔记-jenkins实现基础CI/CD操作_docker_14

devops学习笔记-jenkins实现基础CI/CD操作_docker_15

项目名称为mytest,project url为root,visblity level 为public公共,任何人都能拉取。

devops学习笔记-jenkins实现基础CI/CD操作_git_16

在gitlab 中,确认仓库地址url

devops学习笔记-jenkins实现基础CI/CD操作_服务器_17

本次为http://192.168.85.6/root/mytest.git

在本机(开发环境),配置git全局信息,能够由开发环境push代码到gitlab

#进入本地代码项目目录
cd ${demo}
git init
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"

配置完成后,由 idea 的vcs工具上传代码到gitlab,在完成commit操作之后,会要求输入gitlab仓库的地址和用户名密码。

devops学习笔记-jenkins实现基础CI/CD操作_git_18


在上传之前,在target目录中的pom.xml,在<build>标签下增加<finalName>mytest</finalName>,意思是说通过 maven打包的jar包的名称为mytest,如下所示:

devops学习笔记-jenkins实现基础CI/CD操作_服务器_19

完成后,就能通过idea push代码到gitlab。gitlab上能够确认到上传的代码。

devops学习笔记-jenkins实现基础CI/CD操作_服务器_20


配置 jenkins的ITEM

本地测试完成后的代码上传到gitlab之后,需要配置 jenkins能够从gitlab拉取代码,同时构建打包,并使用docker的方式发送到目标服务器执行。

配置目标服务

在安装了publisher over ssh 插件后,jenkins就能连接到目标服务器并上传文件。

devops学习笔记-jenkins实现基础CI/CD操作_服务器_21

找到SSH server,按照如下填写

devops学习笔记-jenkins实现基础CI/CD操作_docker_22

注意,远程路径必须先在目标服务器上建好,不然会推送失败。

配置port端口,一般是22,完成后点击Test进行连接测试,success就测试通过。完成后应用保存。

devops学习笔记-jenkins实现基础CI/CD操作_git_23

jenkins新建任务

点击新建ITEM,新建任务

devops学习笔记-jenkins实现基础CI/CD操作_服务器_24

使用freestyle project新建一个基础任务

devops学习笔记-jenkins实现基础CI/CD操作_服务器_25

 

源码管理

点击git,配置源码管理,仓库地址http://192.168.85.6/root/mytest.git。

devops学习笔记-jenkins实现基础CI/CD操作_docker_26

由于本次仓库为公有仓库,所以任何人都能拉取,所以无需填写。如果上传的仓库为私有仓库的话,则需要填写相关信息。通过这个方式,就能让jenkins从gitlab拉取到代码。

配置maven

在jenkins上,能够对拉取到的代码执行打包,生成jar包。在build Steps中,选择maven,增加新增步骤为"Invke top-level Maven targets",目标中按照如下填写:

clean package -DskipTest     #mvn命令,maven在构建的时候清理原来的包并
#跳过测试,这样能加快构建速度。

devops学习笔记-jenkins实现基础CI/CD操作_git_27



配置上传打包文件到目标服务器

需要在jenkins添加构建后操作,将生成的jar包上传到目标服务。一般默认的jenkins上,会将由maven生成的target文件保存到jenkins指定目录,为/root/.jenkins/workspace/下,其中的mytest就是本次构建的项目名称

devops学习笔记-jenkins实现基础CI/CD操作_git_28

此时,我们需要在jenkins上使用publish over ssh 插件,将这些文件上传到目标服务器。选择“ send build artifacts over ssh"

devops学习笔记-jenkins实现基础CI/CD操作_服务器_29

在SSH Server中,选择之前配置好的服务器”localhost"。Transfer Set中,填写要从jenkins上传的文件。

target/* jar docker /* #将jenkins的target目录生成的jar包和docker目录下文件传送给到目标服务器。

devops学习笔记-jenkins实现基础CI/CD操作_docker_30

添加构建后执行命令。在jenkins构建后并传输文件后,执行docker命令,这样就能自动在目标服务器上运行容器。

cd /root/jenkins_test/docker   #切换到目标服务器远程路径,在docker目录下,切记要使用绝对路径
mv ../target/*.jar ./ #将上层targer目录下的jar包移动到当前路径
docker-compose down #运行docker-compose之前先关闭之前的
docker-compose up -d --build # 运行
docker image prune -f #清理目标服务器上没有使用的镜像。

devops学习笔记-jenkins实现基础CI/CD操作_git_31

配置tag标签

在安装了git Parameter插件后,此时就能通过tag标签发布不同版本。

devops学习笔记-jenkins实现基础CI/CD操作_服务器_32

名称填写tag,参数类型为"标签“,默认值为”origin/master",应用保存。

gitlab为代码添加tag标签

在gitlab上为项目增加标签,注意选择master分支。


devops学习笔记-jenkins实现基础CI/CD操作_git_33

按照如下填写标签内容,保存应用。

devops学习笔记-jenkins实现基础CI/CD操作_docker_34

jenkins添加构建后标签操作

为了让jenkins能够选择不同的tag标签构建镜像,需要增加git checkout 操作。在build steps中增加构建后操作,类型为"Excute shell"


devops学习笔记-jenkins实现基础CI/CD操作_git_35

按照如下填写

git checkout $tag   # 此处的tag变量代表之前的构建后添加tag的动作的值

devops学习笔记-jenkins实现基础CI/CD操作_docker_36


注意,一定要将该动作通过鼠标拖拽的方式,移到最前面。

devops学习笔记-jenkins实现基础CI/CD操作_docker_37


至此,完成了jenkins的ITEM的配置,点击应用保存。

jenkins构建操作

完成了ITEM的配置,接下来就是可以进行构建任务。在jenkins上完成了git parameters插件配置后,也在gitlab上增加的tag标签后,那么在jenkins上构建的时候就能选择不同的 tag首先发布不同的版本。


devops学习笔记-jenkins实现基础CI/CD操作_服务器_38


devops学习笔记-jenkins实现基础CI/CD操作_git_39

选择v1.0.0开始构建,在构建的时候,选择控制台输出,就能看到构建时的日志信息。

devops学习笔记-jenkins实现基础CI/CD操作_git_40


devops学习笔记-jenkins实现基础CI/CD操作_git_41

日志显示success代表构建成功,如果不是,则构建失败,需要排查问题。

devops学习笔记-jenkins实现基础CI/CD操作_git_42

在目标服务器上查看镜像版本和登录应用。

devops学习笔记-jenkins实现基础CI/CD操作_git_43

devops学习笔记-jenkins实现基础CI/CD操作_git_44

此时可以看到目标服务器能够运行应用,而且容器正常启动。

构建其他版本

在构建的时候,选择"v2.0.0",进行发布构建。此时按照我们的步骤,jenkins会重新拿取v2.0.0版本的代码生成jar包,在目标服务上生成v2.0.0版本的镜像并运行。

devops学习笔记-jenkins实现基础CI/CD操作_docker_45

开始构建

devops学习笔记-jenkins实现基础CI/CD操作_docker_46


devops学习笔记-jenkins实现基础CI/CD操作_git_47

结果表明切换版本成功。通过jenkins与docker,我们就能在几秒内完成一个应用的集成发布。

总结

整套jenkins CI/CD流程下来,体验如下:

  1. jenkins必须依靠不同的插件来实现不同功能
  2. jenkins擅长CI持续集成,CD持续交付方面,要对接k8s
  3. 整个CI/CD流程,使用jenkins方式,较为复杂。


扫描二维码推送至手机访问。

版权声明:本文来源于网络,仅供学习,如侵权请联系站长删除。

本文链接:https://news.layui.org.cn/post/144.html

分享给朋友:

“devops学习笔记-jenkins实现基础CI/CD操作” 的相关文章

WinDbg Preview安装以及符号表配置

1、安装WinDbgPreview 在Microsoft Store直接搜索windbg就可以下载。 2、配置符号服务器 2.1 符号 符号是方便调试程序的文件,通常是pdb文件。一个模块(可执行程序,动态链接库)对应一个pdb文件。不同的windows版本中的文件不同(比如说kernel32),版本不同pdb符号文件也不同,因此要从微软提供的符号服务器获取本机对应的符号。 但是要在本地建立一个文...

TTD 专题 (第一篇):C# 那些短命线程都在干什么?

一:背景 1.讲故事 在分析的众多dump中,经常会遇到各种奇葩的问题,仅通过dump这种快照形式还是有很多问题搞不定,而通过 perfview 这种粒度又太粗,很难找到问题之所在,真的很头疼,比如本篇的 短命线程 问题,参考图如下: 我们在 t2 时刻抓取的dump对查看 短命线程 毫无帮助,我根本就不知道这个线程生前执行了什么代码,为什么这么短命,还就因为这样的短命让 线程池 的线程暴增。...

ETL工具Datax、sqoop、kettle 的区别

一、Sqoop主要特点: 1.可以将关系型数据库中的数据导入到hdfs,hive,hbase等hadoop组件中,也可以将hadoop组件中的数据导入到关系型数据库中; 2.sqoop在导入导出数据时,充分采用了map-reduce计算框架(默认map数为4),根据输入条件生成一个map-reduce作业(只有map,没有reduce),在hadoop集群中运行。采用map-reduce框架同时在...

国庆节,零代码帮你搞定假期美食菜单

当国庆假期遇上美食 每一口都唇齿留香 特色美食太多,不知道吃什么? AppCube带你一分钟搞定假期美食 来一场舌尖上的旅行 零代码,让假期生活有滋有味 国庆小长假,三五好友结伴出游,最纠结的莫过于中午吃什么,晚上吃什么?翻翻攻略,当地特色美食令人眼花缭乱……体验通过AppCube设计一款“国庆假期美食菜单收集”应用,解决大家的选择困难症。 基于AppCube零代码能力,小白也能DIY应用开发...

【微信小程序】小程序的宿主环境

????系列专栏:微信小程序 ????欢迎关注????点赞????收藏⭐留言???? ✅个人主页:​​hacker_demo的51CTO博客​​ ????个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生,我自己书写,余生很长,请多关照,我的人生,敬请期待???????????? 宿主环境简介 宿主环境(host environ...

将 N 叉树编码为二叉树

将 N 叉树编码为二叉树 作者:Grey 原文地址: 博客园:将 N 叉树编码为二叉树 CSDN:将 N 叉树编码为二叉树 题目描述 将一棵n叉树编码为一棵二叉树,并对二叉树进行解码,得到原始的n叉树。 n叉树是一棵有根树,其中每个节点的子树不超过n个。 类似地,二叉树是一棵有根树,其中每个节点的子树不超过2个。 编码/解码算法的工作方式不受限制。 您只需要确保一个n叉树可以被编码为一个二叉树,并...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。