DevOps之Jenkins的CICD

news2024/12/26 23:08:43

文章目录

  • CI&CD架构
  • Jenkins介绍
  • GitLab安装
  • SonarQube安装
  • Harbor安装
  • 目标服务器的安装与配置
  • Jenkins安装
  • Jenkins集成SonarQube与target
  • Jenkins集成Gitlab
  • 推送代码到目标服务器
  • 构建项目镜像

CI&CD架构

在这里插入图片描述

Jenkins介绍

在这里插入图片描述
Jenkins是一个独立的开源软件项目,是基于Java开发的一种CI(Continuous integration,持续集成)&CD(Continuous Delivery,持续交付)工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。其前身是商业软件Hudson。可用于自动化各种任务,如构建,测试和部署软件。

Jenkins作为一个可扩展的自动化服务器,Jenkins可以用作简单的CI服务器,或者变成任何项目的持续交付中心。

Jenkins 只是一个调度平台,其本身并不能完成项目的构建部署。

Jenkins需要安装各种插件,可能还需要编写Shell,python脚本等才能调用和集成众多的组件来实现复杂的构建部署功能

GitLab安装

1.Docker pull 官方镜像
https://hub.docker.com/r/gitlab/gitlab-ce

Gitlab的docker安装官方手册https://docs.gitlab.com/ee/install/docker.html

docker pull gitlab/gitlab-ce

在这里插入图片描述
2.compose.yml

services:
  gitlab:
    image: gitlab/gitlab-ce
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.10.132:9999'
        gitlab_rails['gitlab_shell_ssh_port']=2222
    ports:
      - 9999:9999
      - 2222:2222
    volumes:
      - ./config:/etc/gitlab
      - ./logs:/var/log/gitlab
      - ./data:/var/opt/gitlab

使用docker-compose config 检测语法

[root@ccgitlab gitlab]# docker-compose config -q
[root@ccgitlab gitlab]# docker-compose config --help

Usage:  docker compose config [OPTIONS] [SERVICE...]

Parse, resolve and render compose file in canonical format

Aliases:
  docker compose config, docker compose convert

Options:
      --dry-run                 Execute command in dry run mode
      --format string           Format the output. Values: [yaml | json] (default "yaml")
      --hash string             Print the service config hash, one per line.
      --images                  Print the image names, one per line.
      --no-consistency          Don't check model consistency - warning: may produce invalid Compose output
      --no-interpolate          Don't interpolate environment variables
      --no-normalize            Don't normalize compose model
      --no-path-resolution      Don't resolve file paths
  -o, --output string           Save to file (default to stdout)
      --profiles                Print the profile names, one per line.
  -q, --quiet                   Only validate the configuration, don't print anything
      --resolve-image-digests   Pin image tags to digests
      --services                Print the service names, one per line.
      --variables               Print model variables and default values.
      --volumes                 Print the volume names, one per line.

查看gitlab的初始化登录密码在/etc/gitlab/initial_root_password文件中

[root@ccgitlab gitlab]# docker exec -it gitlab bash
root@4f2e85d0e984:/# cat /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: ryOFN3v1X/MqpacfeTNgFeBMOCobKq5ZT7ZB5VATChM=

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
root@4f2e85d0e984:/# 

在这里插入图片描述
gitlab安装成功啦
在这里插入图片描述

SonarQube安装

SonarQube 是一个开源的代码扫描与分析平台,用来持续扫描、分析和评测项目源代码的质量与安全。
通过 SonarQube 可以检测项目中代码量、安全隐患、编写规范隐患、重复度、复杂度、代码增量、测试覆盖率等多个维度,并通过 SonarQube web UI 展示出来。
SonarQube 支持 30+种编程语言代码的扫描与分析,并能够方便的与代码 IDE、CI/CD 平台完美集成。

SonarQube官方网站:https://www.sonarsource.com/

由于 SonarQube 需要 Postgres 数据库的支持,所以安装 SonarQube 之前需要先安装Postgres 数据库

由于需要启动两个容器,所以这里使用 docker-compose 方式。
在/usr/local 下 mkdir 一个 sonarqube的目录,在其中定义 compose.yml 文件。

vim compose.yml

