云计算运维 · 第三阶段 · 代码上线案例

学习b记 · 第三阶段

持续集成案例

这一章做一个小的案例,git、gitlab、jenkins、sonarqube、maven、shell把这周学的一整个流程串联起来做一个完整的代码发布流程案例,这一部分东西比较多,相对于之前的笔记这个会做的仔细一点。#嘿嘿回家就是舒服
主机名服务IP
shellgit、gitlab10.0.0.200
jenkinsjenkins、maven10.0.0.201
nexusnexus10.0.0.202
sonarqubesonarqube10.0.0.203
web02nginx10.0.0.8

一、Git

     Git*(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
1、安装
#防火墙啥的就不写了该关关
1)yum install git -y #一般系统都有
    #安装后配置一下用户和邮箱,不配置不让推项目
    [root@shell /]# git config --global user.name "qxl" 
    [root@shell /]# git config --global user.email "qxl@mail.com"
    # 语法高亮
    [root@shell /]# git config –-global color.ui true
    #配置完了看一下
    [root@shell /]#  git config --list
    user.name=qxl
    user.email=qxl@mail.com
    color.ui=true
    #这样git就算配置完毕
2)初始化
    #这一步就是准备个目录用作于使用git
    [root@shell git_workspace]#  git init
    Initialized empty Git repository in /root/git_workspace/.git/
    #在家目录下创建一个目录git_workspace,初始化完会生成.git隐藏目录
    [root@shell git_workspace]# ll -a
    total 0
    drwxr-xr-x  3 root root  18 Feb  7 00:29 .
    dr-xr-x---. 3 root root 206 Feb  7 00:29 ..
    drwxr-xr-x  7 root root 119 Feb  7 00:29 .git
3)隐藏文件介绍:
    cd .git
    branches # 分支目录
    config   # 定义项目特有的配置选项
    description  # 仅供git web程序使用
    HEAD # 指示当前的分支
    hooks # 包含git钩子文件
    info # 包含一个全局排除文件(exclude文件)
    objects # 存放所有数据内容,有info和pack两个子文件夹
    refs # 存放指向数据(分支)的提交对象的指针
    index # 保存暂存区信息,在执行git init的时候,这个文件还没有
2、使用
    1)创建数据——提交数据
    创建的git_workspace是本地工作目录,通过git add提交到暂存区域,在git commit从暂存区提交到本地仓库,最后git push到远程仓库,可以通过远程仓库进行拉取或者克隆#图画的比较草率,这样就差不多了,基础命令前面文章有写

在这里插入图片描述

二、Gitlab

1、安装
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
#我用的包是这个版本 gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm 去上面的镜像里面找就行
#依赖,需提前安装
yum install -y curl policycoreutils-python openssh-server
#安装gitlab
rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
#修改一下配置文件
vim /etc/gitlab/gitlab.rb                   #  gitlab 配置文件
external_url 'http://10.0.0.200'
gitlab-ctl reconfigure          # 更改配置文件后需重新配置

/opt/gitlab/                    # gitlab的程序安装目录
/var/opt/gitlab                 # gitlab目录数据目录
/var/opt/gitlab/git-dfata       # 存放仓库数据
gitlab-ctl status               # 查看目前gitlab所有服务运维状态
gitlab-ctl stop                 # 停止gitlab服务
gitlab-ctl stop nginx           # 单独停止某个服务
gitlab-ctl tail                 # 查看所有服务的日志

#直接启动
gitlab-ctl start
2、使用
浏览器直接输入10.0.0.200访问,先创建一下密码然后登陆 注意:如果打开页面后502那是你机器给的配置不够,加点内存啥的 #这是登录后的首页

在这里插入图片描述

3、创建组用户 项目
    1)点击上方锤子进入管理区域,点击New group创建组

在这里插入图片描述

    就这样创建即可,下面都是默认选项未改变,名字啥的可以自定义

在这里插入图片描述

    创建用户就填写上面的,没截到图下面还是默认

在这里插入图片描述

    创建完用户需要创建密码,把用户放到组内

在这里插入图片描述

在这里插入图片描述

    接下来就得创建仓库存放项目了,名字可以自定义,描述无所谓

在这里插入图片描述

        创建完后是这样的,上面橙色的部分提示是因为没有做ssh免秘钥,想要来这个页面拉取项目需要服务器的公钥,需要将这个机器的公钥添加到gitlab中,直接点击 add an SSH key

在这里插入图片描述

    #回到服务器生成秘钥对,复制这一堆
    [root@shell ~]# ssh-keygen
    [root@shell ~]# cat .ssh/id_rsa.pub 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLlHNM5ypJriOW3FxS63bC+jv3q3W3iISe/sQHtsiehcRMdTjR4UXRNx66HSwa03MciPLxLMVyEgCn26WdXLoHMDi4siZ7NxB7rYYAY3mO7Qf6lIXVIROXiKIe+NSZ+ebUBKKoE1EhoZzDw0l20EYTwzFR+kHtfgzbVFZwlDWIzUlw/Hl1Mh4cymnmevKVIHCsJIk9vF0wNoxFyG8+zwhjeLV1vh2uuqrdzImuaaokXd7B8NNXT3MAvdre97zjuoIADLvWpVIRuuumQtrjzsOW5xhAdgmPXEK0LWo/7pZMX25tQtpfTDZKZmSiixF1ISQw3jPI6BRoWQUaRykMzAMp root@shell
    复制公钥点击下方按钮添加,这样仓库就设置好了 接下来尝试推送一些文件到gitlab中

