安装
# 先更新源再安装最新版 jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install jenkins
# 启动
sudo service jenkins start
# 停止
sudo service jenkins stop
# 重启
sudo service jenkins restart
# 检查
sudo chkconfig jenkins on
安装好了以后,要先改改端口:
安装完成后,有如下相关目录:
(1)/usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里。
(2) /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
(3)/var/lib/jenkins/:默认的JENKINS_HOME。
(4)/var/log/jenkins/jenkins.log:Jenkins日志文件。
第一种启动方法,切换到jenkins.war存放的目录,输入如下命令:
$ java -jar jenkins.war
修改端口号8089
java -jar jenkins.war --httpPort=8089
sudo vim /etc/sysconfig/jenkins
看到:
改成自己的端口。
然后:
# 检查
sudo chkconfig jenkins on
# 重启
sudo service jenkins restart
配置jenkins网站
访问网站,可以看到:–网址是你自己的网址。
解锁:
选择安装推荐的插件:
安装完成后,后续的程序还会问你添加一个新账号以及确认jenkins的访问地址。
不表。
安装必要的插件
进入插件管理界面:
输入:
Maven Integration搜索:
安装。
安装完成。
配置全局工具
进入
jdk配置
不勾选自动安装,
需要配置 java_home
在centos服务器上面查一下javahome
echo $JAVA_HOME
空值,未配置,找一下java在哪里
which java
查一下原始安装路径:
ls -lrt /usr/bin/java
继续查下去。
ls -lrt /etc/alternatives/java
好了,jdk的准确位置是:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/
编辑/etc/profile文件中配置JAVA_HOME
vim /etc/profile
在最后面添javahome变量
#set java environment
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
执行使其生效:
source /etc/profile
好了,jdk在jenkins的配置如下:
maven配置
在服务器上面找maven有没有安装先。
有安装,那么就按照信息填写—对了,检查一下maven_home有没有设置,顺便设定一下:
echo $MAVEN_HOME
没设定,那么
vim /etc/profile
在最后面添加:
#set maven home
export MAVEN_HOME=/usr/share/maven
export PATH=${MAVEN_HOME}/bin:${PATH}
然后
source /etc/profile
jenkins排坑及账户修正
注意,安装jenkins之后它会在系统创建一个用户账号,jenkins,但是这个jenkins是无法正常使用的,在很多时候,譬如你自定义pipeline脚本需要先
"su jenkins"的时候,然后执行命令行时候,会报错的,
详细你可以看看我的一篇草稿排错排坑文章:
Host key verification failed -解决jenkins调用脚本scp进行远程复制时候的权限问题(初稿)
当然这里面是排错的思考逻辑,有点乱,我这里整理一下,直接按照下面步骤来。
jenkins系统本身有bug的。jenkins安装以后系统会多了一个jenkins用户,如果你切换过去,是切换失败的,例如:
su jenkins
可以看到切换不成功依然是root账号的。
1、解决无法切换jenkins用户的问题。
根源及解释:
/etc/passwd文件中的/bin/bash被yum安装的时候变成了/bin/false.
1
然后我执行cat /etc/passwd命令,果然被改成了/bin/false
cat /etc/passwd
1
接着执行sudo vim /etc/passwd命令,把false改为bash
sudo vim /etc/passwd
1
修改完毕后,执行su jenkins命令。
sudo vim /etc/passwd
改为:
然后执行:
su jenkins
2、解决用户名不是jenkins而是bash的bug
结果新的问题又来啦
当我切换到jenkins用户后,命令提示符的用户名不是jenkins而变成了
-bash-4.1#
网上一查,原因是在安装jenkins时,jenkins只是创建了jenkins用户,并没有为其创建home目录。所以系统就不会在创建用户的时候,自动拷贝/etc/skel目录下的用户环境变量文件到用户家目录,也就导致这些文件不存在,出现-bash-4.1#的问题了
以下命令是在切换到jenkins用户下执行的!(只是用户现在显示的是-bash-4.1)
这个时候呢,参考网上的做法我执行下面步骤:
①vim ~/.bash_profile
执行上面的命令,即使没有.bash_profile文件,linux会自动创建。
②然后再添加这句
export PS1='[\u@\h \W]\$'
1
PS1:命令行提示符环境变量
1
2
具体可以参考:http://zhidao.baidu.com/link?url=rMCdJazfyycZlY5xN-peNO-pUwTcPMROlXvrZZjE2EV9fDA7513e1JsiGXiWPlBWgArqrHNGu4yBvwNSY0Y79_
③我们最后再刷新.bash_profile文件,使其起作用
source ~/.bash_profile
首先:
然后:
source ~/.bash_profile
3、账号开启免密登录
当你要执行jenkins任务时候你可能会发现出现这个问题:
根源有:
解释一二没看出大区别,不过解释2详细,按照解释2来执行:
sudo: no tty present and no askpass program specified
由于帐号并没有开启免密码导致的
假设当前帐号为abc
切换到root下
1 打开sudoers
vi /etc/sudoers
2 添加免密码
abc ALL = NOPASSWD: ALL
文章标签: linux present and no askpa
靠谱的解释:
在Jenkins的使用过程中,如果在脚本中使用到sudo命令,有可能出现如下所示的错误:
sudo: no tty present and no askpass program specified
这是因为Jenkins服务器在执行sudo命令时的上下文有误,导致这个命令执行的异常。
解决方案:
在Jenkins宿主服务器上运行如下命令
$ sudo visudo
在文件的末尾加上一行
jenkins ALL=(ALL) NOPASSWD: ALL
保存文件(注意保存的时候修改文件名,文件名后缀不要加上默认的.tmp,即可覆盖原文件)
Ctrl+O
退出编辑
Ctrl+X
重启Jenkins服务
$ /etc/init.d/jenkins restart
最后,重新执行构建任务,不会出现先前的错误。
PS:如果误操作修改了/etc/sudoers的权限来修改上述文件,则会导致如下所示的错误:
sudo :/etc/sudoers is world writable
sudo : no valid sudoers source found, quitting
sudo : unable to initialize poling plugin
这是Linux的一种保护机制。因此,如果出现上述误操作,则需要执行如下命令来解决:
$ pkexec chmod 0440 /etc/sudoers
好,试试:
sudo visudo
后面加上:
jenkins ALL=(ALL) NOPASSWD: ALL
/etc/init.d/jenkins restart
重启,然后测试一下是不是还要密码:
测试成功,免密登录。
jenkins集成gradle
更新于:2018-09-29
最近玩一下gradle这个编译工具,发现还真的是挺好用的,就是idea上面的bug有点多。
如何配置gradle请看:
centos7下配置gradle4
假如你有一个项目,之前可以用maven构建的,不过你现在换了gradle,即使已经配置好环境变量,依然会出现这错误的:
好了,怎么解决好?
Cannot run program “gradle” in Jenkins
这兄弟也有这问题,我们注意到了:
嗯。。。之前配置maven也经过这个步骤,所以我们可以得出。。jenkins要调用某个可执行程序其实都是要配置的。好了,方向确定,那么,找一找可以找到参考资料了:
Android Jenkins+Git+Gradle持续集成-实在太详细
我们接下来一步一步来实现。
先看看gradle插件安装了没有。
虽然我安装了,但我还是更新了一下。
首先,到系统管理-》全局设置&路径:
配置gradle home:
保存一下,然后到 系统设置-》全局工具配置:
看到了gradle:
然后,
保存一下。
这样就没问题了???
不不不----这样还是有问题的。。
jenkins的path跟实际环境下相差甚远。。所以我习惯在写代码的时候export 一下。。
譬如:
这样才是可行方案。
加上去的效果如何?请看下面:
虽然还是失败了,但是已经可以识别gradle了,阶段目的已经达到。
或者,直接每次都用:
source /etc/profile
脚本权限问题,譬如,删除提示没权限
在Jenkins中运行shell脚本经常遇到权限问题,解决起来非常麻烦,我们索性来个终极解决办法,就是给jenkins一个root权限,这样就不会再遇到权限问题了。
-
vim /etc/sysconfig/jenkins
-
找到$JENKINS_USER改为 “root”:
$JENKINS_USER=“root”
3)然后更改Jenkins home,webroot和日志的所有权:
chown -R root:root /var/lib/jenins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
4).重新启动Jenkins并检查用户是否已被更改
service jenkins restart
这样我们就给jenkins设置了root权限,我们再运行shell脚本就不会提示权限问题了。
总结
jenkins是一个基础的持续集成及运维工具,然而不用不知道,竟然会有一些隐藏的bug的,而且网上的资料都是入门级别,完全没有提到自定义脚本运行时候种种问题,感觉都是摸着石头过河,或者都是码农兼任运维人员。