自动化项目管理工具方法 (项目构建工具)

前言:

当下越来越多的软件开发团队注重构建代码的速度和代码的质量,也就是所谓的追求持续集成(CI)。

在开发团队里面,每个人提交代码都是非常的频繁,如果每个人提交一次打包一次,去服务器上手动的发版,比如打成war包去was上部署,这样的工作量是非常巨大的。也是非常麻烦的一件事儿,久而久之,整个人都会麻木的呵。我也是这么过来的,想必很多人都有过这样的经历。

还好现在技术先进了,越来越多的辅助开发工具浮现在人们的面前,jenkins就是其中之一。

jenkins具有以下优点:

  • 实现软件构建的自动化,jenkins搭建好后,运维人员或则开发人员将脚本写好,以及环境变量什么的都搭建完毕后以后再发版,不光是开发人员,就连测试工程师都可以进行部署项目。
  • 可以构建持续的自动化测试 :他可以在构建前设置相关的当事人,做到实时的将构建执行后的结果通知到位。比如邮箱通知。
  • 最关键的一点是jenkins是可以继承maven工具,通过git地址,或则svn仓库地址在仓库里面对最新代码分支进行发版即可,如果发版出现问题,直接修改回上一个分支(比如20190110),重新构建发版即可实现回退。简直是节省了大量的时间精力给开发人员。

正文:

上面说了一堆废话,现在我们正儿八经的说下安装部署jenkins的具体步骤。

(此处省略配置java环境变量的内容,同学们可以自己去*载下**配置。)

1.获取jenkins安装源文件进行*载下**

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo

让每一项建设精准高效,自动化构建工具是什么

2.导入公钥

rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key

让每一项建设精准高效,自动化构建工具是什么

3. 正式安装Jenkins

yum isntall -y jenkins

让每一项建设精准高效,自动化构建工具是什么

4.配置文件修改

view /etc/sysconfig/jenkins

4.1修改默认端口号

这里默认端口号是8080,如果你的这个端口没有被占用,完全可以不用修改。

JENKINS_PORT="8080"

可以根据需要修改成自己需要的端口号、比如8088等,修改完端口号,如果你是阿里云主机,切记要对接口放行,添加入口规则配置,否则就算改了你也访问不到的。虚拟机的话,就不必了。如果出现访问不到的话,可以尝试关闭防火墙,重启试试。

4.2修改jenkins用户

这里修改主要是防止出现某个文件权限问题,可能出现的各种各样的问题。

JENKINS_USER="root"

完整的

/etc/sysconfig/jenkins配置文件如下所示:

## Path: Development/Jenkins
## Description: Jenkins Automation Server
## Type: string
## Default: "/var/lib/jenkins"
## ServiceRestart: jenkins
#
# Directory where Jenkins store its configuration and working
# files (checkouts, build reports, artifacts, ...).
#
JENKINS_HOME="/var/lib/jenkins"
JENKINS_JAVA_CMD=""
JENKINS_USER="root"
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT="8080"
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
 option list: java -jar jenkins.war --help
#
JENKINS_ARGS=""

4.3修改java_home配置路径。

此处修改的文件是vim /etc/init.d/jenkins

修改地方如下

/usr/java/jdk1.8.0_181/bin/java这一行是我自己新添加的,同学们可以配上自己的java路径

candidates="
/usr/java/jdk1.8.0_181/bin/java
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
"

jenkins运行必须是要依赖java环境的,一般我们配置的java环境变量跟它配置文件的不一样,所以需要修改成我们自己安装java的路径,否则会导致无法启动jenkins。

完整配置文件

/etc/init.d/jenkins如下:

#!/bin/sh
#
# RedHat system statup script for Jenkins
# Check for missing binaries (stale symlinks should not happen)
JENKINS_WAR="/usr/lib/jenkins/jenkins.war"
test -r "$JENKINS_WAR" || { echo "$JENKINS_WAR not installed";
	if [ "$1" = "stop" ]; then exit 0;
	else exit 5; fi; }
# Check for existence of needed config file and read it
JENKINS_CONFIG=/etc/sysconfig/jenkins
test -e "$JENKINS_CONFIG" || { echo "$JENKINS_CONFIG not existing";
	if [ "$1" = "stop" ]; then exit 0;
	else exit 6; fi; }
test -r "$JENKINS_CONFIG" || { echo "$JENKINS_CONFIG not readable. Perhaps you forgot 'sudo'?";
	if [ "$1" = "stop" ]; then exit 0;
	else exit 6; fi; }
JENKINS_PID_FILE="/var/run/jenkins.pid"
JENKINS_LOCKFILE="/var/lock/subsys/jenkins"
# Source function library.
. /etc/init.d/functions
# Read config
[ -f "$JENKINS_CONFIG" ] && . "$JENKINS_CONFIG"
# Set up environment accordingly to the configuration settings
[ -n "$JENKINS_HOME" ] || { echo "JENKINS_HOME not configured in $JENKINS_CONFIG";
	if [ "$1" = "stop" ]; then exit 0;
	else exit 6; fi; }
[ -d "$JENKINS_HOME" ] || { echo "JENKINS_HOME directory does not exist: $JENKINS_HOME";
	if [ "$1" = "stop" ]; then exit 0;
	else exit 1; fi; }
# Search usable Java as /usr/bin/java might not point to minimal version required by Jenkins.
# see http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-RedHat-Linux-td25673707.html
candidates="
/usr/java/jdk1.8.0_181/bin/java
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
"
for candidate in $candidates
do
 [ -x "$JENKINS_JAVA_CMD" ] && break
 JENKINS_JAVA_CMD="$candidate"