在这里插入图片描述

4、测试推送
1)添加远程仓库 #第一次拉取会出现指纹验证直接yes就完了
    [root@shell git_workspace]# git remote add origin git@10.0.0.200:qxl/game.git
2)上传文件
    [root@shell git_workspace]# touch test.txt
    [root@shell git_workspace]# git add .
    [root@shell git_workspace]# git commit -m "test.txt"
3)给爷往上推
    [root@shell git_workspace]# git push -u origin master
    #刷新一下浏览器就出来了 现在git推送就没有问题了

在这里插入图片描述

5、保护分支
#这次的案例就把主要的功能都做通,这些拓展就不做了,还是写一下是干啥的
1)设置保护主分支
    这个功能呢就是保护master主分支除了管理不能让任何人推送,保护线上的代码不出错

在这里插入图片描述

在这里插入图片描述

6、gitlab备份
#这个直接复制过来了,没讲,用得不多
	对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。
	gitlab提供了一个简单的命令行来备份整个gitlab,并且能灵活的满足需求。
	备份文件将保存在配置文件中定义的backup_path中,文件名为TIMESTAMP_gitlab_backup.tar,TIMESTAMP为备份时的时间戳。TIMESTAMP的格式为:EPOCH_YYYY_MM_DD_Gitlab-version。
	如果自定义备份目录需要赋予git权限
	配置文件中加入
vim	/etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = '/data/backup/gitlab'
gitlab_rails['backup_keep_time'] = 604800       #备份保留的时间(以秒为单位,这个是七天默认值),
mkdir /data/backup/gitlab
chown -R git.git /data/backup/gitlab
gitlab-ctl reconfigure

三、Jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
1、安装
链接:https://pan.baidu.com/s/1m4vJbK9DkIjVTppGPT2qWQ?pwd=kxxw 
提取码:kxxw
#这里面放了几个这次案例用的包

安装jenkins需要jdk,这次采用本地安装

[root@jenkins ~]# ls
anaconda-ks.cfg  jdk-8u181-linux-x64.rpm  jenkins-2.176.1-1.1.noarch.rpm
[root@jenkins ~]# rpm -ivh jdk-8u181-linux-x64.rpm 
warning: jdk-8u181-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8-2000:1.8.0_181-fcs        ################################# [100%]
Unpacking JAR files...
	tools.jar...
	plugin.jar...
	javaws.jar...
	deploy.jar...
	rt.jar...
	jsse.jar...
	charsets.jar...
	localedata.jar...
[root@jenkins ~]# rpm -ivh jenkins-2.176.1-1.1.noarch.rpm 
warning: jenkins-2.176.1-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:jenkins-2.176.1-1.1              ################################# [100%]

安装完需要修改一下启动用户

vim /etc/sysconfig/jenkins
JENKINS_USER="root"

修改完直接启动就可以了
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl enable jenkins

安装插件

链接:https://pan.baidu.com/s/1YEgerbWh5-gurQHAcZWdNA?pwd=kxxw 
提取码:kxxw

cd /var/lib/jenkins/ #插件所在目录,把plugins这个目录备份一下,直接解压我分享的包就行了
systemctl restart jenkins #记得重启

jenkins主要的目录
/usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里
/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置
/var/lib/jenkins/:默认的JENKINS_HOME
/var/log/jenkins/jenkins.log:Jenkins日志文件
2、使用
浏览器直接访问ip:8080就会打开下面这个页面,默认密码去它指定位置复制,选择安装插件直接右上角x掉,前面插件已经装上了不需要在安装了

在这里插入图片描述

在这里插入图片描述

默认进来就是这样的了,原来是英文的,访问之前已经安装上插件就会变成中文。接下来是使用jenkins进行操作了,此次案例是用到了三个类型的项目,下面开始操作

四、自由风格项目

点击首页的创建一个新任务后,跳转到这个页面输入名称选择第一个,确定

在这里插入图片描述

修改的部分都会截图,没截图的选项不用动

在这里插入图片描述

这里是将gitlab创建的仓库连接粘贴过来,默认是拉取master分支的项目,错误是因为jenkins无法从gitlab上拉取代码,需要公钥。

在这里插入图片描述

在这里插入图片描述

去jenkins的机器生成一下密钥对,然后把公钥复制到gitlab#怎么生成上面有
复制完之后可以先保存一下项目,去机器上克隆一下项目,添加一下指纹验证
[root@jenkins ~]# git clone git@10.0.0.200:qxl/game.git

在这里插入图片描述

