jenkins 再次安装

环境

java:1.7 1.8
jenkins:jenkins.noarch.0.2.155-1.1

前言

这次是两年后再次安装jenkins,安装到新机子上,新版本的jenkins需要java8的支持。
安装的用户是jenkins,且配置好了sudo权限。

也就是 先创建好jenkins用户

步骤

下载安装

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install jenkins

配置文件

启动命令的代码:
/etc/init.d/jenkins

如果通过配置文件修改了用户,那么必须修改/var/log/jenkins/var/lib/jenkins/var/cache/jenkins文件的所有者

如果要查看日志信息,在/var/log/jenkins/jenkins.log

启动时的配置信息:/etc/sysconfig/jenkins

修改(或者说添加)jdk路径

执行命令:sudo vim /etc/init.d/jenkins

# 我添加了/home/jenkins/jdk1.8.0_191/bin/java
candidates="
/home/jenkins/jdk1.8.0_191/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
...

# jenkins老一点的版本修改的方式 也就是直接写在 in 后面
for candidate in /home/jenkins/jdk1.8.0_191/bin/java /usr/java/jdk1.7.0_51/bin/java /etc/alternatives/java /usr/lib/jvm/java-1.6.0/bin/java /usr/lib/jvm/jre-1.6.0/bin/java /usr/lib/jvm/java-1.5.0/bin/java /usr/lib/jvm/jre-1.5.0/bin/java /usr/bin/java
do
  [ -x "$JENKINS_JAVA_CMD" ] && break
  JENKINS_JAVA_CMD="$candidate"
done

我上面使用的是jdk1.8来启动的。

修改默认文件的路径

之所以要修改,是因为有时默认安装路径的文件夹分配的存储空间很小(比如我公司);

执行命令:sudo vim /etc/init.d/jenkins

修改jenkins.war的位置

# Check for missing binaries (stale symlinks should not happen)
# 默认的
#JENKINS_WAR="/usr/lib/jenkins/jenkins.war"
# 我修改后的
JENKINS_WAR="/home/jenkins/lib/jenkins.war"

修改日志文件和缓存war的位置

# 这里我自己声明了下面两个变量
JENKINS_LOG="/home/jenkins/log/jenkins.log"
JENKINS_CACHE_WAR="/home/jenkins/cache/war"

# 它们原本默认的位置:/var/log/jenkins/jenkins.log和/var/cache/jenkins/war

JAVA_CMD="$JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS -DJENKINS_HOME=$JENKINS_HOME -jar $JENKINS_WAR"
PARAMS="--logfile=$JENKINS_LOG --webroot=$JENKINS_CACHE_WAR --daemon"

# 其中如果,home/jenkins目录中是没有`log`这个路径的
# 需求我们手动先创建好,否则启动时会报错,还要注意权限问题

修改jenkins的工作空间目录

执行命令:sudo vim /etc/sysconfig/jenkins – 这是打开jenkins的配置文件。

[jenkins@localhost ~]$ sudo vim /etc/sysconfig/jenkins 
[sudo] 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_HOME="/home/jenkins/dataspace"

... ...

防火墙配置

执行如下命令:

sudo firewall-cmd --permanent --new-service=jenkins
sudo firewall-cmd --permanent --service=jenkins --set-short="Jenkins Service Ports"
sudo firewall-cmd --permanent --service=jenkins --set-description="Jenkins service firewalld port exceptions"
sudo firewall-cmd --permanent --service=jenkins --add-port=8080/tcp
sudo firewall-cmd --permanent --add-service=jenkins
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload

查看配置结果:

sudo firewall-cmd --list-all

如下:

[jenkins@localhost ~]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources: 
  services: ssh dhcpv6-client jenkins http
  ports: 8010/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

看到 services中有jenkins就对了。

启动jenkins

命令:

sudo service jenkins start/stop/restart

浏览器访问

我的是http://192.168.0.204:8080/
地址根据自己的情况,进行修改;

第一次登录密码

1、我的是:/home/jenkins/dataspace/secrets/initialAdminPassword
2、页面上会有提示的;

自选插件安装方式

在原有默认的基础上还有添加:

插件名:

Role-based Authorization Strategy
GitLab
Publish Over SSH
SSH
SSH Agent
Email Extension
Git Parameter

Dashboard View – 这个是我打算尝试的,非必须
NodeJS 因为node.js挺火的,所以加进来。
建议别装,一直卡在这个地方,都半个小时了)。

选择好了后,点击install进行安装。
jenkins主要就是靠插件来干活的)

免密登录

执行命令:ssh-copy-id -i ~/.ssh/id_rsa.pub '-p 22222 webuser@106.75.52.44'