services:
  postgres:
    image: postgres
    container_name: pgdb
    restart: always
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar

  sonarqube:
    image: sonarqube:9.9-community
    container_name: sonarqb
    restart: always
    depends_on:
      - postgres
    ports:
      - 9000:9000
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://pgdb:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar

在这里插入图片描述
修改虚拟内存大小,
在 /etc/sysctl.conf文件中加上vm.max_map_count = 262144,修改保存后再运行 sysctl –p 命令使 Linux 内核加载文件中的配置。

vim /etc/sysctl.conf

[root@sonarqube sonarqube]# vim /etc/sysctl.conf
[root@sonarqube sonarqube]# sysctl -p
vm.max_map_count = 262144

在这里插入图片描述
密码改了12345678
在这里插入图片描述
安装汉化插件
在这里插入图片描述
在这里插入图片描述

Harbor安装

wget https://github.com/goharbor/harbor/releases/download/v2.7.1/harbor-offline-installer-v2.7.1.tgz

在这里插入图片描述
解压tgz包

tar -zxvf harbor-offline-installer-v2.7.1.tgz -C /usr/local/

在这里插入图片描述
修改harbor.yml配置文件
在这里插入图片描述

在这里插入图片描述

执行prepare
在这里插入图片描述
执行install.sh
在这里插入图片描述
访问登录页,用户名admin,密码是harbor.yml里配置的12345678。
在这里插入图片描述

目标服务器的安装与配置

由于目标服务器需要从镜像中心 Harbor 中 docker pull 镜像,然后使用 docker run 来运行容器,所以目标服务器中需要安装Docker 引擎。
由于目标服务器需要通过 docker-compose 运行 compose.yml 文件来启动容器,所以目标服务器中需要安装 docker-compose。

Jenkins 通过 SSH 将命令发送到目标服务器,以使目标服务器可以从 Harbor 拉取镜像、运行容器等。所以在目标服务器中需要具有一个用户接收 Jenkins 发送数据的目录。本例将该接收目录创建在/usr/local/jenkins 中。

Processing triggers for systemd (245.4-4ubuntu3.17) ...
安装Jenkins完成!                                           [  OK  ]
active

Jenkins安装完成!                                           [  OK  ]
-------------------------------------------------------------------
访问链接: http://192.168.10.137:8080/
登录秘钥: b07688cb2f854352a94ab4a5a5a63ea1

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

Jenkins安装

docker pull jenkins/jenkins:2.387.1-lts

在这里插入图片描述
启动Jenkins

[root@ccjenkins ~]# docker run --name jenkins \
> --restart always \
> -p 8080:8080 \
> -p 50000:50000 \
> -v /var/jenkins_home:/var/jenkins_home \
> -d jenkins/jenkins:2.387.1-lts

赋予最高权限,之后重启jenkins

chmod -R 777 /var/jenkins_home/
docker restart jenkins

修改插件下载源,将其默认的下载源改为清华源

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json

在这里插入图片描述
查看admin默认密码docker logs jenkins

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

1d5d277e8e3f43b2a97d5986595b3dbc

在这里插入图片描述

访问本主机的8080端口

http://192.168.10.135:8080/

在这里插入图片描述
选择性的安装插件,由汉化插件等
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Jenkins首页
在这里插入图片描述
先安装两个插件
在这里插入图片描述
配置jdk和maven,我们之前已经在/opt/apps目录下下载并解压了jdk和maven的安装包,我们将它们移动到jenkins工作目录下
在这里插入图片描述
在jenkins的管理界面中添加jdk和maven
在这里插入图片描述
在这里插入图片描述
应用保存后Jenkins就安装成功啦

Jenkins集成SonarQube与target

Jenkins中安装SonarScanner

SonarScanner 是一种代码扫描工具,专门用来扫描和分析项目代码质量。扫描和分析完成之后,会将结果写入到 SonarQube 服务器的数据库中,并在 SonarQube 平台显示这些数据

SonarScanner下载 https://www.sonarsource.com/products/sonarqube/downloads/
在这里插入图片描述

解压zip包
在这里插入图片描述
在这里插入图片描述
Jenkins 中集成 SonarScanner,需要 SonarScanner 存在于 Jenkins 服务器中的数据卷目录中。所以将解压后的目录移动到数据卷jenkins_home下并更名为sonar_scanner。
在这里插入图片描述
在这里插入图片描述
修改配置文件
在 sonar-scanner 目录的 conf 目录下有其配置文件 sonar-scanner.properties。修改该配置
文件。
vim sonar-scanner.properties
在这里插入图片描述
在Jenkins管理界面中安装SonarQube Scanner插件
在这里插入图片描述
勾选安装完后重启Jenkins

