devops学习笔记-jenkins实现基础ci/cd操作

author author     2022-12-04     796

关键词:

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

操作流程

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

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

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

本地编写代码

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

devops学习笔记-jenkins实现基础CI/CD操作_git_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操作_docker_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操作_git_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操作_docker_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操作_git_13

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

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

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

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

在gitlab 中,确认仓库地址url

devops学习笔记-jenkins实现基础CI/CD操作_docker_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操作_docker_18


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

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

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

devops学习笔记-jenkins实现基础CI/CD操作_docker_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操作_docker_25

 

源码管理

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

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

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

配置maven

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

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

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



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

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

devops学习笔记-jenkins实现基础CI/CD操作_服务器_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操作_git_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操作_docker_32

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

gitlab为代码添加tag标签

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


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

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

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

jenkins添加构建后标签操作

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


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

按照如下填写

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

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


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

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


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

jenkins构建操作

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


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


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

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

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


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

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

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

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

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

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

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

构建其他版本

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

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

开始构建

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


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

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

总结

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

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


容器云原生devops学习笔记——第三期:从零搭建ci/cd系统标准化交付流程(代码片段)

...看了阿里专家带你玩转容器云原生DevOps公开课开始系统的学习DevOps,所以根据学习视频整理出以下学习笔记希望分享给更多对此感兴趣的同学&#x 查看详情

容器云原生devops学习笔记——第三期:从零搭建ci/cd系统标准化交付流程(代码片段)

...看了阿里专家带你玩转容器云原生DevOps公开课开始系统的学习DevOps,所以根据学习视频整理出以下学习笔记希望分享给更多对此感兴趣的同学&#x 查看详情

devops-jenkins-pipeline基础语法

1.jenkins-Pipeline基础语法 1)jenkins-Pipeline总体介绍   •Pipeline,简而言之,就是一套运行与jenkins上的工作流框架,将原本独立运行于单个或多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。   &... 查看详情

devops学习笔记-jenkinspipeline流水线发布

jenkinspipeline介绍要实现CD,先要实现CI。CDPipeline就是一个代码文件,里面把你项目业务场景都通过Groovy代码和Pipeline语法实现,一个一个业务串联起来,全部实现自动化,从代码仓库到生产环境完成部署的自动化流水线。这个过... 查看详情

深入浅出devops:jenkins实战之ci

查看详情

springboot+git+jenkins+docker实现ci/cd

...不去了解,不去实践,这次就以Springboot为底,利用Git,jenkins,Docker实现持续集成和持续部署!开发流程下面是常用的开发流程图:我们简单说说这张图:首先我们会将代码文件、测试文件以及Dockerfile都存在代码仓库里,版本控... 查看详情

容器云原生devops——第一期:devops微服务容器服务(学习笔记)(代码片段)

...看了阿里专家带你玩转容器云原生DevOps公开课开始系统的学习DevOps,所以根据学习视频整理出以下学习笔记希望分享给更多对此感兴趣的同学&#x 查看详情

容器云原生devops学习笔记——第一期:devops微服务容器服务(代码片段)

...看了阿里专家带你玩转容器云原生DevOps公开课开始系统的学习DevOps,所以根据学习视频整理出以下学习笔记希望分享给更多对此感兴趣的同学&#x 查看详情

实现devops需要的工具

...部署:Capistrano、CodeDeploy持续集成(CI):Bamboo、Hudson、Jenkins配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRockGuardRail容器:Docker、LXC、 查看详情

在kubesphere启用基于jenkins的devops(代码片段)

DevOps概述参考KubeSphere官网:https://kubesphere.com.cn/docs/v3.3/devops-user-guide/devops-overview/overview/DevOps是一系列做法和工具,可以使IT和软件开发团队之间的流程实现自动化。其中,随着敏捷软件开发日趋流行,持续集成(CI... 查看详情

在kubesphere启用基于jenkins的devops(代码片段)

DevOps概述参考KubeSphere官网:https://kubesphere.com.cn/docs/v3.3/devops-user-guide/devops-overview/overview/DevOps是一系列做法和工具,可以使IT和软件开发团队之间的流程实现自动化。其中,随着敏捷软件开发日趋流行,持续集成(CI... 查看详情

在kubesphere启用基于jenkins的devops(代码片段)

DevOps概述参考KubeSphere官网:https://kubesphere.com.cn/docs/v3.3/devops-user-guide/devops-overview/overview/DevOps是一系列做法和工具,可以使IT和软件开发团队之间的流程实现自动化。其中,随着敏捷软件开发日趋流行,持续集成(CI... 查看详情

devops架构师--05从零开始构建基于kubernetes的devops平台

...DevOps平台实践DevOps、CI、CD介绍瀑布式流程敏捷开发DevOpsJenkins初体验Kubernetes环境中部署jenkins安装汉化插件Jenkins基本使用演示演示目标演示准备演示过程Master-Slaves(agent)模式Jenkins定制化容器本章小结流水线入门流水线基础语法... 查看详情

devops基础

...如图中的流程图是提供的模板,流水线的实现是通过jenkins创建的,而通过kubesphere可以通过已提供的流水线模板加以改动创建自己的符合项目需求的流水线,可以自动进行代码构建,测试,合并到代码库,... 查看详情

devops基础

...如图中的流程图是提供的模板,流水线的实现是通过jenkins创建的,而通过kubesphere可以通过已提供的流水线模板加以改动创建自己的符合项目需求的流水线,可以自动进行代码构建,测试,合并到代码库,... 查看详情

使用 Jenkins 和 kubernetes 在 CI/CD 管道中实现反馈循环

】使用Jenkins和kubernetes在CI/CD管道中实现反馈循环【英文标题】:FeedbackLoopimplementationinCI/CDpipelineusingJenkinsandkubernetes【发布时间】:2019-12-3107:02:27【问题描述】:目前我正在尝试使用Jenkins和kubernetes等DevOps自动化工具来实现CI/CD管... 查看详情

容器云原生devops学习笔记——第二期:如何快速高质量的应用容器化迁移(代码片段)

...看了阿里专家带你玩转容器云原生DevOps公开课开始系统的学习DevOps,所以根据学习视频整理出以下学习笔记希望分享给更多对此感兴趣的同学&#x 查看详情

:详解jenkins搭建及使用

...Ops系列实战教程:​​手把手教你玩转DevOps全栈技术​​Jenkins概述根据jenkins官网对自己的描述,它是一个​​可集成有1800+插件​​​的自动化服务,提供构建、部署和自动化的工程,可以说是opsdev的大总管,将开发的代码工... 查看详情