前言:
当下越来越多的软件开发团队注重构建代码的速度和代码的质量,也就是所谓的追求持续集成(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为例进行微服务的构建。