Jenkins详细安装配置部署

目录

  • 简介
  • 一、安装jdk
  • 二、安装jenkins
        • 这里如果熟悉 Jenkins ,可以【选择插件来安装】,如果不熟悉,还是按照推荐来吧。
        • 注意:
  • 三、插件安装
        • 如果上面插件安装,选择的不是【安装推荐的插件】,而是【选择插件来安装】--【无】
    • 1. 缓存插件列表。
    • 2. 修改Jenkins镜像源。
        • 中文版![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/226a96da8ca9441ba908b9065cdfd110.png)
        • 英文版:
    • 3. 下载汉化插件。
  • 四、卸载Jenkins
  • 五、常见问题
      • 1. 实例离线
          • 具体操作如下:
  • 六、安装git
  • 七、安装maven: /usr/local/soft/cicd
  • 八、Jenkins全局工具配置
      • 1. jdk配置:输入jdk安装的目录
      • 2. git配置:输入git的目录
      • 3. maven配置:输入maven的目录
  • 九、SSH插件安装
      • 附加:截止到发稿前,新版本的jenkins不提供Publish Over SSH插件
  • 十、SSH传输服务器设置
        • 1.Jenkins SSH Key配置jenkins部署所在服务器的信息
        • 2.SSH Servers配置需要把打好的jar包上传到的服务器信息(发布业务系统的服务器)
  • 十一、页面配置发布工程
  • 十二、目标发布服务器配置
        • 4.在自己的电脑创建一个名为:umapp-cloud-devops.sh的linux执行文件,编辑好后上传到/u01/scripts目录下,文件命名对应第八部分的第6点Exec command的部分内容。
  • 十三、构建项目
  • 十四、构建前端web工程
  • 十五、权限分配

简介

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具。主要做的事情就是从git中拉取代码,根据配置信息打包;把打好的包传输到目标服务器,并可以执行一些shell脚本,使项目打包发布一键完成。

在这里插入图片描述

一、安装jdk

jenkins的安装需要依赖于jdk。

参考: https://editor.csdn.net/md/?articleId=135966281

  1. 新的服务器需要支持文件上传和下载,安装rz(上传)sz(下载)

    yum install lrzsz -y
    
  2. 使用命令rz上传linux下的jdk安装包到服务器,输入rz后会弹出一个选项框,选择对应的jdk安装包(最新版的jenkins需要jdk11以上),2022年7月2日起,jenkins新版本不再支持java8,仅支持java11和java17。

二、安装jenkins

  1. 输入命令安装jenkins

    ​sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
     
    sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    
    yum install jenkins
    
  2. 查看Jenkins服务配置文件

    systemctl status jenkins
    

    在这里插入图片描述

  3. 修改Jenkins服务配置文件
    修改用户和组为root;指定jdk目录;修改启动端口号

    vim /usr/lib/systemd/system/jenkins.service
    在这里插入图片描述
    在这里插入图片描述

  4. 重新加载系统配置

     systemctl daemon-reload
    
  5. 启动jenkins

    # 启动
    systemctl start jenkins
    
    # 停止
    systemctl stop jenkins
    
  6. 开放Jenkins访问端口。(端口与配置文件中一致)

    firewall-cmd --zone=public --add-port=8088/tcp --permanent
    firewall-cmd --reload
    
  7. 浏览器访问(ip:port),出现这个界面说明安装成功,查看Jenkins密码进行下一步
    在这里插入图片描述

    sudo yum install -y fontconfig
    
    fc-cache --force
    
    

    然后重启:

    systemctl restart jenkins
    

    在这里插入图片描述

  8. 点击选择插件安装,然后选择无进行下一步:

    这里如果熟悉 Jenkins ,可以【选择插件来安装】,如果不熟悉,还是按照推荐来吧。

    7-1、在这里插入图片描述
    7-2、
    在这里插入图片描述

注意:

这里如果不熟悉Jenkins,可以选择【安装推荐的插件】。即可,省事。

  1. 创建用户

    在这里插入图片描述

  2. 保存实例【】
    在这里插入图片描述

  3. 进入Jenkins。
    在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/648bd9c3fbec43a5a2fd1f33875f924c.png)

三、插件安装

如果上面插件安装,选择的不是【安装推荐的插件】,而是【选择插件来安装】–【无】

1. 缓存插件列表。