添加 Sonarqube
打开 Jenkins 的 Manage Jenkins  Configure System 页面,找到 SonarQube servers,添
加 SonarQube 服务器。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
集成target-server
在这里插入图片描述
在这里插入图片描述
然后Test configuration
在这里插入图片描述
初始化Git仓库
在Gitlab上创建一个project
在这里插入图片描述
然后初始化一个本地仓库
在这里插入图片描述
在这里插入图片描述
本地提交到远程的配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Jenkins集成Gitlab

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

查看控制台输出
在这里插入图片描述
此时jenkins工作目录页生成了一个workspace目录
在这里插入图片描述
此时已经成功拉取了我们Java项目的目录结构了
在这里插入图片描述
构建项目Maven打包
在这里插入图片描述
mavne打包成功了,之前失败过一次是因为maven的仓库地址没有配置成国内的镜像站点,导致一些依赖包下载失败
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码质量检测

 /var/jenkins_home/sonar-scanner/bin/sonar-scanner \
> -Dsonar.login=admin \
> -Dsonar.password=12345678 \
> -Dsonar.projectKey=my_hello_jks

在这里插入图片描述
在这里插入图片描述
sonarqube里已经检测到了代码
在这里插入图片描述

推送代码到目标服务器

在这里插入图片描述
应用保存完后立即构建
在这里插入图片描述
第一次构建失败了,控制台日志如下
在这里插入图片描述

构成成功后目标服务器的“/usr/local/jenkins”目录下已经有target文件了,我们的jar包已经被jenkins服务器推送过来了
在这里插入图片描述

构建项目镜像

我们在java项目里已经加上了Dockerfile和compos.yml并且已将将提交到了Gitlab上
在这里插入图片描述
在这里插入图片描述
以上配置完后jenkins点击立即构建
在这里插入图片描述
docker 目录已经传送过来了
在这里插入图片描述
修改代码重新构建然后访问目录服务器
在这里插入图片描述
在这里插入图片描述
访问目标服务器
在这里插入图片描述
成功了!

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

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

相关文章

IIS解析漏洞~IIS6.X漏洞分析

类型代码量作用一句话木马代码量极少配合webshell管理工具使用小马代码量比小马多大马代码量最多功能比较完善(执行命令,文件操作等)图片马里面传有一句话木马 文件解析漏洞是由于中间件错误的将特殊格式的文件解析成可执行网页文件(脚本)&am…

学习记录(8):RAG and PAL and ReAct

咱就是说 习惯了做笔记 不做笔记 这知识真的是一点记不住啊(实则是脑子笨0.o 那咱就狠狠的来记住这个知识点0.o 参考学习:B站GenJi是真想教会你-《【包教包会】一条视频速通AI大模型原理》 文章目录 一、RAG:检索增强生成二、PAL&#xff1a…

VMware Workstation 17 图文安装教程

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

红黑树的实现及测试

目录 1.红黑树的结构 2.红黑树的节点 3.红黑树的实现 1)插入操作 1.u存在且为红 2.u不存在或存在且为黑(且cur 为 parent 的左) 3.u不存在或存在且为黑(且cur 为 parent 的右) 2)查找操作 3&#x…

63、ELK安装和部署

一、ELK日志系统 1.1、ELK平台的定义 ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana 三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求 E:elasticsearch ES分布式索引型非关系数据库,存…

Mybatis学习(2)

分页 目的:减少数据的处理量 方式一:使用limit实现分页,核心SQL sql语法:select * from user limit startIndex,pageSize; 步骤: 1、接口 2、Mapper.xml 3、测试 方式二:使用注解开发 1、…

Java同城货运搬家货运车小程序系统源码

🚚同城搬家不头疼!揭秘“同城货运搬家货运车小程序”的省心秘籍 📱开篇:一键下单,搬家新风尚 告别传统搬家的繁琐与不便,今天给大家种草一款超实用的生活神器——“同城货运搬家货运车小程序”&#xff0…

【设计模式:工厂模式】

