theboyaply
theboyaply
发布于 2022-03-23 / 398 阅读
0
0

Jenkins常见问题

相关地址

官方网址:https://www.jenkins.io/zh/

安装运行

去官网或者其它镜像网站下载稳定war包,比如:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.303.2/jenkins.war

https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/latest

直接找一个目录使用jar命令运行:

nohup java -Xms512m -Xmx1024m -jar jenkins.war --httpPort=8090 --prefix=/jenkins --webroot=/data/jenkins/cache > log.log  2>&1 &

安装高版本jenkins(使用高版本jdk)

此处更新于2023-10-20。

现在高版本的jenkins必须要使用jdk11jdk17或更高版本来运行,但是我们项目上大多都是使用jdk8。因此这里介绍下怎么单独使用不同版本的jdk运行高版本jenkins,从而避免与项目使用的jdk冲突。

很简单,下载你需要的对应版本jdkoracle jdkopenjdk都行),然后指定它去启动jenkins

nohup /data/jenkins/jdk17/bin/java -Xms512m -Xmx1024m -jar jenkins.war --httpPort=8090 --prefix=/jenkins --webroot=/data/jenkins/cache > log.log  2>&1 &

注意,这里必须使用jdk的全路径。

常用插件

Publish Over SSH

此插件用于配置远程主机,配置后可在任务中引用并发送指令。

jenkins-publish-over-ssh1

jenkins-publish-over-ssh2

Role-based Authorization Strategy

用户角色权限控制。

jenkins-role-based-authorization-strategy1

jenkins-role-based-authorization-strateg2

jenkins-role-based-authorization-strategy3

jenkins-role-based-authorization-strategy4

Manage Roles

创建角色。

Global roles:控制全局的权限,一般给一个全部的Read就好了。

Item roles:控制任务维度的权限,Pattern是正则匹配(是匹配任务,不是视图),常用的有.*表示匹配任意的多个字符,如dev.*|表示或者,如dev|uat

jenkins-role-based-authorization-strategy5

Assign Roles

授权用户与角色,用户可在系统配置的管理用户处创建。

常见任务

任务一(直接执行服务器脚本)

新建自由风格软件项目:

image-20211025180603495

jenkins-task1

上图中构建/构建后操作二者选其一即可。

常见问题

任务控制台输出显示远程服务器日志

SSH Server的高级中,勾选Verbose output in console

image-20211025182030131

执行远程服务器脚本找不到环境变量

/usr/bin/env: node: No such file or directory

远程服务器脚本中包含如下命令:

# 编译打包
echo "========>>>>>>>>>>>>> build"
/data/node/node/bin/npm run build:dev

# 日志报错:
/usr/bin/env: node: No such file or directory

使用npm命令时报错找不到node。我们都知道npm需要在node环境下才可以使用。由于远程服务器已经配置了node环境变量,但是通过jenkins去执行时,依然找不到node

两种解决方案:

  1. 在远程服务器中配置node的软连接到/usr/bin目录下,比如:

    ln -s "$(which node)" /usr/bin/node
    
  2. 在执行远程服务器脚本命令之前手动加上缺失的变量环境,比如:

    cd /data/zcgl
    PATH=/data/node/node/bin/node:$PATH
    sh run-front.sh
    

which: no java in xxx

通常我们会在脚本中使用mvn命令去打包编译java工程,和上面找不到node错误一样,mvn命令执行的时候会使用到java环境,如果找不到可能会报如下错误:

which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

那么这个和上面node一样的解决方案:

  1. 在远程服务器中配置java的软连接到/usr/bin目录下,比如:

    ln -s "$(which java)" /usr/bin/node
    
  2. 在执行远程服务器脚本命令之前手动加上缺失的变量环境,比如:

    cd /data/zcgl
    PATH=/data/jdk/jdk1.8/bin:$PATH
    sh run-front.sh
    

– end –


评论