[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.rhkb.cn/news/79622.html

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

相关文章

HTTP(超文本传输协议)学习

关于HTTP补学 一、HTTP能干什么 通过下图能够直观的看出:“交换数据 ” 二、HTTP请求例子 一个 HTTP 方法,通常是由一个动词,像 GET、POST 等,或者一个名词,像 OPTIONS、HEAD 等,来定义客户端执行的动作。…

小学语文思维导图:如何写一篇好的作文

大家都知道,思维导图是一款非常高效的工具。我们利用思维导图不仅可以做读书笔记、还可以运用到很多具体细分的场景。今天我们就“如何利用思维导图写好一篇作文”和大家进行分享。 思维导图在写作文的过程中,可以帮助我们整理思路。提高效率。将混乱的内…

【iOS安全】OpenSSH使用

安装OpenSSH 在 Cydia 中直接查找和安装 OpenSSH 使用OpenSSH http://orinchen.github.io/blog/2014/01/15/install-and-use-openssh-on-ios/ 保证PC和iPhone在同一网段下 查看iPhone的IP地址 ssh root10.168.xx.xx 口令默认是alpine 或者也可以使用XShell等集成终端

再次斩获第一,文心3.5霸榜国内大模型

目录 1 什么是文心一言?2 体验与文心一言对话3 文心3.5霸榜国内大模型 1 什么是文心一言? 文心一言是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作&#xf…

数据结构--单链表OJ题

上文回顾---单链表 这章将来做一些链表的相关题目。 目录 1.移除链表元素 2.反转链表 3.链表的中间结点 4.链表中的倒数第k个结点 5.合并两个有序链表 6.链表分割 7.链表的回文结构 8.相交链表 9.环形链表 ​编辑 10.环形链表II ​编辑 ​编辑 1.移除链表元素 思…

2023暑假牛客多校6- E.Sequence

题目描述 You have an array of elements . For each task, you have three integers . Ask whether you can find an array of integers satisfy: are the multiplies of 2 Specially, if , it should satisfy is the multiply of 2 We define . If possible, print…

Java课题笔记~ 动态SQL详解

一、动态 sql 是什么? 1、动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。 例如,拼接时要确保添加了必要的空格,还要…

cnvd通用型证书获取姿势

因为技术有限,只能挖挖不用脑子的漏洞,平时工作摸鱼的时候通过谷歌引擎引擎搜索找找有没有大点的公司有sql注入漏洞,找的方法就很简单,网站结尾加上’,有异常就测试看看,没有马上下一家,效率至上…

Day12-1-Webpack前端工程化开发

Webpack前端工程化 1 案例-webpack打包js文件 1 在index.html中编写代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><me…

20天学会rust(二)rust的基础语法篇

在第一节&#xff08;20天学rust&#xff08;一&#xff09;和rust say hi&#xff09;我们配置好了rust的环境&#xff0c;并且运行了一个简单的demo——practice-01&#xff0c;接下来我们将从示例入手&#xff0c;学习rust的基础语法。 首先来看下项目结构&#xff1a; 项目…

QtWebApp开发https服务器,完成客户端与服务器基于ssl的双向认证,纯代码操作

引言&#xff1a;所谓http协议&#xff0c;本质上也是基于TCP/IP上服务器与客户端请求和应答的标准&#xff0c;web开发中常用的http server有apache和nginx。Qt程序作为http client可以使用QNetworkAccessManager很方便的进行http相关的操作。Qt本身并没有http server相关的库…

zabbix监控mysql容器主从同步状态并告警钉钉/企业微信

前言&#xff1a;被监控的主机已经安装和配置mysql主从同步&#xff0c;和zabbix-agent插件。 mysql创建主从同步&#xff1a;http://t.csdn.cn/P4MYq centos安装zabbix-agent2&#xff1a;http://t.csdn.cn/fx74i mysql主从同步&#xff0c;主要监控这2个参数指标&#xf…

Maven-学习笔记

文章目录 1. Maven简介2.Maven安装和基础配置3.Maven基本使用4.Maven坐标介绍 1. Maven简介 概念 Maven是专门用于管理和构建Java项目的工具 主要功能有: 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;…

微信小程序中的全局数据共享(状态管理)使用介绍

开发工具&#xff1a;微信开发者工具Stable 1.06 一、状态管理简介 微信小程序全局状态是指可以在不同页面之间共享的数据或状态。 它可以存储用户的登录状态、个人信息、全局配置信息等。 二、安装MobX 1、安装NPM 在资源管理器的空白地方点右键&#xff0c;选择“在外部…

无涯教程-Perl - endhostent函数

描述 此函数告诉系统您不再希望使用gethostent从hosts文件读取条目。 语法 以下是此函数的简单语法- endhostent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perlwhile( ($name, $aliases, $addrtype, $length, addrs)gethostent() ) …

5个可以创意灵感的AI绘画工具

当设计灵感耗尽&#xff0c;陷入创作瓶颈时&#xff0c;人工智能艺术生成器可能会为您提供新的启示。这些基于深度学习和发展“神经网络”的工具可以将输入的文本描述或图像转换成各种风格的艺术作品&#xff0c;并提供丰富的风格参数和材料库&#xff0c;让您可以自由调整和创…

【Linux】网络套接字知识点补足

目录 1 地址转换函数 1.1 字符串转in_addr的函数: 1.2 in_addr转字符串的函数: 1.3 关于inet_ntoa 2 TCP协议通讯流程 1 地址转换函数 本节只介绍基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位 的IP 地址但是我们通常用点分十进制的字符串…

【Java split】split() 函数分割空字符串后数组长度为1的原因以及规避措施(105)

问题现象: import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class test06 {public static void main(String[] args) {// Java split()函数 分割空字符串长度为1的解释&#xff1b;String s2 "";String[] arr2 s2.split(&quo…

Spring 容器原始 Bean 是如何创建的?

以下内容基于 Spring6.0.4。 这个话题其实非常庞大&#xff0c;我本来想从 getBean 方法讲起&#xff0c;但一想这样讲完估计很多小伙伴就懵了&#xff0c;所以我们还是一步一步来&#xff0c;今天我主要是想和小伙伴们讲讲 Spring 容器创建 Bean 最最核心的 createBeanInstan…

【Nginx】静态资源部署、反向代理、负载均衡

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ nginx静态资源部署、反向代理、负载均衡 &…