done
JAVA_CMD="$JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS -DJENKINS_HOME=$JENKINS_HOME -jar $JENKINS_WAR"
PARAMS="--logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon"
[ -n "$JENKINS_PORT" ] && PARAMS="$PARAMS --httpPort=$JENKINS_PORT"
[ -n "$JENKINS_LISTEN_ADDRESS" ] && PARAMS="$PARAMS --httpListenAddress=$JENKINS_LISTEN_ADDRESS"
[ -n "$JENKINS_HTTPS_PORT" ] && PARAMS="$PARAMS --httpsPort=$JENKINS_HTTPS_PORT"
[ -n "$JENKINS_HTTPS_KEYSTORE" ] && PARAMS="$PARAMS --httpsKeyStore=$JENKINS_HTTPS_KEYSTORE"
[ -n "$JENKINS_HTTPS_KEYSTORE_PASSWORD" ] && PARAMS="$PARAMS --httpsKeyStorePassword='$JENKINS_HTTPS_KEYSTORE_PASSWORD'"
[ -n "$JENKINS_HTTPS_LISTEN_ADDRESS" ] && PARAMS="$PARAMS --httpsListenAddress=$JENKINS_HTTPS_LISTEN_ADDRESS"
[ -n "$JENKINS_DEBUG_LEVEL" ] && PARAMS="$PARAMS --debug=$JENKINS_DEBUG_LEVEL"
[ -n "$JENKINS_HANDLER_STARTUP" ] && PARAMS="$PARAMS --handlerCountStartup=$JENKINS_HANDLER_STARTUP"
[ -n "$JENKINS_HANDLER_MAX" ] && PARAMS="$PARAMS --handlerCountMax=$JENKINS_HANDLER_MAX"
[ -n "$JENKINS_HANDLER_IDLE" ] && PARAMS="$PARAMS --handlerCountMaxIdle=$JENKINS_HANDLER_IDLE"
[ -n "$JENKINS_ARGS" ] && PARAMS="$PARAMS $JENKINS_ARGS"
if [ "$JENKINS_ENABLE_ACCESS_LOG" = "yes" ]; then
 PARAMS="$PARAMS --accessLoggerClassName=winstone.accesslog.SimpleAccessLogger --simpleAccessLogger.format=combined --simpleAccessLogger.file=/var/log/jenkins/access_log"
fi
RETVAL=0
case "$1" in
 start)
	echo -n "Starting Jenkins "
	daemon --user "$JENKINS_USER" --pidfile "$JENKINS_PID_FILE" $JAVA_CMD $PARAMS > /dev/null
	RETVAL=$?
	if [ $RETVAL = 0 ]; then
	 success
	 echo > "$JENKINS_PID_FILE" # just in case we fail to find it
 MY_SESSION_ID=`/bin/ps h -o sess -p $`
 # get PID
 /bin/ps hww -u "$JENKINS_USER" -o sess,ppid,pid,cmd | \
 while read sess ppid pid cmd; do
		[ "$ppid" = 1 ] || continue
		# this test doesn't work because Jenkins sets a new Session ID
 # [ "$sess" = "$MY_SESSION_ID" ] || continue
	 	echo "$cmd" | grep $JENKINS_WAR > /dev/null
		[ $? = 0 ] || continue
		# found a PID
		echo $pid > "$JENKINS_PID_FILE"
	 done
	 touch $JENKINS_LOCKFILE
	else
	 failure
	fi
	echo
	;;
 stop)
	echo -n "Shutting down Jenkins "
	killproc jenkins
	rm -f $JENKINS_LOCKFILE
	RETVAL=$?
	echo
	;;
 try-restart|condrestart)
	if test "$1" = "condrestart"; then
		echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
	fi
	$0 status
	if test $? = 0; then
		$0 restart
	else
		: # Not running is not a failure.
	fi
	;;
 restart)
	$0 stop
	$0 start
	;;
 force-reload)
	echo -n "Reload service Jenkins "
	$0 try-restart
	;;
 reload)
 	$0 restart
	;;
 status)
 	status jenkins
	RETVAL=$?
	;;
 probe)
	## Optional: Probe for the necessity of a reload, print out the
	## argument to this init script which is required for a reload.
	## Note: probe is not (yet) part of LSB (as of 1.9)
	test "$JENKINS_CONFIG" -nt "$JENKINS_PID_FILE" && echo reload
	;;
 *)
	echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
	exit 1
	;;
esac
exit $RETVAL

5.启动jenkins

service jenkins start

6.访问并配置jenkins

http://{IP地址}:8080

这里要填写自己刚才配置的端口号

7.getting start

这里需要验密的,密码在图示的文件中

让每一项建设精准高效,自动化构建工具是什么

8.选择性安装一些插件

这里我们按照第一种情况,默认的插件推荐进行安装

让每一项建设精准高效,自动化构建工具是什么

9.如果在上一步骤中有些插件安装失败,选择retry重试,这个重试也是很强大的,一般都会成功的。

让每一项建设精准高效,自动化构建工具是什么

10.创建一个管理员账号

让每一项建设精准高效,自动化构建工具是什么

11.进入崭新的jenkins页面。

让每一项建设精准高效,自动化构建工具是什么

安装到这里,我们的Jenkins就算大功告成了。如果还需要一些插件可以手动去Jenkins的系统管理/插件管理去*载下**即可。

下一节我们以git为例进行微服务的构建。