点击Manage Jenkins --》 Manage Plugins --》Available 等待浏览器加载完成。(这样做是为了把Jenkins官方的插件列表下载到本地
在这里插入图片描述
新版本
在这里插入图片描述
旧版本
在这里插入图片描述

2. 修改Jenkins镜像源。

进入配置目录,修改镜像源为清华源。

cd /var/lib/jenkins/updates
 
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

在这里插入图片描述

然后回到jenkins的Plugins页面,点击Advanced,把Update Site改为国内插件下载地址 。

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

在这里插入图片描述

Sumbit后,在浏览器输入: http://ip:port/restart ,重启Jenkins。
http://192.168.21.3:8086/restart

中文版在这里插入图片描述
英文版:

在这里插入图片描述

3. 下载汉化插件。

点击Manage Jenkins --》Manage Plugins ,点击 Available ,搜索 “Chinese”。
在这里插入图片描述

安装完成后重启jenkins。
在这里插入图片描述

四、卸载Jenkins

依次执行命令。

1、rpm卸载
rpm -e jenkins
 
2、检查是否卸载成功
rpm -ql jenkins 
 
3、彻底删除残留文件:
find / -iname jenkins | xargs -n 1000 rm -rf

五、常见问题

1. 实例离线

由于网速较慢,即使该Jenkins所在机器可以联网,但是还是会出现该jenkins实例已经离线,这个时候不要慌。我们先将Jenkins服务关闭,修改Jenkins镜像源重新启动即可。
在这里插入图片描述

具体操作如下:
  1. 停止jenkins

    systemctl stop jenkins
    
  2. 进入Jenkins工作目录

    cd /var/lib/jenkins
    
  3. 修改镜像源

    vim hudson.model.UpdateCenter.xml 
    将url修改为
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    

    在这里插入图片描述

  4. 重启jenkins即可

    重启后重新根据上述步骤操作

    systemctl start jenkins
    

六、安装git

  1. 先验证有没有安装
    git --version
    
  2. 如果没有安装,执行安装命令:
    yum install git
    
  3. 查看安装git是否成功:
    git --version
    

七、安装maven: /usr/local/soft/cicd

  1. 打开maven 网站 https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.5/binaries/
    选择版本:
    在这里插入图片描述

https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz

  1. 如果没有 wget ,先安装, 如有,忽略

    yum install -y wget  
    

    然后:

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz
    
    tar -zxvf apache-maven-3.9.5-bin.tar.gz
    mv apache-maven-3.9.5 maven
    cd maven
    

    在这里插入图片描述

  2. 单独配置Maven

    vim /etc/profile
    export M2_HOME=/usr/local/maven
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$M2_HOME/bin:$PATH
    
    
    

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

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin

export JAVA_HOME=/usr/local/soft/java/openjdk17
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export PATH=$PATH:/usr/local/soft/node-v16/bin

# minio
export MINIO_ROOT_USER=ltkj
export MINIO_ROOT_PASSWORD=ltkj.com

export LD_LIBRARY_PATH=/usr/local/lib
export LIBLEPT_HEADERSDIR=/usr/local/include
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

# mvn
export M2_HOME=/usr/local/soft/cicd/maven
export PATH=$M2_HOME/bin:$PATH

  1. 修改maven的setting.xml配置信息

    4-1、进入目录:

    cd  /usr/local/soft/cicd/maven/conf
    

    4-2、编辑setting.xml配置文件:

    vi settings.xml
    

    4-2-1、设置存放jar包的目录:
    在这里插入图片描述

    4-2-2、配置私服的serviers

    <servers>
    	    <server>
    	      <id>releases</id>
    	      <username>knet</username>
    	      <password>knetfordeployment</password>
    	    </server>
    	    <server>
    	      <id>Project Releases</id>
    	      <username>knet</username>
    	      <password>knetfordeployment</password>
    	    </server>
    	    <server>
    	      <id>Project Snapshots</id>
    	      <username>knet</username>
    	      <password>knetfordeployment</password>
    	    </server>
    	    <server>
    	      <id>huaweicloud</id>
    	      <username>anonymous</username>
    	      <password>devcloud</password>
    	    </server>
      </servers>
    

    4-2-3、配置阿里云镜像

    <mirrors>
    	   <mirror>
    		<id>public</id>
    		<mirrorOf>*</mirrorOf>
    		<name>阿里云公共仓库</name>
    		<url>https://maven.aliyun.com/repository/public</url>
    	</mirror>
    
        <mirror>
            <id>spring</id>
            <mirrorOf>*</mirrorOf>
            <name>阿里云spring仓库</name>
            <url>https://maven.aliyun.com/repository/spring</url>
        </mirror>
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>*</mirrorOf>
            <name>阿里云spring插件仓库</name>
            <url>https://maven.aliyun.com/repository/spring-plugin</url>
        </mirror>
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>*</mirrorOf>
            <name>阿里云gradle-plugin</name>
            <url>https://maven.aliyun.com/repository/gradle-plugin</url>
        </mirror>
    </mirrors>
    

    4-2-4、配置maven私服nexus及激活的配置

     <profiles>
             <profile>
    	          <id>maven-repo</id>
    	      <repositories>
    			<repository>
    			  <id>spring</id>
    			  <url>https://maven.aliyun.com/repository/spring</url>
    			  <releases>
    				<enabled>true</enabled>
    			  </releases>
    			  <snapshots>
    				<enabled>true</enabled>
    			  </snapshots>
    			</repository>
    	
    	        <!--https://developer.aliyun.com/mvn/guide     -->
    	        <repository>
    	          <id>jcenter</id>
    	          <url>https://maven.aliyun.com/repository/public</url>
    	          <releases>
    	            <enabled>true</enabled>
    	          </releases>
    	          <snapshots>
    	            <enabled>true</enabled>
    	          </snapshots>
    	        </repository>
    	      </repositories>
    	    </profile>
    </profiles>
    
    <activeProfiles>
        <activeProfile>maven-repo</activeProfile>
    <!--    <activeProfile>alwaysActiveProfile_</activeProfile>-->
      </activeProfiles>
    
  2. 创建存放jar包的目录repo,需要与setting.xml中配置的一致:

    切到需要创建的目录下:

    cd /usr/local/soft/cicd/
    

    创建目录:

    mkdir repo
    

    给目录赋读写权限:

    chmod 777 repo
    

————————————————

八、Jenkins全局工具配置

在jenkins首页依次:进入【系统管理】>>【全局工具配置】:
在这里插入图片描述

1. jdk配置:输入jdk安装的目录

在这里插入图片描述

2. git配置:输入git的目录

在这里插入图片描述

3. maven配置:输入maven的目录

在这里插入图片描述

九、SSH插件安装

jenkins打完包需要上传到新的服务器上,此处使用ssh的方式上传,添加ssh插件。
【系统管理】-> 【插件管理】-> 【可选插件】
在这里插入图片描述

所需插件如下: 如果已经安装,无需再次安装
SSH 、Maven Integration 、Git plugin、Publish Over SSH,Role-based 。

在这里插入图片描述

安装完成后新建工程时,构建环境选项才会出现SSH相关的选项
在这里插入图片描述

附加:截止到发稿前,新版本的jenkins不提供Publish Over SSH插件

从可选库里面检索不到,jenkins官网暂停了插件,原因是存在XSS和CSRF攻击,目前没有修复,但是我们使用内网部署,不存在这种情况,外网部署的情况需要慎重考虑。

在这里插入图片描述

可以手动添加Publish Over SSH插件到jenkins,需要的文件下载git地址:
https://github.com/zhangliqingyun/publishssh.git

参考:https://blog.51cto.com/u_13272819/6540815
目录切到:

/var/lib/jenkins/plugins

把这两个文件添加进行,解压赋值上对应的权限

在这里插入图片描述

添加完成后即可在已安装插件中显示,创建项目的时候可以直接使用,在配置ssh服务器的位置也显示
在这里插入图片描述
在这里插入图片描述

十、SSH传输服务器设置

点击【系统管理】-》【系统配置】
系统设置主要定义,Jenkins本身的一些配置,邮件、远程服务器管理、构建参数等,这里先配置远程主机,后面自动发布时会用到,找到Publish over SSH相关部分。
在这里插入图片描述

1.Jenkins SSH Key配置jenkins部署所在服务器的信息

Passphrase:SSH的密码,使用用户名/密码登录时为用户名的密码,使用私钥登录时为私钥的密码,没有就留空

Path to key:SSH私钥的文件路径

Key:私钥

①在安装jenkins的服务器上执行命令生成私钥信息

ssh-keygen -t rsa

全部按回车执行不需要输入密码,执行完或会在目录/root/.ssh下生成私钥信息
在这里插入图片描述

②Passphrase内输入登录服务器的密码

③Path to key内输入私钥的文件地址:

/root/.ssh/id_rsa

④Key为id_rsa的文本内容,可以使用命令:sz id_rsa把文件下载下来,把文本内容粘贴进行

2.SSH Servers配置需要把打好的jar包上传到的服务器信息(发布业务系统的服务器)

在这里插入图片描述
点击新增添加ssh服务器,可以根据需要添加多台。
Name:SSH节点配置的名称,在Job中使用Publish over SSH插件时,此名称将出现在"SSH Server"中"Name"的下拉列表中。
在这里插入图片描述

Hostname: 主机IP

Username:主机用户名

Remote Derictory: 运程机器上真实存在的目录,并且"Username"指定的用户要有访问此目录的权限,插件将把文件传送到此目录下;

登录服务器创建目录:

mkdir u01

给u01目录赋权限:

chmod 775 u01

登录远程服务器使用秘密的方式,点击高级展开进行设置:
在这里插入图片描述

勾选使用秘密登录: Use password authentication, or use a different key,点击Change Password设置添加的用户登录服务器的密码
在这里插入图片描述

也可以不使用密码,免密登录的方式:把部署jenkins的rsa.pub文件拷贝到目标机器的authorized_keys下,到目标服务器下执行

vi authorized_keys

,把公钥内容粘贴进行,然后重启目标服务器的shh

systemctl restart sshd.service

在这里插入图片描述

在这里插入图片描述

点击Test Configuration按钮测试配置的服务器是否能正常链接:当出现Success表示链接正常

十一、页面配置发布工程

1.创建视图,把工程放在视图中进行管理
在这里插入图片描述
2.在创建的视图中添加任务

在这里插入图片描述
3.输入任务名称,选择构建一个maven项目,勾选添加到当前视图进行创建

在这里插入图片描述
4.General选择丢弃旧的构建,输入保持构建的最大个数
在这里插入图片描述
5.源码管理选择Git的方式,添加项目的git地址
在这里插入图片描述
点击添加访问git地址的用户名和密码信息,此用户需要有权限访问git链接:

在这里插入图片描述

填写对应的用户名密码即可:
在这里插入图片描述

指定需要打包的分支:
在这里插入图片描述

6.构建环境

选择:Send files or execute commands over SSH after the build runs 把打包好的jar文件发送后执行命令的方式
在这里插入图片描述

Name:目标主机名称,前面配置主机时有提到,在第七部分的第2点配置的,若是配置了多台,则此处为下拉选择。

Source files:需要传输的文件路径,jenkins默认打出来的jar包放在/var/lib/jenkins/workspace目录下,后面的目录umapp-cloud-service-todolist为创建任务的名称,此处只用填写项目打包后的结尾文件名即可,前缀默认会拼接

在这里插入图片描述

Remove prefix:移除文件前缀,当从jenkins服务器把jar文件通过ssh发送到目标服务器后,目标服务器存放jar的目录,需要去掉的前缀(源jenkins存放jar的目录为基础)

Remote directory:远程目录,此目录是基于前面第七部分的第2点配置ssh server时定义的目录(/u01)为根目录。按此配置,则目标服务器上需要存在/u01/builds的目录

7.build打出jar包

Root Pom:配置pom.xml的文件目录

Goals and options:配置maven执行的命令

在这里插入图片描述
-Pdev为激活dev配置,此处的配置对应项目properties或yml配置文件的active(激活配置)

在这里插入图片描述
–pl xxx-service/xxx-service-xx:只打包xxx-service/xxx-service-xx这个项目,因为xxx-service目录下可能存在多个项目

-am:表示同时处理选定模块所依赖的模块,此处xxx-service-xxx可能会依赖于其他模块,使用am(also-make)把依赖的一并打包进来

十二、目标发布服务器配置

1.首先确保jar文件操作的目录/u01存在(若不存在可以执行创建命令mkdir u01),并且有权限(若没有权限可以执行命令:chmod 775 u01),在上面第七部分第1点已经介绍创建过此目录
在这里插入图片描述
2.在u01目录下创建存放jar包的目录builds:

mkdir builds

并且赋权限:

chmod 775 builds

builds的命名对应第八部分的第6点Remote directory内容
在这里插入图片描述

3.在u01下创建存放执行文件的目录scripts:

mkdir scripts

并且赋权限:

chmod 775 scripts

scripts的命名对应第八部分的第6点Exec command的部分内容

在这里插入图片描述

4.在自己的电脑创建一个名为:umapp-cloud-devops.sh的linux执行文件,编辑好后上传到/u01/scripts目录下,文件命名对应第八部分的第6点Exec command的部分内容。

可执行文件接收4个参数,提供start启动的方法,重启restart的方法,停止stop的方法,删除备份del_bak的方法,备份bak的方法
————————————————

#!/bin/bash
 
# 操作名称
optionName=$1
# Jar项目名称
appName=$2
# 项目路径
appDir=$3
# 内存配置级别 0:256m 1:512m 2:1G 3:2G 4:4G
MemConfLevel=$4
# 创建项目目录
appPath="/u01/project/umapp/$appDir"
if [ ! -d "$appPath" ];
then
    mkdir $appPath
fi
 
# 帮助说明
function usage()
{
  echo "Usage:   sh /u01/scripts/umapp-cloud-devops.sh [-optionName] [appName] [appDir] [MemConfLevel]"
  echo "Example: sh /u01/scripts/umapp-cloud-devops.sh restart umapp-cloud-auth-1.0.0 auth 0"
  echo "where options include:"
  echo "     start        启动app"
  echo "     stop         停止app"
  echo "     restart      重启app"
  echo "     status       查看状态"
}
 
if [ "$optionName" == "--help" ];
then
  usage;
  exit 1
fi
 
if [ "$optionName" == "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m"
    exit 1
fi
 
if [ "$appName" == "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi
 
if [ "$appDir" == "" ];
then
    echo -e "\033[0;31m 未输入项目路径 \033[0m"
    exit 1
fi
 
if [ "$MemConfLevel" == "" ];
then
    echo -e "\033[0;31m 未输入内存配置级别 \033[0m"
    exit 1
fi
 
# 统计运行应用数
function getCount()
{
    count=`ps -ef |grep java|grep "$appName.jar"|grep -v grep|wc -l`
    echo $count
}
 
# 获取pid
function getPid()
{
    pid=`ps -ef | grep "$appName.jar" | grep -v grep | awk '{print $2}'`
    echo $pid
}
 
# 启动应用
function start()
{
    source /etc/profile
    # 统计运行应用数
    count=`getCount`
    if [ $count != 0 ];then
        echo "$appName is running..."
    else
        echo "$appName is start..."
        # 拷贝并覆盖Jenkins生成在builds文件下的jar 到所属的项目路径下
        cp -rf /u01/builds/"$appName.jar" /u01/project/umapp/$appDir/
        chmod 775 -R /u01/project/umapp/$appDir
        cd /u01/project/umapp/$appDir
        echo "begin config..."
        if [ "$MemConfLevel" = 0 ];then
            XmsSize=256m
            MetaSize=125m
        elif [ "$MemConfLevel" = 1 ];then
            XmsSize=512m
            MetaSize=256m
        elif [ "$MemConfLevel" = 2 ];then
            XmsSize=1G
            MetaSize=512m
        elif [ "$MemConfLevel" = 3 ];then
            XmsSize=2G
            MetaSize=1G
        elif [ "$MemConfLevel" = 4 ];then
            XmsSize=4G
            MetaSize=2G
        fi
        JAVA_OPTS="-Xms${XmsSize} -Xmx${XmsSize} -XX:CompressedClassSpaceSize=${MetaSize} -XX:MetaspaceSize=${MetaSize} -XX:MaxMetaspaceSize=${MetaSize} -Xloggc:logs/gc.log"
        echo "before start..."
        nohup java -jar "$appName.jar" >$appName 2>&1 &
        echo "after start..."
    fi
}
 
# 停止应用
function stop()
{
    echo "stop $appName..."
    count=`getCount`
    if [ $count != 0 ];then
        pid=`getPid`
        echo "stop $appName kill pid $pid"
        kill $pid
        sleep 2
        count=`getCount`
        if [ $count != 0 ];then
            echo "stop $appName kill -9 pid $pid"
            kill -9 $pid
        fi
    fi
}
 
# 备份应用
function bak()
{
    echo "bak start..."
    bakPath="/u01/bak/umapp/$appDir"
    if [ ! -d "$bakPath" ];
    then
        mkdir $bakPath
    fi
    bakName="/u01/project/umapp/$appDir/${appName}.jar"
    if [ -f "$bakName" ];
    then
        mv -f $bakName $bakPath/${appName}_`date +%Y%m%d%H%M%S`.jar
    fi
     
}
 
# 删除过期的备份程序只保留最新3次的
function del_bak
{
    echo "del_bak start..."
    bak_DIR=/u01/bak/umapp/$appDir
    if [ -d $bak_DIR ]; then
        cd $bak_DIR
        bak_count=`ls -lthr | grep -v 'total' | grep  "$appName" |  wc -l`
        if (($bak_count > 3));then
            del_count=`expr $bak_count - 3`
            ls -thr | grep -v 'total' | grep  "$appName"| head -$del_count | xargs rm -rf
        fi
    fi
    echo "del_bak success..."
}
 
 
# 重启应用
function restart()
{
    stop
    del_bak
    bak
    start
    status
}
 
# 打印启动状态
function status()
{
    count=`getCount`
    if [ $count != 0 ];then
        echo "$appName is success..."
    else
        echo "$appName is not success..."
    fi
}
 
case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    --help)
    usage;;
    *)
    echo -e "请使用--help察看可用选项" ;;
esac

5.创建可执行文件需要的目录

①umapp-cloud-devops.sh文件有一个存放jar包启动文件的目录project,把jar从/u01/builds下移动到/u01/project/umapp下,所以在/u01下创建对应的目录:

mkdir project

并且赋权限:

chmod 775 project

chmod 775 project

进入到project:

cd project/

再创建umapp目录:

mkdir umapp
并且赋权限:

chmod 775 umapp

②umapp-cloud-devops.sh文件有一个从/u01/project/umapp备份jar包到/u01/bak/umapp的操作,所以在/u01下创建对应的目录:

mkdir bak

并且赋权限:

chmod 775 bak

进入到bak:

cd bak/

再创建umapp目录:

mkdir umapp

并且赋权限:

chmod 775 umapp

6.配置系统启动需要的日志文件目录

根据项目配置的日志目录在/u01目录下创建日志目录:

mkdir logs

并且赋权限:

chmod 775 logs

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

十三、构建项目

点击项目名称进入构建页面
在这里插入图片描述

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

点击构建的序号查看构建情况
在这里插入图片描述

点击控制调输出查看构建情况
在这里插入图片描述

最后输出Finished: SUCCESS表示构建成功,从服务的注册中心nacos可以查看系统构建成功
在这里插入图片描述

十四、构建前端web工程

前面第八、九、十是构建的java maven项目,此处构建的是纯前端项目。

1.添加前端打包需要的插件,系统管理-》插件管理,添加NodeJs Plugin。
在这里插入图片描述
2.配置node全局工具,系统管理-》全局工具配置,找到NodeJs相关配置,选择NodeJs版本。

注意NodeJs的版本选择,需要跟安装jenkins的服务器对应,太高的NodeJs版本,需要的Glibc版本比较高,否则打包的时候会报找不到高版本的Glibc。

/lib64/libm.so.6: version `GLIBC_2.27‘ not found
可以通过命令查看服务器Glibc的版本信息

strings /lib64/libc.so.6 |grep GLIBC

此处我们选择nodeJS-14.17.6。

3.创建一个任务,新建任务-》构建一个自由风格的软件项目

在这里插入图片描述
4.General选择丢弃旧的构建,输入保持构建的最大个数

在这里插入图片描述

5.源码管理选择Git的方式,添加项目的git地址

在这里插入图片描述

点击添加访问git地址的用户名和密码信息,此用户需要有权限访问git链接:
在这里插入图片描述

填写对应的用户名密码即可:

在这里插入图片描述
指定需要打包的分支:
在这里插入图片描述

6.构建环境选择Provide Node & npm bin/ folder to PATH,选择在全局配置中配置的nodejs
在这里插入图片描述

7.构建步骤选择执行shell(Execute shell)
在这里插入图片描述

配置bulid构建的脚本

#查看环境path
echo $PATH
#打印node版本
node -v
#打印npm版本
npm -v
#安装镜像文件,镜像文件的地址具体根据前端使用的库进行配置
npm install yarn --registry=http://registry.npm.xxx.org/
#开始构建
npm run build
#进入构建完的dist目录
cd dist
#移除上次打的压缩包
rm -rf dist.tar.gz
#把dist目录下的文件全部打成压缩包
tar -zcvf dist.tar.gz *
cd ../

在这里插入图片描述
Name:目标主机名称,前面配置主机时有提到,在第七部分的第2点配置的,若是配置了多台,则此处为下拉选择。

Source files:需要传输的文件路径,jenkins默认打出来的jar包放在/var/lib/jenkins/workspace目录下,后面的目录test-doravis为创建任务的名称,此处只用填写项目打包后的结尾文件名即可,前缀默认会拼接
在这里插入图片描述

Remove prefix:移除文件前缀,当从jenkins服务器把tar.gz文件通过ssh发送到目标服务器后,目标服务器存放tar.gz的目录,需要去掉的前缀(源jenkins存放tar.gz的目录为基础)

Remote directory:远程目录,此目录是基于前面第七部分的第2点配置ssh server时定义的目录(/u01)为根目录。按此配置,则目标服务器上需要存在/u01/project的目录

Exec command:配置传输到目标服务器后执行的命令

#进入存放tar.gz文件的目录
cd /u01/project
#移除存放前端文件的目录
rm -rf webProject
#创建存放前端文件的目录
mkdir webProject
#解压tar.gz文件,并放到上面创建的目录下
tar -zxvf dist.tar.gz -C webProject
#移除tar.gz文件
rm -rf dist.tar.gz

9.保存配置,立即构建,构建成功后,在目标服务器存在此dist文件
在这里插入图片描述

10.若是要访问前端项目,只需在nginx中配置下反向代理即可访问前端页面。
在这里插入图片描述

十五、权限分配

1.添加用户,系统管理-》jenkins专有用户数据库-》新建用户,填写用户信息
在这里插入图片描述
2.添加角色分配插件,系统管理-》插件管理,添加Role-based Authorization Strategy插件

在这里插入图片描述
3.修改权限方式 ,系统管理-》全局安全配置,授权策略改为Role-Based Strategy

在这里插入图片描述
修改完成后,在系统管理才会出现Manage and Assign Roles

在这里插入图片描述
4.配置权限,系统管理-》Manage and Assign Roles,可以配置角色,给用户分配角色。

在这里插入图片描述
5.配置角色,系统管理-》Manage and Assign Roles-》Manage Roles

Global roles:最外层比较宏观的权限,全局角色,针对此角色配置操作某个菜单的权限

Item roles:针对任务进行的权限划分,使用正则标识式进行配置

在这里插入图片描述

此处全局角色,配置了一个view,只分配了一个read的权限;任务添加了一个web角色,使用正则表达式匹配任务名为web开头的任务。
在这里插入图片描述

6.给用户分配角色,系统管理-》Manage and Assign Roles-》Assign Roles

此处给用户张三、李四分配的view角色,登录进来后看不到删除、编辑、添加相关的菜单。

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

在item roles给张三、李四勾上可以操作的任务

在这里插入图片描述

此时用户张三、李四登录可以看到分配的任务,使用正则标识式匹配的任务列表
在这里插入图片描述

而我们系统中是有两个任务的,下面的图是管理员看到的效果。
在这里插入图片描述

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

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

相关文章

学习Fast-LIO系列代码中相关概念理解

目录 一、流形和流形空间&#xff08;姿态&#xff09; 1.1 定义 1.2 为什么要有流形? 1.3 流形要满足什么性质&#xff1f; (1) 拓扑同胚 (2) 可微结构 1.4 欧式空间和流形空间的区别和联系? (1) 区别&#xff1a; (2) 联系&#xff1a; 1.5 将姿态定义在流形上比…

基于java+springboot+vue实现的二手闲置物品置换系统(文末源码+Lw+ppt)23-375

摘 要 大学生二手闲置物品置换交易管理系统设计的目的是为用户提供免费物品、积分物品等功能。 与其它应用程序相比&#xff0c;大学生二手闲置物品置换交易的设计主要面向于学校&#xff0c;旨在为管理员和卖家、用户提供一个大学生二手闲置物品置换交易管理系统。用户可以…

Java项目:80 springboot师生健康信息管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统的角色&#xff1a;管理员、宿管、学生 管理员管理宿管员&#xff0c;管理学生&#xff0c;修改密码&#xff0c;维护个人信息。 宿管员…

LLM推理入门指南②:深入解析KV缓存

在本系列文章《LLM推理入门指南①&#xff1a;文本生成的初始化与解码阶段》中&#xff0c;作者对Transformer解码器的文本生成算法进行了高层次概述&#xff0c;着重介绍了两个阶段&#xff1a;单步初始化阶段&#xff0c;即提示的处理阶段&#xff0c;和逐个生成补全词元的多…

数组类模板(类模拟实现静态数组)

目录 介绍&#xff1a; 案例描述&#xff1a; 思路&#xff1a; 对要求分别分析实现&#xff1a; 创建对应的类&#xff1a; 1.定义一个数组类 2.类中属性有&#xff1a;数组&#xff0c; 容量&#xff0c; 大小 3.数组函数有&#xff1a; 构造函数&#xff08;容量&am…

Oracle EBS AR接口和OM销售订单单价为空数据修复

最近,用户使用客制化Web ADI 批量导入销售订单行功能,把销售订单行的单价更新成空值,直到发运确认以后,财务与客户对帐才发现大量销售订单的单价空,同时我们检查AR接口发现销售订单的单价和金额均为空。 前提条件 采用PAC成本方式具体问题症状 销售订单行的单价为空 Path:…

车载以太网AVB交换机 gPTP透明时钟 6口 百兆车载以太网交换机

SW100TE百兆车载以太网交换机 一、产品简要分析 6端口百兆车载以太网交换机&#xff0c;其中包含5通道100BASE-T1泰科MATEnet接口和1个通道100BASE-TX标准以太网(RJ45接口)&#xff0c;可以实现车载以太网多通道交换&#xff0c;车载以太网数据采集和模拟&#xff0c;Bypass数…

Discourse 最多允许有几个分类级别

和 DISCUZ 不同&#xff0c;DISCUZ 可以允许分类下面还有分类&#xff0c;再继续分类这种嵌套式分类。 Discourse 最多只允许有 2 个分类。 如果你在已有的分类下再继续分类的话&#xff0c;系统会提示错误&#xff1a; 意思就是子分类不能再分子分类。 Discourse 尽量采取了…

Chapter 1 - 6. Introduction to Congestion in Storage Networks

NVMe/TCP NVMe/TCP carries NVMe commands over TCP transport (Figure 1-8) for accessing remote block storage via a lossy or sometimes lossless network. It is an OSI layer 5 (sessions layer) protocol. NVMe/TCP 通过 TCP 传输(图 1-8)传输 NVMe 命令,以便通过有…

pnpm、monorepo分包管理、多包管理、npm、vite、前端工程化、保姆级教程

浅尝pnpm monorepo 多包管理方案 &#x1f4a1;tips: 创建pnpm monorope多包管理框架流程 初始化 mkdir taurus & cd taurus pnpm init创建基础文件 创建文件pnpm-workspace.yaml packages:- packages/**创建文件夹packages/ -packages/ -package.json -pnpm-workspace…

一周学会Django5 Python Web开发-Django5模型分页查询

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计43条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

初步了解C++

目录 一&#xff1a;什么是C&#xff1f; 二.C发展史 三:C关键字 四&#xff1a;命名空间 4.1命名空间的介绍 4.2命名空间的使用 4.3命名空间的使用 4.3.1使用作用域限定符 4.3.2 使用using将命名空间的某个成员引入 4.3.3使用using把整个命名空间展开 4.4命名空…

软件测试计划

1测试目的 2测试范围 3资源要求 3.1人力资源 3.2指派干系人 3.3测试环境 3.4测试工具 4测试类型 5测试安排 5.1测试进度 5.2测试策略 5.2.1测试需求 5.2.2测试类型 6测试停止标准 7测试风险 8缺陷管理 8.1缺陷属性 8.2缺陷类型 8.3缺陷严重程度 8.4缺陷优先…

(十一)图像的罗伯特梯度锐化

环境&#xff1a;Windows10专业版 IDEA2021.2.3 jdk11.0.1 OpenCV-460.jar 系列文章&#xff1a; &#xff08;一&#xff09;PythonGDAL实现BSQ&#xff0c;BIP&#xff0c;BIL格式的相互转换 &#xff08;二&#xff09;BSQ,BIL,BIP存储格式的相互转换算法 &#xff08;三…

windows无法使用hadoop报错:系统找不到路径

在windows下安装hadoop-3.1.4,进行环境变量配置后&#xff0c;打开window命令行窗口测试hadoop命令&#xff0c;报错&#xff0c;如图所示&#xff1a; 方案&#xff1a;由于JAVA_HOME路径有空格导致&#xff0c;可修改hadoop下\etc\hadoop\hadoop_env.cmd文档中set JAVA_HOME以…

Beans模块之工厂模块DisposableBean

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

【软件工程导论】——Visio与StarUML的安装

目录 &#x1f552; 1. Visio&#x1f552; 2. StarUML &#x1f552; 1. Visio 1、下载Office Tool Plus并安装&#xff1a;&#x1f50e; Office Tool Plus官网 2、打开软件 → 部署 → 添加产品 3、这里我选择Visio 2021 专业版 LTSC&#xff0c;确定&#xff0c;随后点击“…

ABAP AMDP 示例

AMDP 是HANA开发中的一种优化模式 按SAP的官方建议&#xff0c;在可以使用Open SQL实现需要的功能或优化目标的时候&#xff0c;不建议使用AMDP。而在需要使用Open SQL不支持的特性&#xff0c;或者是大量处理流和分析导致了数据库和应用服务器之间有重复的大量数据传输的情况…

自动化潮流框架——Playwright 大解密!

一说到自动化测试&#xff0c;第一个反应估计就是Pythonselenium这样的一个组合&#xff0c;其实在2020年的时候市面上就出现了另一个由微软发布的一款UI自动化测试工具&#xff0c;叫Playwright。经过几年的迭代和技术的沉淀&#xff0c;该工具受到越来越多的人重视和青睐。 B…

印度神体系与编程思维

印度神体系中存在三大主神&#xff1a;至高神梵天、毗湿奴以及湿婆。 1.神的类型抽象与神性优先级&#xff1a; 每一个神都掌握着世间中所存在的规律&#xff0c;比如天界里因陀罗&#xff08;帝释天&#xff09;等神掌控风火水电。换句话说&#xff0c;每一个可以抽象出来的世…