您的位置:首页 > 其它

Jenkins+Maven+Sonar系统持续集成环境部署以及配置

2016-07-25 09:41 661 查看
忘记密码时的处理办法:

打开忘记密码的用户文件夹,默认 /var/lib/jenkins/users ,里面就一个文件config.xml。打开config.xml,找到<passwordHash>项,

把其中的hash值先改成 "#jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS"

保存并重启jenkins,此时被修改用户的密码变为 "111111",进入jenkins后再通过用户管理重新设置自己的密码即可。

另:Jenkins中复制job的方法:复制/var/lib/jenkins/jobs中的项目目录,并改成要新建的项目名称即可。

--------------------------------------------------------------------------------------------------------------

一、Jenkins介绍以及安装

什么是持续集成?
随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
持续集成正是针对这一类问题的一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
持续集成最早由Martin Fowler 于10年前已经提出,希望通过持续集成能够实现以下过程:

 任何人在任何地点,任何时间可以构建整个项目。

 在持续集成构建过程中,每一个单元测试都必须被执行。

 在持续集成构建过程中,每一个单元测试都必须通过。

 持续集成构建的结果是可以发布的软件包。

 当以上任何一点不能满足时,整个团队的主要任务就是去解决这个问题

持续集成的核心价值

持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;

持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;

持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。

本文此处采用yum安装方式

除了直接java -jar jenkins.war方式,还可以用yum安装,这种方式下提供了更多的可配置选项,更适合生产环境控制jenkins的行为。

安装完成后,可用

不过,我在centos 7环境上测试下来,/etc/rc.d/init.d/jenkins这个脚本写得有点小问题,如果java不在默认目录下,会导致启动失败

定位到67行,会发现该脚本会从以下位置找java可执行文件

如果java没安装在这些目录下,启动就会失败,解决办法:把java所在的正确位置加入其中即可,比如:

注:这样处理后,还要执行一下sudo systemctl daemon-reload,然后就可以service jenkins start了,如果还出错,尝试 cd /etc/rc.d/init.d,然后sudo ./jenkins start 进一步排查。建议同学们把这个启动脚本仔细阅读一下,可以发现很多有用的信息,比如:

上面这些参数定义了配置文件、war包、pid文件、日志的位置,出问题时,我们可以直接到这些位置去查看详情。

比如:端口8080被占用了,需要更改启动端口,直接查看/etc/sysconfig/jenkins这个文件,找到

修改一下即可。

/etc/sysconfig/jenkins这个文件为jenkins的参数配置文件,比如:

JENKINS_USER=
"jenkins"

JENKINS_HOME=
"/var/lib/jenkins"

JENKINS_AJP_PORT=
"8009"

JENKINS_DEBUG_LEVEL=
"5"

JENKINS_ENABLE_ACCESS_LOG=
"no"


构建的状态:下图中分级符号概述了一个Job新近一次构建会产生的四种可能的状态:

Successful:完成构建,且被认为是稳定的。

Unstable:完成构建,但被认为不稳定。

Failed:构建失败。

Disabled:构建已禁用。

#!/bin/bash
#
# Usage: start.sh [debug]
#

cd `dirname $0`
BIN_DIR=`pwd`
#cd ..
DEPLOY_DIR=`pwd`
APPNAME=`ls $DEPLOY_DIR | grep jar`
LOGS_DIR=log
STDOUT_FILE='log/console.log'

if test -n "${JAVA_HOME}"; then
if test -z "${JAVA_EXE}"; then
JAVA_EXE=$JAVA_HOME/bin/java
fi
fi

if test -z "${JAVA_EXE}"; then
JAVA_EXE=java
fi

${JAVA_EXE} -version >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "ERROR: Not Found java installed!"
exit 1
fi

if [ -z "$LOGS_DIR" ]; then
LOGS_DIR=$DEPLOY_DIR/log
fi
if [ ! -d $LOGS_DIR ]; then
mkdir $LOGS_DIR
fi
if [ ! -d $LOGS_DIR ]; then
echo "ERROR: Please check LOGS_DIR=$LOGS_DIR is ok?"
exit 1
fi
STDOUT_FILE=$LOGS_DIR/console.log

echo "Logs_dir: ${STDOUT_FILE}"

JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; then
JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
fi
JAVA_JMX_OPTS=""
if [ "$1" = "jmx" ]; then
JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
fi

JAVA_MEM_OPTS=""
BITS=`${JAVA_EXE} -version 2>&1 | grep -i 64-bit`
if [ -n "$BITS" ]; then
JAVA_MEM_OPTS=" -server -Xmx2048m -Xms2048m -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
else
JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
fi

echo "Starting the $SERVER_NAME ..."
nohup ${JAVA_EXE} $JAVA_SPRING_OPTS  $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -jar $APPNAME > $STDOUT_FILE 2>&1 &

echo "OK!"


View Code

在"构建设置"里开启设置接收邮件的邮箱时,服务器端需要启动 postfix 服务。



--------------------------------------------------
以上为构建java项目,在构建PHP项目时,需修改
1、修改新建项目的类型



2、修改构建项目时的设置



# cat /home/sunyl/jenkins/php.sh

#!/bin/bash
#添加环境相关变量
source /home/sunyl/jenkins/openrc

#使用的hosts文件
hosts=`echo $env|awk -F '-' '{print $1}'`

#以时间命名目录名称
time=`date +"%Y%m%d-%H%M%S"`

#目标应用启动路径
work_dir=/data/ifengsite/htdocs/$appname
package=$workspace/../$appname.tar

#目标应用保留目录
releases_dir=/data/ifengsite/releases/$appname

#建立软连接源目录
work2_dir=$releases_dir/$time

ansible -i /home/sunyl/jenkins/$hosts $env -m shell -a "mkdir -p $work2_dir" -u www

cd $workspace/../ && rm -rf $appname.tar
cd $workspace && tar cf $package *
ansible -i /home/sunyl/jenkins/$hosts $env -m copy -a "src=$package dest=$work2_dir" -u www
ansible -i /home/sunyl/jenkins/$hosts $env -m shell -a "cd $work2_dir && tar xf $appname.tar && rm -rf $appname.tar" -u www

ansible -i /home/sunyl/jenkins/$hosts $env -m shell -a "ln -sfn $work2_dir $work_dir" -u www

ansible -i /home/sunyl/jenkins/$hosts $env -m shell -a "/etc/init.d/php-fpm restart" -u www
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: