[Docker实现测试部署CI/CD----自由风格的CI操作[中间架构](4)]

目录

  • 10、自由风格的CI操作(中间架构)
    • 中间架构图
    • 创建web项目
    • Idea提交项目到远程仓库
    • 提交代码到本地库
    • 提交代码到远程库
    • 从jenkins拉取代码
      • 新建任务
      • jenkins集成gitlab
      • 立即构建
    • 将项目打为jar包
      • Jenkins 配置 mvn 命令
      • 重新构建
    • 代码质量检测
    • jenkins将代码推送到目标服务器
    • 构建镜像启动容器
      • 定义 Dockerfile
      • 定义 compose.yml
      • 推送到 GitLab
      • 再配置构建后操作
      • 重新构建

10、自由风格的CI操作(中间架构)

中间架构图

在这里插入图片描述

创建web项目

        创建一个 web 项目,就使用简单的 spring boot 工程,例如工程名为 hellojks。仅需导 入 spring web 依赖即可。

在这里插入图片描述

在这里插入图片描述

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")public String helloHandle(){return "Hello Jenkins!!!!";}
}

在这里插入图片描述

启动测试,访问成功

在这里插入图片描述

Idea提交项目到远程仓库

在gitlab中创建一个远程仓库,用于管理之前创建的web工程

在这里插入图片描述

在这里插入图片描述

Idea创建本地库

在这里插入图片描述

        仿照远程仓库页面中的 Git global stetup 中的命令,在项目的 Terminal 窗口中创建一个全局用户。

在这里插入图片描述

提交代码到本地库

在项目上右击,选择 Git -> Commit Directory

在这里插入图片描述

        此时会弹出一个 Commit to master 的窗口。在其中选择要提交的文件,并在文本区填写提交日志。然后 Commit

在这里插入图片描述

然后会看到警告,不影响提交,直接再 Commit Anyway 即可。

在这里插入图片描述

提交代码到远程库

首先要从远程仓库中获取仓库地址。选择复制 Clone with HTTP 的地址。

在这里插入图片描述

然后在项目上右键,选择 Git -> Push

在这里插入图片描述

在新窗口中点击 Define remote,在弹出的窗口中粘贴进复制来的远程仓库地址。

在这里插入图片描述

在这里插入图片描述

Push 后会弹出访问 GitLab 的登录窗口
输入用户名 root,密码为前面GitLab修改过的密码

在这里插入图片描述

推送成功后,在 idea 右下角即可看到成功提示。

在这里插入图片描述

此时刷新 GitLab 页面,即可看到推送来的项目。
在这里插入图片描述

从jenkins拉取代码

新建任务

在这里插入图片描述

jenkins集成gitlab

在这里插入图片描述

对于 public 的 GitLab 仓库,直接指定仓库地址,应用保存即可。但对于 private 仓库,则需要指定访问 GitLab 的用户名与密码。点击添加按钮,即可打开下面的窗口。

在这里插入图片描述

        在其中填写用户名与密码后“添加”即可返回之前的页面,此时在 Credentials 下拉框中 即可找到新添加的用户信息,选择即可。

在这里插入图片描述

立即构建

在这里插入图片描述

查看控制台输出

在这里插入图片描述

在这里插入图片描述

        上面是第二次构建,在第一次构建时,Jenkins执行 git init /var/jenkins_home/workspace/my_hellojks 命令可以看出,Jenkins 将其容器内的/var/jenkins_home/workspace/my_hellojks 目录作为项目的本地仓库,也就是数据卷目录。进入 jenkins 数据卷可以看到该项目已经存在了。

在这里插入图片描述
在这里插入图片描述

将项目打为jar包

        在 Jenkins 能够通过配置,调用本地的 maven 的 mvn 命令,将拉取来的项目打为 Jar 包。

Jenkins 配置 mvn 命令

在这里插入图片描述

        点击配置后,打开配置页面。然后点击 Build Steps,跳转到以下位置。

在这里插入图片描述

调用顶层 Maven 目标,使用前面配置的 Maven 来完成打包任务。

“clean package -DskipTests” 是一个 Maven 命令,用于构建 Java 项目并跳过运行测试。

在这里插入图片描述

重新构建

在这里插入图片描述

构建成功

在这里插入图片描述

        构建成功后进入 jenkins 数据卷目录/var/jenkins_home/workspace/my_hellojks 中可以看 到新增了 target 目录("target" 目录是 Maven 构建工具生成的默认目录,用于存放构建过程中生成的各种输出文件。)。打开 target 目录,可以看到打出的 jar 包。
在这里插入图片描述

代码质量检测

        在 Jenkins 的 my_hellojks 项目中应用 SonarScanner 对其代码进行质量检测。所以 需要在该项目中配置 SonarScanner

在这里插入图片描述

在这里插入图片描述

        再次执行立即构建,构建成功后,刷新 SonarQube 页面,便可看到新增了一个项目。

在这里插入图片描述

构建成功,查看页面
在这里插入图片描述

在这里插入图片描述

jenkins将代码推送到目标服务器

在这里插入图片描述

在这里插入图片描述

        在返回的任务首页中,再次执行立即构建。查看日志可以看到连接目标服务器,推送 1 个文件的日志。

在这里插入图片描述

目标服务器查看,可以看到 jar 包已经推送了过来。

在这里插入图片描述

构建镜像启动容器

        通过在 Jenkins 中配置在目标服务器中将要执行的相关命令,使得 Jenkins 将 jar 包推送 到目标服务器后,立即自动执行配置的命令,将 jar 包构建为一个镜像,并启动其相应的容 器,使项目启动运行。

定义 Dockerfile

        若要构建镜像,就需要定义其 Dockerfile。现在 Idea 的工程中新建一个 Directory,例如 docker,然后在其中新建一个 Dockerfile

        idea终端执行mvn clean package, 是一个 Maven 命令,用于清理项目并执行构建操作。

在这里插入图片描述

在这里插入图片描述

Dockerfile文件内容

FROM openjdk:8u102
LABEL auth="shengxia" email="shengxia@163.com"
COPY hellojenkins-0.0.1-SNAPSHOT.jar /jenkins/hellojenkins.jar # 复制到目标服务器所在的目录
WORKDIR /jenkins
ENTRYPOINT ["java", "-jar", "hellojenkins.jar"]

定义 compose.yml

        在 idea 的新建目录中再新建一个 compose.yml,用于构建镜像和启动容器。

在这里插入图片描述

services:hellojenkins:build: ./image: hellojenkinscontainer_name: myhellojenkinsports:- 8080:8080

推送到 GitLab

在这里插入图片描述

再配置构建后操作

在这里插入图片描述

重新构建

        Jenkins 中在返回的任务首页中,再次执行立即构建。构建成功后,查看目标服务器中的/jenkins 目录,发现 docker 目录及其下的两个 docker 文件已经存在了,且 jar 包 也复制了进来。

在这里插入图片描述

        在目标服务器中 docker images,可以看到 hellojenkins 镜像已经生成。

在这里插入图片描述

在目标服务器中 docker ps,可以看到容器已经启动了。

在这里插入图片描述

在浏览器中访问目标服务器中的应用,已经可以访问了。

在这里插入图片描述

        修改idea中的代码,然后push到gitlab上面,点击构建,就可以实现交付了

修改代码

package com.example.hellojenkins.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")public String helloHandle(){return "Hello Jenkins. This is the second modified!!!!";}
}

立即构建
在这里插入图片描述

查看
在这里插入图片描述

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

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

相关文章

Java on Azure Tooling 6月更新|标准消费和专用计划及本地存储账户(Azurite)支持

作者:Jialuo Gan - Program Manager, Developer Division at Microsoft 排版:Alan Wang 大家好,欢迎阅读 Java on Azure 工具的六月更新。在本次更新中,我们将介绍 Azure Spring Apps 标准消费和专用计划支持以及本地存储账户&…

黑马大数据学习笔记5-案例

目录 需求分析背景介绍目标需求数据内容DBeaver连接到Hive建库建表加载数据 ETL数据清洗数据问题需求实现查看结果扩展 指标计算需求需求指标统计 可视化展示BIFineBI的介绍及安装FineBI配置数据源及数据准备 可视化展示 P73~77 https://www.bilibili.com/video/BV1WY4y197g7?…

如何使用自己域名进行远程访问内网群晖NAS 6.X

使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 文章目录 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 在之前的文章中,我们向大家演示了如何使用cpolar,创建一条固定的、能够在公共互联网登录内网群晖NAS的数据隧道。这条隧道已经能够应对…

深度分析卡尔曼滤波算法原理

一、什么是卡尔曼滤波? 你可以在任何含有不确定信息的动态系统中使用卡尔曼滤波,对系统下一步的走向做出有根据的预测,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。 在连续变化的系统中使用卡尔曼滤波是非常理想的&#xff0c…

java+springboot摄影作品竞赛报名系统 微信小程序--论文

随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化,网络化和电子化。网上管理,它将是直接管理摄影竞赛小程序的最新形式。本小程序是以构建摄影竞赛为目标,使用java技术制作,…

