首先下载: https://www.jenkins.io
然后找到对应的centos jekins 安装,安装前首先下载jdk。
> rpm -ivh jekins.rpm
>rpm -ql jekins
https://www.jenkins.io/zh/doc/book/installing/ 安装文档
>java -jar jenkins.war --httpPort=9090 //如果不指定端口号则默认是8080
-Dhudson.util.ProcessTree.disable=true // 由于jekins会默认在执行脚本后,又杀死所有的因自身创建的进程,因此如果阻止这种行为就需要在启动添加这个命令。
或者在脚本中添加 BUILD_ID=DONTKILLME
》http://127.0.0.1:8080/
// 进入页面,初次会提示密码生成的位置让输入。
cat /root/.jenkins/secrets/initialAdminPassword
----》 git对接
首先在jekins所在机器上安装git 。
jekins 配置用户:
创建用户: mananger-jekins -》 用户管理 -》 新建用户 即可。
安装权限插件:authorize-project
赋予权限: manager-jekins -》 Configure Global Security -》Authentication -》Jenkins’ own user database 设置不允许用户注册
授权策略 Strategy -》 安全矩阵 在内部配置admin和一般用户的权限。(一般用户设置build 和 read权限,workspace工作区即可)
》 yum install -y git
gitlib插件集成:
Manager-jekins -》 Manager Plugins -》 【可选插件】 -》gitlib(搜索框输入) -》勾选和gitlib相关选项,下载。安装完成后重启。
global tool configuration: 可安装设置 java ,maven(mvn 环境变量注意要配置) ,git , svn等信息。
应用和gitlib集成:
新建任务 -》 输入名称 -》 选择*风格 -》 输入项目名
源码管理:git -》Repository URL输入git代码地址资源,如果是http的,在【添加】中【Jekins】修改输入账号密码即可。ssh需要输入key值信息。
构建 -》 新建构建任务 -》 Invoke top-level Maven target -》Goal: package -Dmaven.test.skip=true
Failed build in Jenkins -Maven build failed FATAL: Couldn’t find any executable in null
1. 未在全局工具配置中设置环境变量,maven要设置环境变量。
发布部署插件:
1 安装插件 .anager-jekins , manager-plugins, 选择【可选插件】 安装两个插件 Publish Over SSH (用于连接远端电脑) Deploy to container (用于发布应用)
2. manager-jekins -> configure system -> Publish over SSH 设置要打包的环境地址。
SSH Servers-配置目标IP地址和账号密码,及根路径,没有则用 "/"指向到根路径。不能不填。
3. 在项目中选择 构建后动作 -》 Send build artifacts over SSH -》 选择IP
注意用【构建后动作】publish over ssh时,在【构建环境】中不要勾选以下两个选项。
Send files or execute commands over SSH before the build starts Help for feature: Send files or execute commands over SSH before the build starts
Send files or execute commands over SSH after the build runs
加前缀环境变量是因为jekins会对自己启动的ssh命令,在运行完成后kill掉,防止kill掉应用而加的。(ProcessTreeKiller)
网上说法有以下4种,但是我这边的原因是start.sh脚本中的jar文件写的是相对路径,对于远端要执行的脚本,内部一定要用绝对路径,不然表面看着成功了,其实却没有。
1.JENKINS_NODE_COOKIE=dontkillme BUILD_ID=dontKillMe sh /opt/soft/scs-cn-api/start.sh ***-api.jar 8080
2. Global Configuration -》Environment variables:
全局属性设置:BUILD_ID=DONTKILLME
3. 脚本中带有export build_id
4. jenkins的启动命令中设置: java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war
参见文章: https://blog.csdn.net/u011781521/article/details/80210985
5. 在start.sh中添加daemonize工具(防止被kill掉的一种工具),具体自己搜索下。
在执行后还是不行,注意jekins的日志中是否有以下错误提示。
Exec exit status not zero. Status [2]
表示你的start.sh 脚本给的权限太少,导致jenkins无权限去启动。
最后就是start.sh 的简单的脚本,可以满足一般的jar文件操作:
注意一点因远端ssh执行,且应用名从外部传入,因此在查找pinid时,要剔除 start.sh命令这行。
#!bin/bash echo $BUILD_ID appname=${1} port=${2} JAVA_HOME=/opt/jdk1.8.0/bin echo $JAVA_HOME echo $appname echo $port pid=`ps -ef|grep -v grep|grep -v start.sh|grep ${appname}|awk '{print $2}'` if [[ x$pid == x ]] then echo start-- else echo stop-- kill -9 $pid sleep 5 echo start-- fi #nohup $JAVA_HOME/java -jar $appname --server.port=$port > /dev/null 2>&1 & nohup $JAVA_HOME/java -jar /opt/soft/application/$appname --server.port=$port & sleep 5 echo started....