克隆完之后继续配置jenkins项目,这时候你会发现不红了,这样就配置好了,接下来放一个小游戏的代码上去测试一下

在这里插入图片描述

在这里插入图片描述

链接:https://pan.baidu.com/s/1vkBAvBqcEovQuw9k20VMIg?pwd=kxxw 
提取码:kxxw

准备了一个经典小游戏,直接解压到git初始化的目录里面,没用的删了就行
[root@shell git_workspace]# ll
total 48
-rw-r--r-- 1 root root 28032 May 24  2021 bgm.mp3
drwxr-xr-x 2 root root    23 May 24  2021 css
drwxr-xr-x 2 root root    23 May 24  2021 images
-rw-r--r-- 1 root root  8956 May 24  2021 index.html
drwxr-xr-x 2 root root   213 May 24  2021 js
drwxr-xr-x 2 root root  4096 May 24  2021 roms
-rw-r--r-- 1 root root   811 May 24  2021 shuoming.html

给他手动提交一下
[root@shell git_workspace]# rm -rf test.txt
[root@shell git_workspace]# git add *
[root@shell git_workspace]# git commit -m "xbw"
[root@shell git_workspace]# git push -u origin master
提交到远程仓库以后就是下面这样的

在这里插入图片描述

仓库那边代码上传之后就可以用jenkins进行拉取测试了,点击立即构建等待下方进度条,拉取结束后回到机器,/var/lib/jenkins/workspace 这个目录下有一个刚拉下来的项目就ok了
[root@jenkins workspace]# ll
total 0
drwxr-xr-x 7 root root 135 Feb  7 06:08 free_game

在这里插入图片描述

·现在代码可以拉取了,下一步可以给他放到网站里测试,代码拉到jenkins里使用脚本发到web服务器上

