1.docker安装Jenkins
- 拉取镜像
docker pull jenkins/jenkins:2.222.3-centos
- 创建本地数据卷,修改目录权限
mkdir -p /data/jenkins_home/ #可自定义目录
chown -R 1000:1000 /data/jenkins_home/ #修改权限,容器中jenkins用户的uid为1000
- 创建docker-compose.yml
version: '3'
services:
jenkins:
container_name: jenkins
image: jenkins/jenkins:2.222.3-centos
restart: always
ports:
- "8040:8080"
- "50000:50000"
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
- '/usr/bin/docker:/usr/bin/docker'
- '/data/jenkins_home:/var/jenkins_home'
- '/usr/local/maven3:/usr/local/maven3' #挂载自己的maven
- '/usr/local/jdk1.8.0_11:/usr/local/jdk1.8.0_11' #挂载自己的jdk
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS=-Duser.timezone=Asia/Shanghai
- 启动Jenkins
# 启动
docker-compose up -d
# 停止
docker-compose stop
# 界面重启
http://192.168.35.21:8040/restart
# 重新加载配置信息
http://192.168.35.21:8040/reload
2.配置Jenkins
- 打开Jenkins,地址+端口:http://192.168.35.21:8040
- 解锁Jenkins(首次安装)
将本地密码粘贴到空白框
密码可通过如下两种命令获取
# 第一种进容器获取
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
# 第二种 挂载目录获取
cat /data/jenkins_home/secrets/initialAdminPassword
- 安装插件
安装推荐插件即可,完成后应该是绿色的 - 创建管理员
自己看着创建admin/admin - 实例配置
注意IP地址和端口就行了 - 配置完成搞定
3.部署Spring Boot应用
- 准备环境和项目
- centos7
- jdk1.8
- git
- maven
- github
- 全局工具配置
打开系统管理 -> 全局工具配置
分别配置JDK,Git,Maven的路径,根据你的实际路径来填写保存
- 安装插件
需要再手动安装 Maven Integration 和 Publish Over SSH 这两个插件
打开 系统管理 -> 插件管理,
选择 可选插件,
勾选中 Maven Integration 和 Publish Over SSH,
点击 直接安装
在安装界面勾选上安装完成后重启 Jenkins - 添加SSH Server
SSH Server 是用来连接部署服务器的,用于在项目构建完成后将你的应用推送到服务器中并执行相应的脚本。
打开 系统管理 -> 系统配置,找到 Publish Over SSH 部分,选择新增
勾选上图选项,可配置用户名和密码来连接或者key连接
配置完成后可点击 Test Configuration 测试连接,出现 succes 连接成功 - 服务器的准备工作
- 创建脚本jenkins-in/deploy.sh
export JAVA_HOME=/usr/local/jdk1.8.0_11
export JRE_HOME=/usr/local/jdk1.8.0_11/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
DATE=$(date +%Y%m%d%H%M)
JENKINS_IN=/root/jenkins-in
DIR=/data/workspace/test
JARFILE=你的jar包名.jar
if [ ! -e $JENKINS_IN/$JARFILE ]; then
exit 2
fi
if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR
# 如果程序已经在运行,就杀掉进程
pid=`ps -ef | grep $JARFILE | grep -v "grep" | awk '{print $2}'`
if [ "$pid" != "" ]; then
echo "App is running and pid = $pid, will kill it"
kill -9 $pid
fi
# 备份旧的应用
mv $JARFILE backup/$JARFILE.$DATE
# 将新的应用移动到工作目录
mv -f $JENKINS_IN/$JARFILE .
# 运行新的应用
nohup java -jar $DIR/$JARFILE > out.log 2>&1 &
# 等待一段时间,然后输出log,检查是否启动成功
if [ $? = 0 ];then
sleep 30
tail -n 50 out.log
fi
# 只保留最新的5个备份
cd backup/
ls -lt | awk 'NR>5{print $NF}' | xargs rm -f
4.新建 Maven 任务
1.创建
新建任务 -> 构建一个maven项目
2.源码管理
public:选择Git,直接填写仓库地址
private: 需要配置凭据,用户名/密码或者ssh
我这里环境是docker启动的,所以需要进入容器生成密匙
docker exec -it faa8766a10ea bash
cd ~/.ssh
ssh-keygen
一直回车就行了
cat id_rsa.pub #把这个公钥配在github的ssh key上
cat id_rsa #把这个私钥配在Jenkins凭据上,选择SSH Username with private key
3.构建环境
勾选 Add timestamps to the Console Output,代码构建的过程中会将日志打印出来
4.Build
5.Post Steps
选择Run only if build succeeds,添加 Post 步骤,选择 Send files or execute commands over SSH
name 选择前面添加的 SSH Server,
Source files 要推送的文件,
Remove prefix 文件路径中要去掉的前缀,
Remote directory 要推送到目标服务器上的哪个目录下,
Exec command 目标服务器上要执行的脚本
6.构建任务
点击 立即构建 可以开始构建任务,控制台可以看到log输出,如果构建失败,在log中会输出原因
入坑集合
- 构建时报错ERROR: for jenkins Cannot start service jenkins: driver failed programming external connectivity on endpoint jenkins
- docker 服务启动的时候,docker服务会向iptables注册一个链,以便让docker服务管理的containner所暴露的端口之间进行通信
命令iptables -L可以查看iptables 链
如果你删除了iptables中的docker链,或者iptables的规则被丢失了(例如重启firewalld),docker就会报如上错误
只需要重启docker服务即可(我是关闭了firewalld没有重启docker)
- 构建时提示git 命令执行失败
- 注意全局系统配置时的git要和你安装的git路径匹配
- 查看路径