1.安装docker
1.1:下载docker
yum -y install docker
1.2:启动docker
systemctl start docker
2.安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2.1:dokcer-compose集成基础项目环境
version: '3'
services:
jenkins:
image: 'jenkins/jenkins'
container_name: jenkins
restart: always
environment:
- TZ=Asia/Shanghai
ports:
- '9998:8080'
- '50000:50000'
volumes:
- '/etc/localtime:/etc/localtime'
- '/home/data/jenkins:/var/jenkins_home'
mysql:
environment:
MYSQL_ROOT_PASSWORD: "a123456"
image: mysql
command: mysqld --default-authentication-plugin=mysql_native_password
container_name: mysql
restart: always
ports:
- "3306:3306"
redis:
image: redis
container_name: redis
command: redis-server --appendonly yes --requirepass "a123456"
ports:
- "6379:6379"
minio:
image: minio/minio
container_name: minio
restart: always
ports:
- 9000:9000
command: server /data #指定容器中的目录 /data
environment:
MINIO_ACCESS_KEY: minioadmin #管理后台用户名
MINIO_SECRET_KEY: minioadmin #管理后台密码,最小8个字符
volumes:
- ./data:/data #映射当前目录下的data目录至容器内/data目录
- ./config:/radar/.minio/ #映射配置目录
2.2:jenkins映射文件夹添加权限
chown -R 1000 /home/data/jenkins
2.3:启动docker-compose
docker-compose up -d
3.Jenkins相关配置
3.1:启动jenkins,访问web页面,IP+端口(docker-compose中指定的映射端口,云服务器需配置安全组)
127.0.0.1:9998
3.2:首次访问需jenkins默认密码,打开jenkins容器日志查看
docker logs -f --tail=100 jenkins
3.3:进入后选择推荐插件(首次会较慢,需等待),创建管理用户
3.4:修改中文显示
3.4.1:下载中文插件 Manage Jenkins->Manage Plugins->可选插件
3.4.2:修改配置 Manage Jenkins->Configure System
3.4.3:重启jenkins
http://ip+port/restart
3.5:全局工具配置
配置node时需要先下载NodeJS插件
3.6:新建项目
新建一个maven项目时需提前下载 Maven Integration 插件
3.6.1:git仓库配置
进入jenkins容器,创建ssh key,并将生成的id_rsa.pub内容上传到git
3.6.2:jenkins凭据添加
3.6.3:ssh连接配置 系统管理->系统配置
下载ssh plugin、Publish over SSH插件
3.6.4:钉钉消息推送
下载dingtalk插件
3.6.4.1:进入钉钉群,打开群设置,智能群助手,添加机器人
3.6.4.2:配置钉钉消息推送,系统管理->系统配置->钉钉->高级
3.6.5:项目配置
shell脚本命令放在文章结尾处
3.6.6:开始构建
3.7:构建vue项目
3.7.1:新建一个自由风格的项目进行配置
shell脚本
#=====================================================================================
#=================================定义初始化变量======================================
#=====================================================================================
#!/bin/bash
#操作/项目路径(Dockerfile存放的路径)
BASE_PATH=/usr/local/docker/pjkj-2c
# jenkins构建好的源jar路径,jenkins的workspace下,jenkins服务内地址为:/var/jenkins_home/workspace
#因为docker启动的jenkins,目录进行了宿主机的目录挂载,则使用宿主机目录: /root/jenkins/workspace
#完整地址应为:/root/jenkins/workspace/项目名称/target/ 后面会进行拼接
SOURCE_PATH=/usr/local/jenkins/workspace/pjkj-2c/target/
#【docker 镜像】【docker容器】【Dockerfile同目录下的jar名字[用它build生成image的jar]】【jenkins的workspace下的项目名称】
SERVER_NAME=data-server-api
#容器id [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID] [无论容器启动与否,都获取到]
CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')
#镜像id [grep -w 全量匹配镜像名] [awk 获取信息行的第三列,即镜像ID]
IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')
#源jar完整地址 [jenkins构建成功后,会在自己的workspace/项目/target 下生成maven构建成功的jar包,获取jar包名的完整路径]
#例如:/usr/local/jenkins/workspace/swapping/target/SERVER_NAME.jar
SOURCE_JAR_PATH=$(find "$SOURCE_PATH" -name "*$SERVER_NAME*.jar" )
DATE=`date +%Y%m%d%H%M%S`
#=====================================================================================
#============================对原本已存在的jar进行备份================================
#=====================================================================================
# 备份
function backup(){
if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
echo "=========================>>>>>>>$SERVER_NAME.jar 备份..."
mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
echo "=========================>>>>>>>备份老的 $SERVER_NAME.jar 完成"
else
echo "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
fi
}
#=====================================================================================
#=========================移动最新源jar包到Dockerfile所在目录=========================
#=====================================================================================
# 查找源jar文件名,进行重命名,最后将源文件移动到Dockerfile文件所在目录
function transfer(){
echo "=========================>>>>>>>源文件完整地址为 $SOURCE_JAR_PATH"
echo "=========================>>>>>>>重命名源文件"
mv $SOURCE_JAR_PATH $SOURCE_PATH$SERVER_NAME.jar
echo "=========================>>>>>>>最新构建代码 $SOURCE_PATH$SERVER_NAME.jar 迁移至 $BASE_PATH"
cp $SOURCE_PATH$SERVER_NAME.jar $BASE_PATH
echo "=========================>>>>>>>迁移完成Success"
}
#=====================================================================================
#==================================构建最新镜像=======================================
#=====================================================================================
# 构建docker镜像
function build(){
#无论镜像存在与否,都停止原容器服务,并移除原容器服务
echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"
docker stop $CID
echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
docker rm $CID
#无论如何,都去构建新的镜像
#构建新的镜像之前,移除旧的镜像
if [ -n "$IID" ]; then
echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID"
echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID"
docker rmi $IID
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->"
cd $BASE_PATH
docker build -t $SERVER_NAME .
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->"
else
echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->"
cd $BASE_PATH
docker build -t $SERVER_NAME .
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->"
fi
}
#=====================================================================================
#==============================运行docker容器,启动服务===============================
#=====================================================================================
# 运行docker容器
# 先备份老的jar包
# 再移动新的jar包到Dockerfile文件所在目录
# 接着,构建新的镜像
# 最后运行最新容器,启动服务
function run(){
backup
transfer
build
docker run --name $SERVER_NAME -itd --net=host -v /etc/localtime:/etc/localtime:ro -v /usr/local:/usr/local $SERVER_NAME
}
#入口
run