Jenkins是什么?

Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。

官网:https://jenkins.io/ 官方文档:https://jenkins.io/doc/

安装Jenkins

#安装openjdk,jenkins依赖
[root@test ~]# yum install -y java-1.8.0-openjdk

#查看JDK版本,验证是否安装成功
[root@test ~]# java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)

#yum的repos中默认是没有Jenkins的,需要先将Jenkins存储库添加到yum repos
[root@test ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@test ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

#安装jenkins
[root@test ~]# yum install -y jenkins

命令

#启动jenkins
[root@test ~]# systemctl start jenkins

#查看jenkins启动状态
[root@test ~]# systemctl status jenkins

#停止jenkins
[root@test ~]# systemctl stop jenkins

#查看jenkins进程
[root@test ~]# ps aux |grep jenkins
jenkins 95062 230 4.1 5682456 327392 ? Ssl 10:15 0:16 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20

访问

浏览器访问ip:8080

#如没有显示页面,可以使用以下两种方式的任意一种

#关闭防火墙
systemctl stop firewalld

#添加防火墙规则
firewall-cmd --zone=public --add-port=8080/tcp --permanent

通过命令查看密码解锁jenkins

less /var/log/jenkins/jenkins.log 


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

97f81ad554894de68de6e75f48e6f3b6

This may also be found at: /var/lib/jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

2021-06-24 03:21:19.457+0000 [id=33] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
2021-06-24 03:21:19.481+0000 [id=22] INFO hudson.WebAppMain$3#run: Jenkins is fully up and running
(END)

安装推荐插件

安装完成后,设置管理员账号

配置访问地址

进入主页面

jenkins的配置文件:

#查看jenkins的配置文件,定义了home、JAVA_CMD、user、port等基础配置,保持默认即可
cat /etc/sysconfig/jenkins

jenkins程序主目录:

ls /var/lib/jenkins/
config.xml #初始时里边定义Jenkins的版本,用户等各种信息
credentials.xml #存储Git拉取的证书信息。
fingerprints #其中定义了通过秘钥所拉取的项目记录。
hudson.model.UpdateCenter.xml
hudson.plugins.git.GitTool.xml
identity.key.enc
jenkins.install.InstallUtil.installingPlugins
jenkins.install.InstallUtil.lastExecVersion
jenkins.install.UpgradeWizard.state
jenkins.model.JenkinsLocationConfiguration.xml
jenkins.security.apitoken.ApiTokenPropertyConfiguration.xml
jenkins.security.QueueItemAuthenticatorConfiguration.xml
jenkins.security.UpdateSiteWarningsConfiguration.xml
jenkins.telemetry.Correlator.xml
jobs #创建的任务都会存放在这里
logs #存放jenkins相关的日志
nodeMonitors.xml
nodes #节点管理的信息,多节点时用到
plugins #插件所在目录
queue.xml
queue.xml.bak
secret.key
secret.key.not-so-secret
secrets #密码秘钥所在目录
updates
userContent
users #用户信息
workflow-libs
workspace #工作空间

jenkins存放数据不依靠数据库,所以在移植时只需要拷贝整个程序主目录即可。

用户管理

新建用户

建立完毕后可看到对应的用户,点击用户进行相关配置

查看当前用户的构建历史

可修改当前用户的邮箱,密码,视图等相关用户信息

删除用户

插件

安装以下插件

编译依赖

安装Maven
#下载maven包,解压
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar zxvf apache-maven-3.6.3-bin.tar.gz
mv apache-maven-3.6.3 /usr/local/maven

#添加环境变量
vi /etc/profile
#MAVEN
MAVEN_HOME=/usr/local/maven
export MAVEN_HOME
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

#生效环境变量
source /etc/profile

#查看版本号
mvn -v
安装NPM
#下载node,解压
[root@public home]# wget https://nodejs.org/dist/v12.19.0/node-v12.19.0-linux-x64.tar.xz
[root@public home]# tar xf node-v12.19.0-linux-x64.tar.xz
[root@public home]# cd node-v12.19.0-linux-x64
#软链接
[root@public node-v12.19.0-linux-x64]# ln -s /home/node-v12.19.0-linux-x64/bin/npm /usr/local/bin/
[root@public node-v12.19.0-linux-x64]# ln -s /home/node-v12.19.0-linux-x64/bin/node /usr/local/bin/
#查看版本号验证
[root@public node-v12.19.0-linux-x64]# node -v
v12.19.0
[root@public node-v12.19.0-linux-x64]# npm -v
6.14.8
#安装依赖
[root@public node-v12.19.0-linux-x64]# npm install

配置Jenkins环境变量

用户权限

系统管理 –> 全局安全配置(Manage Jenkins –> Configure Global Security) 勾选Role-Based Strategy

保存后可看到多了Manage and Assign Roles选项

准备工作:

创建不同环境的视图和任务

创建不同的用户

配置角色

创建角色名称为only_read,需点击add才能添加,赋予读取权限

创建角色名称dev,对应看到的视图dev.*(代表匹配dev开头的所有应用),点击图中的dev.*可查看到浏览器的弹窗中所匹配到的任务

勾选赋予相对应的权限,下图所示权限为:可以查看构建取消配置任务,可查看该任务的工作区.(这里给予配置权限是因为开发可能需要构建对应的Git分支)

保存后选择分配角色,是用户与角色进行关联

使用户与匹配的视图任务相关联

保存后切换到dev用户登录,可看到dev用户只能看到dev的视图,无法看到test和prod视图,无法进行管理jenkins

切换为test用户登录,可看到test用户只能看到test的视图,无法看到dev和prod视图,无法进行管理jenkins

⚠定义角色和权限应当视当前情况进行分配

任务

丢弃旧的构建

删除构建历史和构建打包的工作空间(建议在磁盘空间不足情况下或开发测试环境任务使用,生产勿用)

参数化构建

可通过参数进行打包编译.

(使用英文版进行演示)

字符串参数

点击构建后先弹出用于构建的参数

查看构建后的控制台输出

可查看到使用echo $unionpay可读取到先前定义的参数

选项构建

点击构建后,会弹出选项,让用户进行选择

查看控制台可看到,用户选择test后,使用echo $profile打印出了正确的参数

拉取代码

可选择Git和Svn进行拉取代码,为后续构建项目做准备,此处使用git

Repository URL填写Git的仓库地址,Credentials需要添加认证的Git账号密码,指定分支默认为master 可改变为其他分支

修改记录

可查看相对于上个版本代码的修改记录

工作空间

可查看拉取的代码和编译后的文件,可在线查看文件,也可以直接打包下载,用于查找问题,清理工作空间,可以清空所以当前工作空间内的所有文件

立即构建

构建当前配置好的任务,可在控制台查看是否成功,也可看到具体的打包错误

定时构建

“日程表”格式与 crontab 相似但有细微差别

每行由 5 个值组成(空格或TAB分隔),分别表示分(0-59)、时(0-23)、日(1-31)、月(1-12)、周(0-7, 0/7=周日) ## “M,N” 表示M和N;”M-N” 表示范围[M,N];”M-N/X” 表示范围[M,N]内每隔X;”*/X”表示整个范围内每隔X
前面提到的M/N/X的值都可以用H(意为Hash)代替,散列值起到随机值的效果,且同一项目取值稳定,这对于项目多时分散压力很有用。
H/10 H(0-8) * * 1-5 ## 触发时间: 工作日、Hour为0~8按哈希随机、Minute以10为间隔
H/10 H * * 0,6,7 ## 触发时间: 周末、Hour为全天按哈希随机、Minute以10为间隔 ##
“日程表”修改后,下方会给出下次执行时间点的预告。

添加时间戳
前端编译打包部署

通过npm install下载前端依赖,npm run build进行编译打包

使用nginx配置前端访问

server {
listen 80;
server_name www.test.com;
location /web/ {
root /home/web/;
index index.html;
}
后端编译打包部署

可以使用调用顶层mvn命令也可以使用shell里用mvn

控制台可以看到编译打包是否成功

配置SSH服务器,这里定义SSH名称,地址,端口,用户名,上传文件的路径,如果使用密码勾选Use Password选项,使用密钥使用key

构建时选择SSH插件,进行部署

选择对应配置的SSH服务器,要上传的文件(相对路径),配置中的SSH服务器上传地址为/home/upload,此处的Remote directory为/会上传到/home/upload下,然后配置上传到服务器后,要执行部署的脚本文件,此处使用了nohup sh 2>&1是因为jenkins有一个机制会杀掉启动的项目进程

部署脚本

[root@service-001 upload]# cat hospital-union-pay.sh 
#Java Env
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

port=8085

pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');

jar=hospital-union-pay.jar

if [ -n "$pid" ]; then
kill -9 $pid;
fi
rm -rf /home/app/$jar
mv /home/upload/$jar /home/app/
cd /home/app
java -Xms512M -Xmx1024M -jar $jar --spring.profiles.active=test &
清理工作空间

阿里云K8S部署

通过定义好的字符串参数进行构建

start.sh

JARFILE=/home/App.jar

java -jar config -Djava.security.egd=file:/dev/./urandom $JARFILE profile >> /home/app.log &

tail -50f /home/app.log

Dockerfile

FROM  registry.cn-shenzhen.aliyuncs.com/server:latest
MAINTAINER nmk

COPY *.jar /home/App.jar
COPY start.sh /home/start.sh
RUN chmod +x /home/start.sh
ENV JAVA_HOME=/usr/local/java
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV LC_ALL="en_US.UTF-8"
ENV LANG="en_US.UTF-8"

EXPOSE appport
CMD ["/home/start.sh"]

build.sh

#!/bin/bash

#构建有版本号的镜像,以防需要回滚,而且是从镜像创建服务
docker build -t registry.cn-shenzhen.aliyuncs.com/gongsi_$1/$2:$3 . -f Dockerfile

docker push registry.cn-shenzhen.aliyuncs.com/gongsi_$1/$2:$3
#构建latest版本,用于自动部署
docker build -t registry.cn-shenzhen.aliyuncs.com/gongsi_$1/$2:latest . -f Dockerfile
docker push registry.cn-shenzhen.aliyuncs.com/gongsi_$1/$2:latest

扩展

GitLab可通过webhook进行自动部署,开发一提交代码即可触发jenkins的自动构建.

主题

生成工具URL见:http://afonsof.com/jenkins-material-theme/

在系统配置中加入css即可

效果如下

钉钉机器人通知:https://blog.csdn.net/shi_hong_fei_hei/article/details/112055446

邮件通知:https://www.cnblogs.com/imyalost/p/8781759.html

jenkins通过ssh启动服务失败

查看tomcat启动日志发现报错:war包拒绝访问

因jenkins配置的ssh对应的windows账号不是administrator会出现没权限问题

方案1.更改jenkins的ssh用户为administrator

方案2.给需要权限的文件夹或文件授权

windows命令给用户授权
cacls E:\tomcat /t /e /c /r nmk 拒绝
Cacls E:\tomcat /t /e /c /g nmk:F 允许

多用户情况下可以给everyone
Cacls E:\SFTP\sftp\nmk.war /t /e /c /g everyone:F

自动部署脚本

windows自动部署war包脚本
for /f "tokens=5" %%e in ('netstat -aon ^| findstr ":9021"') do (set f=%%e)
taskkill /t /f /pid %f%

rd /s /q "E:\tomcat-9021\webapps\cmpay"
del "E:\tomcat-9021\webapps\cmpay.war"
move cmpay.war "E:\tomcat-9021\webapps\"
net start tomcat9021

因windows启动tomcat会被jenkins杀掉,所以要把tomcat做成服务

windows自动部署jar包脚本
for /f "tokens=5" %%i in ('netstat -aon ^| findstr ":8081"') do (set j=%%i)
taskkill /t /f /pid %j%

del E:\gzlp_red_package\lepeng-red-package-coupon.jar
move lepeng-red-package-coupon-1.0-SNAPSHOT.jar "E:\gzlp_red_package\lepeng-red-package-coupon.jar"
javaw -Xms256m -Xmx512m -jar "E:\gzlp_red_package\lepeng-red-package-coupon.jar" --spring.profiles.active=dev
linux自动部署war包脚本

jenkins配置

sh /home/tomcat/upload/omall.sh

omall.sh脚本如下

#Java Env
export JAVA_HOME=/usr/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

port=19181
#根据端口号查询对应的pid
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');

#杀掉对应的进程,如果pid不存在,则不执行
if [ -n "$pid" ]; then
kill -9 $pid;
fi

rm -rf /home/tomcat/omall/webapps/omall.war
rm -rf /home/tomcat/omall/webapps/omall
mv /home/tomcat/upload/omall.war /home/tomcat/omall/webapps
cd /home/tomcat/omall/bin
./startup.sh
linux自动部署jar包脚本

jenkins配置

cd /home/tomcat/app/admin-core
nohup sh /home/tomcat/upload/admin-core.sh >> catalina.out 2>&1

admin-core.sh脚本如下

#Java Env
export JAVA_HOME=/usr/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

port=48094
#根据端口号查询对应的pid
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');

#杀掉对应的进程,如果pid不存在,则不执行
if [ -n "$pid" ]; then
kill -9 $pid;
fi

rm -r /home/tomcat/app/admin-core/admin-core-0.0.1-SNAPSHOT.jar
mv /home/tomcat/upload/admin-core-0.0.1-SNAPSHOT.jar /home/tomcat/app/admin-core
cd /home/tomcat/app/admin-core
java -Xms256m -Xmx512m -jar /home/tomcat/app/admin-core/admin-core-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev &
k8s自动部署后端脚本

执行shell

cd admin-core
chmod +x ./build.sh
./build.sh prod $BUILD_NUMBER

gitlab配置

build.sh

#!/bin/bash
#构建有版本号的镜像,以防需要回滚,而且是从镜像创建服务
docker build -t registry-vpc.cn-beijing.aliyuncs.com/lepeng-$1/admin-core-$1:$2 . -f Dockerfile_$1
docker push registry-vpc.cn-beijing.aliyuncs.com/lepeng-$1/admin-core-$1:$2
#构建latest版本,用于自动部署
docker build -t registry-vpc.cn-beijing.aliyuncs.com/lepeng-$1/admin-core-$1:latest . -f Dockerfile_$1
docker push registry-vpc.cn-beijing.aliyuncs.com/lepeng-$1/admin-core-$1:latest

start.sh

#!/bin/bash

JARFILE=/home/App.jar
LOGPATH=/home/logs
LOG=/home/logs/App.log

#日志挂载
ip=`ip addr |grep inet |grep eth0|awk '{print $2}' |awk -F "/" '{print $1}'`
mkdir -p /home/log/gzlp_equity/$ip
cd /var/log
ln -s /home/log/gzlp_equity/$ip java

if [ ! -d $LOGPATH ];then
mkdir -p $LOGPATH
fi

java -jar -Xms512m -Xmx1024m -Dskywalking.agent.namespace=prod -Dskywalking.agent.service_name=prod-admin-core -javaagent:/home/skywalking-agent-plugins/agent-prod-bj/skywalking-agent.jar $JARFILE -Djava.security.egd=file:/dev/./urandom --spring.profiles.active=$ACTIVE >> $LOG &

tail -100f $LOG

Dockerfile_prod

FROM   registry-vpc.cn-beijing.aliyuncs.com/lepeng/centos:latest
MAINTAINER nmk

COPY target/admin-core-0.0.1-SNAPSHOT.jar /home/App.jar
COPY start.sh /home/start.sh
RUN mkdir /home/tomcat/
RUN chmod +x /home/start.sh
ENV JAVA_HOME=/usr/local/java
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV LC_ALL="en_US.UTF-8"
ENV LANG="en_US.UTF-8"
ENV ACTIVE=prod

EXPOSE 48094
CMD ["/home/start.sh"]
k8s自动部署前端脚本

执行shell

cd ..
tar zcvf mps-admin-ui.tar mps-admin-ui_tdev
mv mps-admin-ui.tar mps-admin-ui_tdev/docker/
cd mps-admin-ui_tdev/docker/
chmod +x ./build.sh
./build.sh test $BUILD_NUMBER

gitlab配置

Dockerfile_test

FROM   registry-vpc.cn-beijing.aliyuncs.com/lepeng/nginx:latest
MAINTAINER nmk

COPY mps-admin-ui.tar /home/mps-admin-ui.tar
RUN mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.default
RUN tar zxvf /home/mps-admin-ui.tar -C /home/
RUN mv /home/mps-admin-ui_tdev/docker/nginx.conf /usr/local/nginx/conf/nginx.conf
COPY start.sh /home/start.sh
RUN chmod +x /home/start.sh

EXPOSE 80
CMD ["/home/start.sh"]

build.sh

#!/bin/bash
#构建有版本号的镜像,以防需要回滚,而且是从镜像创建服务
docker build -t registry-vpc.cn-beijing.aliyuncs.com/lepeng-$1/mps-admin-ui-$1:$2 . -f Dockerfile_$1
docker push registry-vpc.cn-beijing.aliyuncs.com/lepeng-$1/mps-admin-ui-$1:$2
#构建latest版本,用于自动部署
docker build -t registry-vpc.cn-beijing.aliyuncs.com/lepeng-$1/mps-admin-ui-$1:latest . -f Dockerfile_$1
docker push registry-vpc.cn-beijing.aliyuncs.com/lepeng-$1/mps-admin-ui-$1:latest

start.sh

#!/bin/bash
mv /home/mps-admin-ui_tdev /home/mps-admin-ui
cd /usr/local/nginx
./sbin/nginx
./sbin/nginx -t
echo "nginx Start successfully" >> nginx.log
tail -10f nginx.log

nginx.conf

user nginx nginx;
worker_processes 8;
error_log logs/error_log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 51200;
}

http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 512;
client_header_buffer_size 512k;
large_client_header_buffers 4 256k;
client_max_body_size 100m;
client_body_buffer_size 10m;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
server_tokens off;
sendfile on;
#tcp_nopush on;
keepalive_timeout 120;
tcp_nodelay on;
proxy_buffering on;
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间。一般设置1和2
gzip_comp_level 2;
gzip_buffers 4 8k;
gzip_http_version 1.1;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
#设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 96k;
proxy_temp_file_write_size 96k;
proxy_temp_path /tmp/temp_dir;
#proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
log_format main '[$remote_addr] - [$remote_user] [$time_local] [$request] [$status] [$body_bytes_sent] [$http_referer] [$http_user_agent] [$http_x_forwarded_for] [$request_time] [$upstream_response_time] [$upstream_addr] [$upstream_status]';
server {
listen 80;
server_name tdev.gzlplink.com;
add_header backendIP $upstream_addr; #把后端具体的 upstream 返回给前端 header
add_header backendCode $upstream_status;
include proxy.conf;
access_log /data1/logs/nginx/tdev.gzlplink.com-access_log main;
error_log /data1/logs/nginx/tdev.gzlplink.com-error_log;

location /mps-admin-ui {
root /home/;
index index.html index.htm;
if ( -d $request_filename ){
rewrite ^/(.*)([^/])$ $scheme://$host/$1$2/ permanent;
}
log_not_found off;
# 关闭日志
access_log off;
# 缓存时间7天
expires 7d;
# 指定上面设置的缓存区域
#proxy_cache imgcache;
# 缓存过期管理
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
}
}
通过jenkins更新生产的nginx
[root@iZ2ze18q1ojbig8zevjrbuZ nginx]# cat nginx_reload 
#/bin/bash
check_status="`/usr/local/nginx/sbin/nginx -t 2>&1`"

if [ $? -eq 0 ]; then
#echo "nginx configure file ok"
echo $check_status
/usr/local/nginx/sbin/nginx -s reload
else
#echo "nginx configure file failed"
echo $check_stutus
exit
fi
jenkins+newman实现接口测试

安装newman

[root@public-service jenkins]# npm install -g newman
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
/home/.npm-global/bin/newman -> /home/.npm-global/lib/node_modules/newman/bin/newman.js
+ newman@5.2.4
added 128 packages from 187 contributors in 20.745s
[root@public-service jenkins]# newman -v
5.2.4

通过postman生成json文件

通过newman请求该接口进行测试

[root@public-service jenkins]# newman run -r cli test.postman_collection.json 
newman: could not find "html" reporter
ensure that the reporter is installed in the same directory as newman
run `npm install newman-reporter-html`

newman

test

→ https://test.com/doctor-api/v2_0/optimalmall/getProduct
POST https://test.com/doctor-api/v2_0/optimalmall/getProduct [200 OK, 5.84KB, 868ms]

┌─────────────────────────┬────────────────────┬───────────────────┐
│ │ executed │ failed │
├─────────────────────────┼────────────────────┼───────────────────┤
│ iterations │ 1 │ 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│ requests │ 1 │ 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│ test-scripts │ 0 │ 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│ prerequest-scripts │ 0 │ 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│ assertions │ 0 │ 0 │
├─────────────────────────┴────────────────────┴───────────────────┤
│ total run duration: 892ms │
├──────────────────────────────────────────────────────────────────┤
│ total data received: 5.47KB (approx) │
├──────────────────────────────────────────────────────────────────┤
│ average response time: 868ms [min: 868ms, max: 868ms, s.d.: 0µs] │
└──────────────────────────────────────────────────────────────────┘

newman命令

newman run  用例json文件路径
-e 环境变量文件地址
-g 全局变量文件地址
--delay-request 请求间的delay时长,单位为毫秒
--folder 文件夹路径,运行指定文件夹下的用例
-n,--iteration-count number,collection执行的次数
--export-environment path,执行用例后将环境变量导出
--export-globals path,执行用例后将全局变量导出

导出报告

Cli

在console中生成报告

HTML

作为一种external报告方式,html reporter需要安装:

npm install -g newman-reporter-html

[root@public-service jenkins]# newman run test.postman_collection.json -r html
[root@public-service jenkins]# cd newman/
[root@public-service newman]# ls
newman-run-report-2021-06-29-01-35-46-951-0.html