一、下载配置Jenkins
1.拉取镜像
docker pull jenkins/jenkins
2.启动
docker run -d -p 8888:8080 -p 50000:50000 \
-v /home/jenkins:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
--name jenkins docker.io/jenkins/jenkins
3.如无意外会启动失败, 原因是Jenkins镜像内部使用的用户是jenkons,执行如下命令
* groupadd -g 1000 jenkinsUsers
* useradd -u 1000 -g 1000 -d /users/jenkins/jenkinsAdmin -m jenkinsAdmin
* passwd jenkinsAdmin
* chown -R 1000:1000 /home/jenkins
4.重启容器
5.登录jenkins,安装默认插件
6. jenkins全局配置:
jdk 使用默认,路径为/usr/local/openjdk-8
maven:自动安装,按需指定配置文件,配置私有仓库
git,自动安装
7. 安装Publish Over SSH,用于推送文件到指定服务器
name-随意起
Hostname-服务器Ip
Username-服务器用户名
Remote Directory-存储文件根路径
Password-登录密码
Port-sshd连接接口
二、新建任务
1.新建任务
2.配置
1)源码管理-git或gitlab,云效和码云同样可以,一般选用sshkey关联。
2)构建触发器
定时构建- 周期进行项目构建(它不关心源码是否发生变化)
轮询SCM- 定时检查源码变更,变更后构建
3)构建环境-勾选 Add timestamps to the Console Output,日志输入时间
4)构建-使用maven构建,构建脚本
clean package -Dmaven.test.skip=true -Dautoconfig.skip
可配置指定maven配置文件,配置私有仓库等。
5)构建后操作-构建jar包后配置远程主机
Source files-待传文件,相对路径,相对工作空间
Remove prefix-文件前缀
Remote directory-远程主机接收文件的路径,基于根目录
Exec command-发送到远程主机的脚本
附上本人项目的脚本,可参考阿里巴巴云效的执行脚本
#!/bin/bash
PROG_NAME=$0
ACTION=$1
ONLINE_OFFLINE_WAIT_TIME=10 # 实例上下线的等待时间
APP_START_TIMEOUT=60 # 等待应用启动的时间
APP_PORT=8083 # 应用端口
JAVA_HOME=/home/jdk1.8.0_241/bin/java
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}/health # 应用健康检查URL
OFF_LINE_URL=http://127.0.0.1:${APP_PORT}/health # 应用健康检查URL
ON_LINE_URL=http://127.0.0.1:${APP_PORT}/health # 应用健康检查URL
APP_HOME=/home/ali-demo # 从package.tgz中解压出来的jar包放到这个目录下
JAR_NAME=ali-demo-1.0.0.jar # jar包的名字
TAR_NAME=ali-demo-1.0.0.tar # tar压缩包的名字
BAK_NAME=ali-demo-1.0.0.jar # tar压缩包的名字
APP_LOG=${APP_HOME}/logs/app.log # 应用的日志文件
PID_FILE=${APP_HOME}/pid # 应用的pid会保存到这个文件中
# 创建出相关目录
mkdir -p ${APP_HOME}/logs
usage() {
echo "Usage: $PROG_NAME {start|stop|online|offline|restart|deploy}"
exit 2
}
online() {
# 挂回SLB
/usr/bin/curl ${ON_LINE_URL}
echo "wait app online in ${ONLINE_OFFLINE_WAIT_TIME} seconds..."
sleep ${ONLINE_OFFLINE_WAIT_TIME}
}
offline() {
# 摘除SLB
/usr/bin/curl ${OFF_LINE_URL}
echo "wait app offline in ${ONLINE_OFFLINE_WAIT_TIME} seconds..."
sleep ${ONLINE_OFFLINE_WAIT_TIME}
}
health_check() {
exptime=0
echo "checking ${HEALTH_CHECK_URL}"
while true
do
status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL}`
if [ x$status_code != x200 ];then
sleep 1
((exptime++))
echo -n -e "\rWait app to pass health check: $exptime..."
else
break
fi
if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
echo
echo 'app start failed'
exit 1
fi
done
echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
echo "start jar"
source /etc/profile;
if [ -f "$PID_FILE" ] && kill -0 "$(cat ${PID_FILE})"; then
echo "Application is running, exit"
exit 0
fi
${JAVA_HOME} -jar ${APP_HOME}/${JAR_NAME} > ${APP_LOG} 2>&1 &
echo $! > ${PID_FILE}
}
back_application(){
echo "backing jar"
echo "${APP_HOME}/${JAR_NAME}"
if [ [ -f "${APP_HOME}/${JAR_NAME}" ]; then
# rm ${APP_HOME}/${BAK_NAME}
echo "backing......"
cp ${APP_HOME}/${JAR_NAME} ${APP_HOME}/$(date "+%Y-%m-%d %H:%M:%S")-${BAK_NAME}
fi
\
\
}
stop_application() {
echo "stop jar"
if [ -f "$PID_FILE" ]; then
kill -9 `cat $PID_FILE`
rm $PID_FILE
else
echo "pid file $PID_FILE does not exist, do noting"
fi
}
start() {
start_application
health_check
online
}
back(){
back_application
}
stop() {
offline
stop_application
}
case "$ACTION" in
start)
start
;;
stop)
stop
;;
online)
online
;;
offline)
offline
;;
restart)
stop
start
;;
deploy)
stop
back
start
;;
*)
usage
;;
esac
附加:
个人开源项目【持续更新】:github.com/DMCHRL/micr…
- 基于Spring Cloud Alibaba、Nacos、Spring Boot、 OAuth2 的 RBAC 微服务后端轮子