程序员编写文档的 10 个技巧

编写好的文档在软件开发领域具有重大意义。文档是概述特定问题陈述、方法、功能、工作流程、架构、挑战和开发过程的书面数据或指令。文档可以让你全面了解解决方案的功能、安装和配置。 文档不仅是为其他人编写的,也是为自己编写的。它让我们自己知道我们以前做过什…

大数据Flink(五十八):Flink on Yarn的三种部署方式介绍

文章目录 Flink on Yarn的三种部署方式介绍 一、​​​​​​​Session模式

F5 LTM 知识点和实验 12-使用规则和本地流量策略定制应用程序交付

第十一章:iapp(忽略) 第十二章:使用规则和本地流量策略定制应用程序交付 用最简单的术语来说,iRule是在网络流量通过BIGIP系统时对其执行的脚本。其思想非常简单:规则使您能够编写简单的网络感知代码片段,这些代码以各种方式影响您的网络流量。无论您是希望以BIG-IP内置…

前沿分享-100 μAh 微型电池

这是SMD 组件形状的固态锂离子微型电池,容量高达 100Ah,在22年的慕尼黑电子展上出现过。 因为是可重复使用的,未来该产品甚至有机会取代容量更高(例如100 Ah 时)的不可充电硬币电池。 一般应用于超低功率的传感器&…

宋浩概率论笔记(四)数字特征

本帖更新数字特征,包含期望、方差、相关系数等,要点在于记忆性质中的各种公式,遇到题目时能迅速利用已知条件计算答案。

IDEA删除本地git仓库、创建本地git仓库、关联其他仓库并上传

IDEA删除本地git仓库、创建本地git仓库、关联其他仓库并上传 删除本地Git仓库 创建本地Git仓库 关联其他仓库并上传 要在IntelliJ IDEA中删除本地Git仓库并创建新的本地Git仓库,以及关联其他仓库并上传,请按照以下步骤进行操作: 删除本地G…

文字转语音

键盘获取文字,转化为语音后保存本地 from win32com.client import Dispatch from comtypes.client import CreateObject from comtypes.gen import SpeechLib speakerDispatch(SAPI.SpVoice) speaker.Speak(请输入你想转化的文字) datainput(请输入:)#s…

DROP USER c##xyt CASCADE > ORA-01940: 无法删除当前连接的用户

多创建了一个用户,想要给它删除掉 一 上执行过程,确实删除成功了 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing optionsSQL> DR…

Self-Attention、transformer代码、word2vec理论(skip-gram、CNOW)、近似训练 (第十三次组会)

@[TOC](Self-Attention、transformer代码、word2vec理论(skip-gram、CNOW)、近似训练 (第十三次组会)) Self-Attention相关 Transformer代码

JVM之类加载与字节码(二)

3. 编译期处理 什么是语法糖 所谓的 语法糖 ,其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成 和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利(给…

c++实现Qt信号和槽机制

文章目录 简介信号槽信号与槽的连接 特点观察者模式定义观察者模式结构图 实现简单的信号和槽 简介 信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。  信号和槽机制是 Qt 的核心…

【小沐学NLP】在线AI绘画网站(百度:文心一格)

文章目录 1、简介2、文心一格2.1 功能简介2.2 操作步骤2.3 使用费用2.4 若干示例2.4.1 女孩2.4.2 昙花2.4.3 山水画2.4.4 夜晚2.4.5 古诗2.4.6 二次元2.4.7 帅哥 结语 1、简介 当下,越来越多AI领域前沿技术争相落地,逐步释放出极大的产业价值&#xff0…

【机密计算-大厂有话说】AMD

基于 VirTEE/SEV 的 SEV-SNP 平台证明 刊号 58217,版本 v1.2,发布于 2023.7 1. 介绍 VirTEE/sev 工具箱提供了一套基于 rust 语言的简单易用的 API 来访问 AMD EPYC 处理器内的安全处理器,这个库已经早已经支持传统的 SEV 固件,最…

荐读 | 《揭秘云计算与大数据》

当我们回顾过去几十年的科技进步时,云计算和大数据在现代科技发展史上无疑具有里程碑式的意义,它们不仅改变了我们的生活方式,而且对各行各业产生了深远的影响。 在这个数字化时代,云计算和大数据技术已经成为推动全球发展的关键…

线程池优雅关闭

背景 线程池是日常我们写代码时经常打交道的知识点了,围绕线程池除了core核心线程数和最大max线程数的知识点外,我们一般会忽略然而却绕不开的问题时如何关闭线程池 如何关闭线程池 首先从优雅关闭线程池代码说起: public boolean graful…