目录 工厂模式的特点: 工厂模式种类 简单工厂模式: 简单工厂模式的创建步骤: 简单工厂代码: 工厂模式 : 特点: 工厂模式代码: 抽象工厂模式 抽象工厂的主要组成部分: 抽象…

unity中实现流光效果——世界空间下

Properties{_MainTex ("Texture", 2D) "white" {}_FlowColor ("Flow Color", Color) (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) 1.0 // 流光…

二维码门楼牌管理应用平台建设:实有单位采集管理

文章目录 前言一、实有单位信息采集:构建城市信息基石二、快速查询功能:精准定位,一触即达三、单位详情全面展示:历史轨迹,一目了然四、信息核实机制:确保数据准确无误五、单位注销流程:灵活管理…

Jenkins保姆笔记(1)——基于Java8的Jenkins安装部署

前言 记录分享下Jenkins的相关干货知识。分2-3篇来介绍Jenkins的安装部署以及使用。还是和以前一样,文章不介绍较多概念和细节,多介绍实践过程,以战代练,来供大家学习和理解Jenkins 概念 Jenkins是一个开源的自动化服务器&…

7.31 Day13 DHCP服务器的配置与管理

DHCP服务及其工作原理 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)提供了动态配置IP地址的功能。在DHCP网络中,客户端不再需要自行输入网络参数,而是由DHCP服务器向客户端自动分配。 DHCP服务工作端…

拓扑未来物联网平台简介

拓扑未来物联网平台是基于Thingsboard二次开发的面向产业互联和智慧生活应用的物联网PaaS平台,支持适配各种网络环境和协议类型,可实现各种传感器和智能硬件的快速接入。有效降低物联网应用开发和部署成本,满足物联网领域设备连接、智能化改造…

day27——homework

1、使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <fcntl.h> #include <uni…

释放自动化测试潜能:性能优化策略与实战技巧!

引言 在当今追求软件快速迭代的环境下&#xff0c;自动化测试的性能瓶颈正成为制约开发流程加速的主要障碍。本文将深入探讨如何通过策略和实践&#xff0c;优化自动化测试的性能&#xff0c;实现测试执行速度的质的飞跃。 自动化性能瓶颈的识别与突破 首先&#xff0c;识别并…

Day4

请求与响应 请求和响应是Web应用的基本组成部分&#xff0c;它们处理客户端&#xff08;通常是浏览器&#xff09;和服务器之间的交互。 注意三个常见的请求和响应就行&#xff1a; 【注意】&#xff1a; 关于重定向&#xff1a; 浏览器向某个网站发来请求&#xff0c;该网…

在Windows系统上生成SSH秘钥

SSH秘钥是指在SSH协议中使用的加密密钥&#xff0c;用于实现安全认证和数据加密。SSH秘钥通常指的是一对密钥&#xff1a;公钥&#xff08;Public Key&#xff09;和私钥&#xff08;Private Key&#xff09;。 使用以下命令生成SSH密钥 输入下面命令行生成SSH秘钥&#xff0c…

slot 插槽的方式

当组件作为标签使用时&#xff0c;子组件中用slot标签占一个位置&#xff0c;父组件可以在此填充数据&#xff0c;父组件未填充数据&#xff0c;有默认数据 则显示默认数据 具名插槽&#xff1a;子组件中slot标签有name属性&#xff0c;如name“title”&#xff0c;父组件可以用…

Spring面试篇章——Spring基本概述

Spring 的基本概述 Spring学习的核心内容—一图胜千言 IOC&#xff1a;控制反转&#xff0c;可以管理 Java 对象AOP&#xff1a;切面编程JDBCTemplate&#xff1a;是Spring提供一套访问数据库的技术&#xff0c;应用性强&#xff0c;相对好理解声明式事务&#xff1a;基于IOC …

操作系统篇--八股文学习第十一天|进程调度算法你了解多少,进程间有哪些通信方式,解释一下进程同步和互斥,以及如何实现进程同步和互斥

进程调度算法你了解多少&#xff1f; 答&#xff1a; 先来先服务&#xff1a;按照请求的顺序进行调度。 这种调度方式简单&#xff0c;但是能导致较长作业阻塞较短作业。最短作业优先&#xff1a;非抢占式的调度算法&#xff0c;按估计运行时间最短的顺序进行调度。 但是如果…