[jenkins@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub '-p 22222 webuser@106.75.52.44'

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/jenkins/.ssh/id_rsa.pub"
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
        -f: force mode -- copy keys without trying to check if they are already installed
        -n: dry run    -- no keys are actually copied
        -h|-?: print this help

这道命令我明明没有写错:ssh-copy-id -i ~/.ssh/id_rsa.pub '-p 22222 webuser@106.75.52.44'

却总提示上面的信息,反正就是不成功。(浪费了一个小时)

之后, 我放弃了,换了个方式:

① 先把 部署jenkins服务器上的.ssh中的id_rsa.pub,手动拷贝到远程服务器上(远程服务器的拷贝路径也是在.ssh文件中)

正规的做法应该是使用scp命令,但是我还得去密码,所以就手动弄了。

②再执行命令:cat id_rsa.pub >> authorized_keys

就可以啦!

目的就是为了:将jenkins所在服务器的公钥复制到远程服务器的authorized_keys文件夹中。

使用ssh-copy-id成功后会显示如下(中间会提示要你输入密码):

[jenkins@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22222 webloper@103.59.45.56
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/jenkins/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
webloper@103.59.45.56's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -p '22222' 'developer@123.59.44.56'"
and check to make sure that only the key(s) you wanted were added.

验证是否成功

 ssh webuser@106.75.52.44 -p 22222
# exit 退出远程登录

凭据

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Publish over SSH

这个是远程服务器的配置

路径:系统配置 —> Publish over SSH

在这里插入图片描述

在这里插入图片描述

邮件配置

参考:jenkins配置邮件及增强版邮件通知

脚本 只做参考

java编译脚本

#!/bin/bash
export PATH=~/play-1.2.7:$PATH
#获得当前目录
cur=$(pwd)
echo "编译的当前路径:"${cur}
fileName="$JOB_NAME"
rm -rf ${fileName}.jar
output_path=${cur}/classes
echo $output_path
if [ ! -d $output_path ]; then
mkdir $output_path
fi

echo "jenkins服务器的用户:"`whoami`
## 需要编译的java文件
export libs=`find . -name "*.jar" |xargs|sed "s/ /:/g"`
export javafiles=`find ./ -name "*.java" |xargs|sed "s/ / /g"`

## 获取依赖库
user=`whoami`
playlib=`/home/$user/robotshell/./playlib.sh`

## 先清空.class文件
rm -rf ${cur}/classes/*

## 编译
tc=`javac -d ${cur}/classes -cp ${libs}:$playlib -encoding utf-8 ${javafiles} 2>&1`
if [[ "x" != "x$tc" ]] && [[ "$tc" =~ "错误" || "$tc" =~ "error" ]]
then
  echo "javac 编译出错"
  echo "$tc"
  exit 1
else
  echo "javac 编译成功"
  echo "$tc"
fi

#rm -rf $output_path/ggframework

##打包 排除掉ggframework.util.common包中的文件
cd $output_path
jar -cvf ${cur}/${fileName}.jar `find . -path ./ggframework -prune -o -name '*.class' -not -type d -print`


## 编译后执行的脚本
echo "执行编译后的脚本"
echo `/home/$user/robotshell/./incompile.sh ${WORKSPACE}`

java 远程启动项目脚本

Remote directory为:ggopenapi-ft/api/)

#!/bin/bash
export PATH=~/gogoal_platform/ggopenapi:~/play-1.2.7:$PATH

echo "构建后的路径:"`pwd`

# 不要使用USER 是系统变量为jenkins
JUSER=`whoami`
echo "登录远程服务器的用户:"$JUSER

BASEPATH=/home/$JUSER/gogoal_platform/ggopenapi-ft/api/
echo "基础路径:$BASEPATH"
cd ${BASEPATH}

# 打包备份的文件名
FILENAME=$JOB_NAME
## 路径
FILEPATH="ft"
## 最终名字
FINALNAME=$JOB_NAME

## 上传包全名
TARFILE=${FILENAME}.jar

if [ ! -f $TARFILE ]; then
  echo "上传包不存在"
  exit 1
fi

# 进入jar目录进行备份
cd ${BASEPATH}/${FILEPATH}

cur=$(pwd)
echo "当前路径:"$cur
currday=`date +%Y%m%d`

#创建最新的备份包
gogalwebfile=${cur}/${FINALNAME}-$currday
if [ ! -f $gogalwebfile ]; then
echo "不存在":$gogalwebfile
cp -r ${FINALNAME}.jar ${FINALNAME}-$currday
fi

backup=`ls -lt | find . -name "${FINALNAME}-*" | sort -r | head -n 3|xargs|sed "s/.\///g"|xargs|sed "s/ /\\\\\\|/g"`
echo "保留最近三个备份包:" \"$backup\"
echo "删除的备份包:" `ls |grep "${FINALNAME}-.*" |grep -v $backup | xargs|sed "s/ / /g"`
#删除备份包
rm -rf `ls | grep "${FINALNAME}-.*" | grep -v $backup | xargs|sed "s/ / /g"`

# 进入启动脚本目录
cd ${BASEPATH}
# JAR部署
mv ${FILENAME}.jar ./${FILEPATH}/${FINALNAME}.jar

cp /dev/null nohup.out
BUILD_ID=dontKillMe
nohup ./api.sh
cat nohup.out

前端项目编译脚本

#!/bin/bash
export PATH=/usr/local/play-1.2.7:$PATH

## 获得当前目录
cur=$(pwd)
echo "pwd:"${cur}

## 命名
FILENAME="$JOB_NAME"
TARFILENAME=${FILENAME}.tar.gz
JUSER=`whoami`

## 编译
tc=`play precompile 2>&1`
## 验证编译是否出错
echo "验证编译是否出错"
/home/${JUSER}/robotshell/tcwhile.sh "$tc" "$JOB_NAME"
code=$?
if [[ $code == 110 ]]
then 
	echo "编译出错"
    echo "$tc"
    exit 1
fi

## 删除老包
rm -rf ${TARFILENAME}

## 打包
#rm -rf ./public/*
#cp -r cdn/* public/
tar -czf ${TARFILENAME} ./app/views ./precompiled ./public

if [ ! -f ${TARFILENAME} ]; then
    echo "===准备上传的包没生成成功==="
    exit 1;
fi

## 编译后执行的脚本
echo "执行编译后的脚本"
echo `/home/${JUSER}/robotshell/./incompile.sh ${WORKSPACE}`

前端项目远程执行脚本

#!/bin/bash
export PATH=~/play-1.2.7:$PATH

JUSER=`whoami`

echo "构建后的路径pwd:"`pwd`

BASEPATH="/home/"$JUSER"/gogoal_platform/"
echo "基础路径:$BASEPATH"

cd ${BASEPATH}

cur=$(pwd)
echo "pwd:"${cur}
currday=`date +%Y%m%d`

##上传的包名
FILENAME=${JOB_NAME}
## 路径
FILEPATH="ggfinance-pre"
## 最终名字
FINALNAME="ggfinance-pre"
## 上传包全名
TARFILE=${FILENAME}.tar.gz

if [ ! -f $TARFILE ]; then
  echo "上传包不存在"
  exit 1
fi

## 删除备份包
rm -rf `ls | grep "${FINALNAME}-20" | grep -v ${FINALNAME}-$currday`

## 创建最新的备份包
gogalwebfile=${cur}/${FINALNAME}-$currday
if [ ! -d $gogalwebfile ]; then
echo "不存在":$gogalwebfile
cp -r ${FINALNAME} ${FINALNAME}-$currday
fi

## 先清除掉文件(不清除就是覆盖文件)
rm -rf ${FILEPATH}/app ${FILEPATH}/precompiled ${FILEPATH}/public ${FILEPATH}/tmp

## 解压缩包
echo "解压缩时的路径"${cur}
tar -xf $FILENAME.tar.gz -C ${FILEPATH}/

## 删除压缩包
rm -rf ${FILENAME}.tar.gz

## 准备启动脚本的路径
cd ${BASEPATH}/${FILEPATH}/
echo "准备启动脚本的路径pwd:"`pwd`

cp /dev/null nohup.out

#pathfilename=$pathfile/${FINALNAME}
#ps aux | grep -w $pathfilename|grep -v grep|awk '{printf $2}'|xargs kill -9
nohup ../play-web.sh

tcwhile.sh脚本

#!/bin/bash
export PATH=/usr/local/play-1.2.7:$PATH

tc=$1
projectName=$2
if [[ "x" != "x$tc" ]] && [[ "$tc" =~ "错误" || "$tc" =~ "error" || "$tc" =~ "Exception" || "$tc" =~ "exception" ]]
then
  echo "=====编译出错====="
  sleep 5s
  echo "睡2秒,再次执行编译"
  count=1
  path=/home/jenkins/workspace
  while [[ "$count" -le 2 ]]; do
    cd $path/$projectName
    echo `pwd`
    tc=`play precompile 2>&1`
    if [[ "$tc" =~ "Done" ]]
    then
            echo "循环次数"$count
            echo "=====编译成功====="
            echo $tc
            exit 0
    fi
    count=$((count+1))
    echo $count
  done
  echo "$tc"
  exit 110
else
  echo "=====编译成功====="
  echo "$tc"
fi

playlib.sh脚本

#!/bin/bash

PLAY_FRAMEWORK=/usr/local/play-1.2.7/framework

PLAY_JAR=$PLAY_FRAMEWORK/play-1.2.7.jar

PLAY_LIB=`find $PLAY_FRAMEWORK/lib/ -name "*.jar" |xargs|sed "s/ /:/g"`

echo $PLAY_JAR:$PLAY_LIB

incompile.sh脚本

#!/bin/bash
echo $1
cd $1
rm -rf `find . -path "*/lib/*"  -name "*.jar"`
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值