·这里准备一台web
·在jenkins服务器上准备一下脚本 给一下执行权限
[root@jenkins scripts]# pwd
/server/scripts
[root@jenkins scripts]# chmod +x xbw.sh 
[root@jenkins scripts]# ls
xbw.sh
[root@jenkins scripts]# cat xbw.sh 
#!/bin/bash
IP=10.0.0.8
tar zcf /opt/game_$BUILD_ID.tar.gz ./*
scp /opt/game_$BUILD_ID.tar.gz $IP:/code/
ssh $IP "mkdir /code/game_$BUILD_ID;"
ssh $IP "cd /code && tar xf game_$BUILD_ID.tar.gz -C game_$BUILD_ID && rm -rf game_$BUILD_ID.tar.gz;" 
ssh $IP "cd /code && rm -rf xbw_game ; ln -s game_$BUILD_ID xbw_game"

·jenkins和web需要做一下免秘钥
·去jenkins项目点击配置拉到下面,选择点击 执行 shell
·把命令粘贴到文本框内   sh /server/scripts/xbw.sh

最后点击构建后代码会直接发送到web指定的目录内
[root@web02 code]# ls
game_5  xbw_game
并且页面也可以直接访问

在这里插入图片描述

在这里插入图片描述

1、添加钩子
#有个地方忘了写,登录进来先改密码,不然每次都得复制很麻烦,先改这个

在这里插入图片描述

拉到下面更改,保存后重新登录

在这里插入图片描述

现在的流程是写完代码手动提交在点击立即构建在部署到web服务器,下一步是添加触发器,在你提交代码到远程仓库,触发钩子自动构建部署到web服务器上。 点击配置 

在这里插入图片描述

点击勾选选项,滑到下面点击Generate生成一个token复制一下

在这里插入图片描述

在这里插入图片描述

复制好之后返回gitlab,点击进入项目左侧导航列设置,点击Integrations将jenkins复制的token粘贴到对应位置,URL是jenkins勾选那个选项最后面的那个http连接,最后将gitlab和jenkins的设置都保存就可以测试了

在这里插入图片描述

操作的详细意义就不写什么意思了,网上有的是,多练练就懂了,测试钩子配置是否成功
#先修改一下index.html,打开往下翻有游戏名称可以加一点标记然后执行下面的操作。
[root@shell git_workspace]# git commit -am "v1.0"
[master bc635fd] v1.0
 2 files changed, 2 insertions(+), 2 deletions(-)
 delete mode 100644 test.txt
[root@shell git_workspace]# git push -u origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 282 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To git@10.0.0.200:qxl/game.git
   4451a4b..bc635fd  master -> master
Branch master set up to track remote branch master from origin.
#将项目推到远程仓库之后,会直接发到web服务器上,我在魂斗罗后面加了个标签显示,可以看到已经ok了

请添加图片描述

五、Sonarqube

	SonarQube是一种自动代码审查工具,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。它可以与您现有的工作流程集成,以实现跨项目分支和提取请求的连续代码检查
	Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来
1、安装
1. SonarQube基础java开发,需安装open JDK8版本
2. SonarQube需要依赖MySQL数据库,至少5.6版本以上
3. SonarQube的小型实例至少4G内存,如果大型实例需要16G内存

Java我上面分享的网盘里面有
安装数据库
下载mysqlyum源
https://dev.mysql.com/downloads/repo/yum/
这个版本看着下我是centos7
下完了上传到服务器上,也可以复制连接直接wget

请添加图片描述

请添加图片描述

#下载完直接安装
[root@sonarqube ~]# rpm -ivh mysql80-community-release-el7-11.noarch.rpm 
warning: mysql80-community-release-el7-11.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:mysql80-community-release-el7-11 ################################# [100%]

#安装完之后会下载三个repo源
[root@sonarqube ~]# ls /etc/yum.repos.d/
CentOS-Base.repo  epel.repo  files  mysql-community-debuginfo.repo  mysql-community.repo  mysql-community-source.repo

#修改一下源  mysql-community.repo 把8.0节点关掉打开5.7的
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch
enabled=1#这里
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch
enabled=0#这里
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
       
#直接安装,安装过程比较慢需要多等一会
[root@sonarqube yum.repos.d]# yum install mysql-community-server -y
[root@sonarqube yum.repos.d]# systemctl start mysqld
启动后默认密码在日志里,末尾12位就是密码
[root@sonarqube yum.repos.d]# cat /var/log/mysqld.log | grep "pass"
密码中有特殊符号加上单引号
[root@sonarqube yum.repos.d]# mysql -uroot -p'Q0kethtukp(<'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 

#修改登录数据库密码,创建sonar数据库
mysql> set global validate_password_policy=0; #策略设为0,表示只检查密码长度
mysql> set global validate_password_length=6; #默认密码长度为6
mysql> alter user root@"localhost" identified by '123456'; 
[root@sonarqube sonarqube]# mysql -uroot -p123456 -e "CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;"
mysql: [Warning] Using a password on the command line interface can be insecure.

#安装java,这个包上面网盘分享有
[root@sonarqube ~]# ls
anaconda-ks.cfg  jdk-8u181-linux-x64.rpm
[root@sonarqube ~]# rpm -ivh  jdk-8u181-linux-x64.rpm 

#安装sonarqube,插件客户端啥的都有
链接:https://pan.baidu.com/s/1fnUVXbfYCF3CYkoIJXM6WA?pwd=kxxw 
提取码:kxxw

[root@sonarqube ~]# unzip sonarqube-7.0.zip 
[root@sonarqube ~]# ls
anaconda-ks.cfg  jdk-8u181-linux-x64.rpm  sonarqube-7.0  sonarqube-7.0.zip
[root@sonarqube ~]# mv sonarqube-7.0 /usr/local/
#做个软连接,更改一下启动用户
[root@sonarqube ~]# cd /usr/local/
[root@sonarqube local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  sonarqube-7.0  src
[root@sonarqube local]# ln -s sonarqube-7.0/ sonarqube
[root@sonarqube local]# useradd sonar
[root@sonarqube local]# chown -R sonar.sonar /usr/local/sonarqube-7.0/

#更改sonar的数据库设置,内容里面有把注释去掉就行了加上用户名密码
[root@sonarqube local]# vim /usr/local/sonarqube/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=123456
useUnicode=true&characterEncoding=utf8&rewrieBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

#使用普通用户启动
[root@sonarqube local]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"
Starting SonarQube...
Started SonarQube.

#浏览器访问地址是10.0.0.203:9000
第一次进忘了截图让我关了我g,这个是首页,点击登录 账号密码都是admin,登录后就是获取token,输入个名字点击后面的按钮

请添加图片描述

请添加图片描述
请添加图片描述

右边黑色的那部分命令可以点击copy复制到jenkins找个位置保存下来,因为最下面那个值是唯一的,关闭这个窗口这个代码就再也出不来了,除非你重新创建一个项目,这里完事之后点击右上角跳过就完了,sonar配置完后需要把客户端安装到jenkins上,客户端的包上面连接有

[root@jenkins ~]# cat sonar.txt 
sonar-scanner \
  -Dsonar.projectKey=html \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://10.0.0.203:9000 \
  -Dsonar.login=d01aae94699940b8f47a15e7a6ce9a10e9f4aa08
  

请添加图片描述

请添加图片描述

2、配置
#上传上来之后解压放到指定目录下面做个软连接,环境变量想用就弄
[root@jenkins ~]# ls
anaconda-ks.cfg  game  sonar-scanner-4.2.0.1873-linux  sonar-scanner-cli-4.2.0.1873-linux.zip  sonar.txt
[root@jenkins ~]# mv sonar-scanner-4.2.0.1873-linux/ /usr/local/
[root@jenkins ~]# cd /usr/local/
[root@jenkins local]# ln -s sonar-scanner-4.2.0.1873-linux/ sonar

#下一步在服务端安装sonar的插件 插件的包上面连接也有 做之前先弄个备份 别搞错服务器
[root@sonarqube extensions]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"
#按着做是不会出错的 就不测试了

下一步将sonarqube集成到jenkins里
回到jenkins点击 配置 拉到下面点击增加构建步骤选择图片选项

在这里插入图片描述

点击配置sonar 这里就是把sonar生成的那块黑色背景的命令放过来

在这里插入图片描述

在这里插入图片描述

name自定义,URL就是sonar的访问地址,下面的token现在还没有,需要先保存获取一下,填写完直接保存。重新选择进入全局配置,再点击添加这次就会有jenkins选项

在这里插入图片描述

在这里插入图片描述

类型选择Secert text 下面的Secret填sonar生成的
sonar-scanner \
  -Dsonar.projectKey=html \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://10.0.0.203:9000 \
  -Dsonar.login=d01aae94699940b8f47a15e7a6ce9a10e9f4aa08   #就复制=后面的值
  下面的ID自定义

在这里插入图片描述

  设置配置完后还需要配置全局工具。先返回到jenkins的配置页,点击图片选项

在这里插入图片描述

滑倒下面点击新增

在这里插入图片描述

路径是jenkins上配置的客户端的路径,配置完后回到jenkins配置错误提示就都消失了。按照图片上把命令填上 点击保存。回到页面会看到屏幕上出现了Sonarqube图标显示,点击构建测试一下。成功就算完事

在这里插入图片描述

在这里插入图片描述

六、jenkins微信通知

jenkins集成微信,工作中档git有新代码提交会触发钩子自动完成上线,运维和开发人员不须时刻盯着jenkins,通过微信的方式显示给运维和开发人员
链接:https://pan.baidu.com/s/13pvW_asobBq42yxTVQYjFA?pwd=kxxw 
提取码:kxxw

这个微信通知需要注册企业微信,就简单写一下步骤不写这部分的东西了(太多了懒得写),注册创建应用,复制Agentid和Secret的值。后面需要放到脚本里。企业可信ip注意一下,换WiFi啥的公网ip都会变
#第一个改的是你自己的企业微信名,下一个应用的agentid,第三个是企业id,最后一个是应用里面获取的
/server/scripts/jenkins_notify.py #我的脚本放这了

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

jenkins是没有直接使用微信通知的插件的,前面安装插件的地方已经放进去了。安装运行脚本的环境
#安之前下载阿里云的epel源,网络环境要稍微好一点,安装报错就多试几次,一般就是网不好
yum -y install python-pip
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python get-pip.py
pip2.7 install requests
最后去配置一下项目,添加一个构建后操作,添加一下写的脚本和通知信息,保存后就可以执行构建了,构建成功后会将信息发送到你手机企业app上

请添加图片描述

下面是jenkins的其他项目配置流程,当然像前面的这些很多功能都可以在其他类型的项目上使用。

七、Pipeline项目

1.什么是pipeline
Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。
2.Pipeline 概念
Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构建过程。
Node
    node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式 Pipeline 语法的关键特性。
Stage
    Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如“构建”,“测试”和“部署”阶段),许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。
Step
    一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的“步骤”)要做什么。例如,使用 sh step:sh 'make' 可以执行 make 这个 shell 命令。
1、配置
创建一个pipline项目,gitlab还是用那个小游戏

请添加图片描述

请添加图片描述

这个项目是通过脚本来运行,输出的结果可以按照步骤显示,脚本分为两种编写方法:脚本式、声名式。这里使用声名式。下面的配置是将脚本直接放到项目里面 保存。

请添加图片描述

链接:https://pan.baidu.com/s/15CvTiMswsy81r_qxGtFoNQ?pwd=kxxw 
提取码:kxxw
放到git本备,脚本提交到远程仓库
[root@shell git_workspace]# ls
bgm.mp3  css  images  index.html  Jenkinsfile  js  roms  shuoming.html
[root@shell git_workspace]# git add .
[root@shell git_workspace]# git commit -m "Jenkinsfile"
[master 3997c2a] Jenkinsfile
 1 file changed, 28 insertions(+)
 create mode 100644 Jenkinsfile
[root@shell git_workspace]# git push -u origin master 
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 590 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@10.0.0.200:qxl/game.git
   bc635fd..3997c2a  master -> master
Branch master set up to track remote branch master from origin.

配置一下sonarqube客户端,需要将地址指向到远程,按着下面改,没有的就加上
[root@jenkins conf]# pwd
/usr/local/sonar/conf
[root@jenkins conf]# ls
sonar-scanner.properties
[root@jenkins conf]# cat sonar-scanner.properties 
#----- Default SonarQube server
sonar.host.url=http://10.0.0.203:9000
sonar.login=d01aae94699940b8f47a15e7a6ce9a10e9f4aa08 #这是上面sonarqube生成项目产生的
#----- Default source code encoding
sonar.sourceEncoding=UTF-8

直接立即构建,全绿就完了

八、Maven

Maven是一个强大的项目管理工具,广泛应用于Java开发中。在Linux系统上部署Maven项目需要一些特定的步骤和配置
链接:https://pan.baidu.com/s/1bNgBFD0jHyoOaELdvwDKDg?pwd=kxxw 
提取码:kxxw
#安装Maven
下载上传到服务器后解压到指定位置

[root@jenkins ~]# ls
anaconda-ks.cfg  apache-maven-3.3.9-bin.tar.gz  game  get-pip.py  jenkins_notify.py  sonar.txt
[root@jenkins ~]# tar xf apache-maven-3.3.9-bin.tar.gz -C  /usr/local/

[root@jenkins local]# ll
total 0
drwxr-xr-x  6 root root 99 Feb 10 06:59 apache-maven-3.3.9
drwxr-xr-x. 2 root root  6 Apr 11  2018 bin
drwxr-xr-x. 2 root root  6 Apr 11  2018 etc
drwxr-xr-x. 2 root root  6 Apr 11  2018 games
drwxr-xr-x. 2 root root  6 Apr 11  2018 include
drwxr-xr-x. 2 root root  6 Apr 11  2018 lib
drwxr-xr-x. 2 root root  6 Apr 11  2018 lib64
drwxr-xr-x. 2 root root  6 Apr 11  2018 libexec
lrwxrwxrwx  1 root root 19 Feb 10 07:00 maven -> apache-maven-3.3.9/
drwxr-xr-x. 2 root root  6 Apr 11  2018 sbin
drwxr-xr-x. 5 root root 49 Dec  1 03:52 share
lrwxrwxrwx  1 root root 31 Feb  9 03:37 sonar -> sonar-scanner-4.2.0.1873-linux/
drwxr-xr-x  6 root root 51 Oct  1  2019 sonar-scanner-4.2.0.1873-linux
drwxr-xr-x. 2 root root  6 Apr 11  2018 src

#PATH变量就不弄了
命令释义
validate(验证):  验证项目正确,并且所有必要信息可用。
compile(编译): 编译项目源码
test(测试): 使用合适的单元测试框架测试编译后的源码。
package(打包): 源码编译之后,使用合适的格式(例如JAR格式)对编译后的源码进行打包。
integration-test(集成测试): 如果有需要,把包处理并部署到可以运行集成测试的环境中去。
verify(验证): 进行各种测试来验证包是否有效并且符合质量标准。
install(安装): 把包安装到本地仓库,使该包可以作为其他本地项目的依赖。
deploy(部署): 在集成或发布环境中完成,将最终软件包复制到远程存储库,以与其他开发人员和项目共享。
mvn clean (清除) : 清除上次编译的结果
mvn package -Dmaven.test.skip=true 跳过测试用例
cd hello-world
mvn package      #会去maven的中央仓库去下载需要的依赖包和插件到.m2目录下

#配置阿里源
[root@jenkins maven]# pwd
/usr/local/maven
[root@jenkins maven]# ls
bin  boot  conf  lib  LICENSE  NOTICE  README.txt
[root@jenkins maven]# vim conf/settings.xml 

#放到配置文件的mirrors标签里面,这样就配置完毕
<mirror> 
<id>nexus-aliyun</id> 
<mirrorOf>*</mirrorOf> 
<name>Nexus aliyun</name> 
<url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>
#测试使用后面一起

九、Nexus

Nexus是一款开源的Maven仓库管理工具,可以搭建私有Maven仓库。
链接:https://pan.baidu.com/s/1kTwG47fBa5BEDX_KqwiDxg?pwd=kxxw 
提取码:kxxw
#这个是nexus包,还需要java上面的连接有

#上传安装就不说了,都一样的
解压到/usr/local/,在做一个软连接

#启动
[root@nexus bin]# pwd
/usr/local/nexus/bin
[root@nexus bin]# ls
contrib  nexus  nexus.rc  nexus.vmoptions
/usr/local/nexus/bin/nexus start

#访问
10.0.0.202:8081
用户名:admin 密码:admin123
登录后配置阿里云仓库
将图片中的第三步改成 http://maven.aliyun.com/nexus/content/groups/public 修改后点击下方save保存

请添加图片描述

 Nexus 安装成功后,接下来需要修改 Maven 的配置文件(settings.xml),整合 Nexus。

  找到 <servers> 标签,添加 Nexus 默认认证信息:

<server>   
    <id>my-nexus-releases</id>   
    <username>admin</username>   
    <password>admin123</password>   
  </server>   
  <server>   
    <id>my-nexus-snapshot</id>   
    <username>admin</username>   
    <password>admin123</password>   
  </server>
  找到 <mirrors> 标签,添加镜像:

<mirror>
  <!--This sends everything else to /public -->
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>
  找到 <profiles> 标签,添加仓库信息:

<profile>
  <id>nexus</id>
  <!--Enable snapshots for the built in central repo to direct -->
  <!--all requests to nexus via the mirror -->
  <repositories>
    <repository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled></releases>
      <snapshots><enabled>true</enabled></snapshots>
    </repository>
  </repositories>
 <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled></releases>
      <snapshots><enabled>true</enabled></snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>
  激活仓库:

<activeProfiles>
  <!--make the profile active all the time -->
  <activeProfile>nexus</activeProfile>
</activeProfiles>
  配置完成后保存,并重启 nexus  服务。

  重启  nexus  服务 完成后,在命令行窗口进入一个使用 Maven 构建的项目,输入 mvn package clean 命令,清理完成后,登录 nexus 的 admin 账号可以看到 Public Repositories  下出现了一些 Jar 包。
#这个文件已经准备好了,不用自己改
链接:https://pan.baidu.com/s/1NKXtA5nJ74IKNBm1i_v_bw?pwd=kxxw 
提取码:kxxw

#下载直接上传到这个目录,可以把之前的备份
[root@jenkins conf]# pwd
/usr/local/maven/conf
[root@jenkins conf]# ls
logging  settings.xml  settings.xml.bak  toolchains.xml

#这样maven、nexus就都配置完了,可以进行测试了
链接:https://pan.baidu.com/s/1Ht8TkYJKZotGzR3Ik3jAeQ?pwd=kxxw 
提取码:kxxw
这里面是一个war包,下载上传解压
[root@jenkins hello-world-war]# ls
dist  pom.xml  README.md  src
[root@jenkins hello-world-war]# /usr/local/maven/bin/mvn package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Hello World Web Application Repository 1.0.0
[INFO] ------------------------------------------------------------------------
Downloading: http://10.0.0.202:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Downloaded: http://10.0.0.202:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (8 KB at 4.1 KB/sec)
Downloading: http://10.0.0.202:8081/repository/maven-public/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
#这样就是配置没问题,这个项目打包的依赖都是从202下载

八、分布式构建

	如果项目需要定期集成,同时每次集成都需要较长时间。如果都运行在master服务器上,会消耗过多资源,导致其他项目搁置无法集成,这时就需要在建立多台设备,并配置作为slave机器来为master提供负载服务。
1、配置
#从节点就不单独在拎出来一个服务器了,就放到neuxs服务器,当然学会怎么配置想放到那个服务器上都行
#java、git都有就不用安装了
#把jenkins服务器的sonar和maven拷贝过去
[root@jenkins local]# scp -r sonar maven 10.0.0.202:/usr/local/
[root@jenkins /]# scp -r server  10.0.0.202:/ #这个是脚本
#因为从节点肯定也是要拉取代码的,所以要把公钥复制到gitlab上
[root@nexus local]# cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDndzsUYX16oGkFAM1n7+2hmadwl+pc22XyDeyncnKzQPFd5KIzdUhHtCi6YLbGODxJkSWTbYVQiW0wPVdRtJB9CV0gPsiDTQSTdlNHQhZJ33vvKRM26Uyf5vj+pRTfgb9W+s9Gsh4eOuA6FYjQznvMLsfWsB/dqO00Ygp2le/345blF7Bp0Upts+VR0oIWrYJHbSrIUGjV070CNBl8zndqnNYJA7H+RkDXjBlV6Z6en32E+emufFB3QbyPF59vlXZ66oX3ks9ddnErbnfGWIhNaeU6qyNy9ugtAMY69mHdvwOaFjAOBLifKI2ihY1BIYBWeeCs73wnlc+Ihie3DVnL root@nexus
#先拉取一下项目通过一下指纹验证,不然构建项目的时候会有报错 git@10.0.0.200:qxl/game.git

请添加图片描述

配置jenkins,添加节点。点击系统管理拉到下面

请添加图片描述

新建节点,名称自定义。添加主机里面配置的是私钥
#把这个复制进去
[root@jenkins local]# cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA8iGi05DXUbEDrXPdR4PMwLAg0zebzx4RSwNd5o78UsRwR2Ay
ANxm1VwCGUzWLbIdYIC4cO1dbGSFx6nGrx6wP/4tGHltBjEFQuEzvSywIzW8bdRE
teFXYqHIgZoa3RbO0DotGg7AAEi/g7bAWqmY2JgoL5Gcg4Pxyf6Gd5BwduNWh

请添加图片描述

请添加图片描述

请添加图片描述

配置一下工具,配置maven忘记添加到全局工具了

请添加图片描述

请添加图片描述

构建测试,可以直接复制一个窗口,点击构建后返回到另一个窗口看结果

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「数据结构」二叉搜索树1:实现BST

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;Java数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 实现BST &#x1f349;二叉搜索树的性质&#x1f349;实现二叉搜索树&#x1f34c;插入&#x1f34c;查找&#x1f34c;删除 &am…

FPGA开发

Quartus13.0使用 编译下载&#xff1a; 添加引脚&#xff1a; # ---------------- LED ---------------- # set_location_assignment PIN_K2 -to led_out[11] set_location_assignment PIN_J1 -to led_out[10] set_location_assignment PIN_J2 -to led_out[9] set_locatio…

SRS视频服务器使用记录

SRS是一个开源的&#xff08;MIT协议&#xff09;简单高效的实时视频服务器&#xff0c;支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用&#xff0c;提供流的接收和分发的能力&#xff0c;是一个…

Python操作MySQL基础

除了使用图形化工具以外&#xff0c;我们也可以使用编程语言来执行SQL从而操作数据库。在Python中&#xff0c;使用第三方库: pymysql来完成对MySQL数据库的操作。 安装第三方库pymysql 使用命令行,进入cmd&#xff0c;输入命令pip install pymysql. 创建到MySQL的数据库连接…

【漏洞复现】多语言药房管理系统MPMS文件上传漏洞

Nx01 产品简介 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口&#xff0c;客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库&#xff0c;并根据到期、产品等各种参数提供各种报告。 Nx02 漏洞描述 …

详细了解ref和reactive.

这几天看到好多文章标题都是类似于&#xff1a; 不用 ref 的 xx 个理由不用 reactive 的 xx 个理由历数 ref 的 xx 宗罪 我就很不解&#xff0c;到底是什么原因导致有这两批人&#xff1a; 抵触 ref 的人抵触 reactive 的人 看了这些文章&#xff0c;我可以总结出他们的想法…

第8章 智能租房——列表页

学习目标 掌握搜索房源列表页展示功能的逻辑&#xff0c;能够实现在列表中展示符合搜索条件的房源数据 掌握最新房源列表页展示功能的逻辑&#xff0c;能够运用分页插件以分页形式展示最新房源数据 掌握热点房源列表页展示功能的逻辑&#xff0c;能够运用分页插件以分页形式展…

Linux文本三剑客(2)

文章目录 一、Linux文本三剑客之awk使用方法awk 的原理实例一&#xff1a;只查看test.txt文件&#xff08;100行&#xff09;内第20到第30行的内容&#xff08;企业面试&#xff09;实例二&#xff1a;已知test.txt文件内容为 BEGIN 和 END 模块实例一&#xff1a;统计/etc/pas…

【单片机】简单的自定义延时程序设计(代码演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY…

2、6作业

TCP和UDP的区别 TCP和UDP都是通信协议 TCP提供有连接的&#xff0c;稳定的&#xff0c;无误码无失真无乱序无丢失的通信 UDP提供无连接的&#xff0c;尽力的&#xff0c;可能误码可能乱序&#xff0c;可能丢失的通信 TCP每发一个数据包就需要对方回应一个应答包&#xff0c…

C++重新入门-C++判断语句

目录 1.if语句 嵌套 if 语句 2.switch语句 工作原理 语法 示例 3.三元运算符 示例 注意事项 判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&…

Rust基础拾遗--核心功能

Rust基础拾遗 前言1.所有权与移动1.1 所有权 2.引用3.特型与泛型简介3.1 使用特型3.2 特型对象3.3 泛型函数与类型参数 4.实用工具特型5.闭包 前言 通过Rust程序设计-第二版笔记的形式对Rust相关重点知识进行汇总&#xff0c;读者通读此系列文章就可以轻松的把该语言基础捡起来…

推荐知识付费源码,梦想贩卖机升级版

梦想贩卖机升级版&#xff0c;变现宝吸收了资源变现类产品的许多优势&#xff0c;并剔除了那些无关紧要的元素&#xff0c;使得本产品在运营和变现能力方面实现了质的飞跃。多领域素材资源知识变现营销裂变独立版本。 演示地址&#xff1a;runruncode.com/rjcx/19689.html

电商小程序03登录页面开发

目录 1 创建应用2 创建页面3 首页功能搭建4 登录页搭建5 设置叠加效果总结 小程序开发在经过需求分析和数据源设计之后&#xff0c;就可以进入到页面开发的阶段了。首先我们需要开发登录的功能。 登录功能要求用户输入用户名和密码&#xff0c;勾选同意用户协议和隐私协议&…

第77讲用户管理功能实现

用户管理功能实现 前端&#xff1a; views/user/index.vue <template><el-card><el-row :gutter"20" class"header"><el-col :span"7"><el-input placeholder"请输入用户昵称..." clearable v-model"…

JVM-类加载器 双亲委派机制

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 什么是JVM JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&a…

Peter算法小课堂—背包问题

我们已经学过好久好久的动态规划了&#xff0c;动态规划_Peter Pan was right的博客-CSDN博客 那么&#xff0c;我用一张图片来概括一下背包问题。 大家有可能比较疑惑&#xff0c;优化决策怎么优化呢&#xff1f;答案是&#xff0c;滚动数组&#xff0c;一个神秘而简单的东西…

AI:125-基于深度学习的航拍图像中地物变化检测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

uniapp vue3怎么调用uni-popup组件的this.$refs.message.open() ?

vue2代码 <!-- 提示信息弹窗 --><uni-popup ref"message" type"message"><uni-popup-message :type"msgType" :message"messageText" :duration"2000"></uni-popup-message></uni-popup>typ…

【集合系列】TreeMap 集合

TreeMap 集合 1. 概述2. 方法3. 遍历方式4. 排序方式5. 代码示例16. 代码示例27. 代码示例38. 注意事项9. 源码分析 其他集合类 父类 Map 集合类的遍历方式 TreeSet 集合 具体信息请查看 API 帮助文档 1. 概述 TreeMap 是 Java 中的一个集合类&#xff0c;它实现了 SortedMap…
最新文章