最近进行了一次开发测试环境迁移 , 顺带连着之前的 Jenkins 也进行了迁移 , 因为对之前的搭建过程没有记录 , 导致这次的迁移过程中遇到了不少阻力 . 现记录主要流程于此 , 方便之后搭建 .
首先我们需要安装 Jenkins , 需要装卸方便 , 因此我们选择用 Docker 或 docker-compose 直接安装
docker run --name devops-jenkins --user=root -p 8080:8080 -p 50000:50000 -v /mnt/data/jenkins/jenkins_home:/var/jenkins_home -d jenkins/jenkins:lts
version: '3' services: jenkins: image: jenkins/jenkins:lts container_name: jenkins user: root ports: - "8080:8080" volumes: - /etc/localtime:/etc/localtime:ro - $PWD/jenkins_home:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker - /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 - /mnt/data/docker:/data/docker environment: - TZ=Asia/Shanghai
启动后初始化及安装推荐插件
可以通过容器日志查询初始密码
docker logs xxx(容器ID)
可能部分插件超时安装失败 , 我们需要去网站上下载 hpi
插件文件 , 手动上传安装
本文用到一些重要的插件列举如下:
点击系统管理 -> Global Tool Configuration 找到 JDK 点击新增按钮进行安装 , 此处需要 Oracle 账号请自行注册
然后找到 Maven 点击新增按钮 , 此处我们使用 3.2.5
视具体情况进行替换 , 笔者是因为选择其他版本编译项目会报错 .
点击系统管理 -> 系统设置 配置 SSH (前端nginx服务器)
选择系统管理 -> Configuration Global Security 启用安全: TCP port for JNLP agents ->禁用,访问控制-安全域->jenkins专有用户数据库 , 访问控制-授权策略->Role-Based Strategy 如:
选择系统管理 Manage and Assign Roles -> Manage Roles
此处针对项目配置权限 , 以项目名正则匹配 . 这里提供几个例子
^((?!other).)*$
项目名中不带 other
的均符合
[/w/W]*frontend[/w/W]
项目名中间有 frontend
的均符合
[/w/W]*
任意项目名均符合
这里针对 前端 Vue 项目进行构建 . 前端开发人员会本地进行打包 , 得到一个 dist.zip
压缩包 , 此时需要上传到 nginx 服务器上 , 自动解压 . 当然有更好的做法 , 直接在服务器上拉取代码 , 编译 , 部署 , 此处我们只讲解打包后通过 Jenkins 上传的流程 .
# 视具体情况进行替换 cd /mnt/data/frontend/$MODULE sudo rm -rf latest.zip sudo rm -rf dist unzip pack.zip mv pack.zip latest.zip
后端是使用 Java Spring Cloud 项目. 开发者在 Jenkins 指定对应环境、参数然后就会开始构建 , 过程大致为
选择参数构建 -> Jenkins 从 Git 上拉取代码 -> Maven构建 -> Docker构建镜像 -> 推送到私有镜像仓库 -> 通知 Rancher 集群更新服务 -> 通知协作工具 / 邮件通知
首先确定构建参数
Execute Shell
docker login --username=仓库USERNAME --password=仓库PASSWORD $DOCKER_REGISTRY cp $WORKSPACE/$MODULE_NAME/target/*.jar $WORKSPACE/$MODULE_NAME/app.jar cd $WORKSPACE/$MODULE_NAME docker build -f Dockerfile-$ENV -t $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$MODULE_NAME:latest . docker build -f Dockerfile-$ENV -t $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$MODULE_NAME:$DOCKER_TAG . docker push $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$MODULE_NAME:latest docker push $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$MODULE_NAME:$DOCKER_TAG docker rmi $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$MODULE_NAME:latest if [ ${DOCKER_TAG} != "latest" ]; then docker rmi $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$MODULE_NAME:$DOCKER_TAG fi
然后再通过构建后操作使用 Http Request
插件调用接口升级 Rancher 服务 , 具体参考 Rancher通过API升级服务
文章 .
在实际应用中发现 , 此方法升级会覆盖之前的服务主机调度 , 因此对于多机器集群 , 不大适用