git + docker + docker-compose + Jenkins+Linux 自动化构建、部署、测试过程
Jenkins三大概念:
- Job:即为任务
- 插件:maven构建项目、git拉取代码、ssh插件
- 工作空间:任务的存储空间,即为git代码的存储空间
- 开发者在本地开发,然后提交到 Source Respository【比如Gitee】 中,
- 触发GitHub或者 GitLab 配置的钩子函数程序,继而通知 Jenkins
- Jenkins 收到通知,会通过 Git/SVN 插件,重新从项目配置中的代码仓库中拉取最新代码,放置于 Workspace (Jenkins 存放任务的目录)
- 之后重新触发构建任务,Jenkins 有很多的构建的插件,Java常用的 Maven 、Gradle,前端的 Node 等
- 如果有安装发送邮件的插件并且进行了配置,那么可以在项目中进行配置,构建失败或者成功都可以选择是否给开发者发送邮件
- 构建成功后,会使用ssh插件登录目标部署服务器的ssh server,一般是将jar包复制到目标服务器上,文件传输完毕之后执行shell命令,此时的命令执行初始位置在服务器上的登录用户目录下。
---docker run -d -p 8080:8080 -v /jenkins/jenkins_data:/var/jenkins_home -e TZ=Asia/Shanghai jenkins/jenkins:lts
---启动Jenkins容器,挂载Jenkins目录,映射宿主机端口和Jenkins容器端口为8080,设置时区。
---访问宿主机IP:8080,拿到管理员账户密码之后进行环境配置:
- 配置jdk,【jdk可以使用Jenkins容器默认安装的。在容器中使用which java或者echo &JAVA_HOME查找默认安装的java】。Git使用默认的,maven配置一个最新的版本3.9.1
- ssh-keygen -t rsa -C "jenkins" 【Jenkins容器和宿主机不一样,不能共享gitee密钥,所以要分别配置gitee的key,注意生成key 的用户是root还是jenkins,要与运行Jenkins的进程用户一样才行。Jenkins服务作为中间服务器使用ssh连接从git拉取数据和连接目标部署服务器,当Jenkins连接目标服务器的ssh server时,运行的命令如同在目标服务器上身临其境一样。】
- cat /var/jenkins_home/.ssh/id_rsa.pub
- 复制公钥到gitee
- 在有用户权限的目录:var/Jenkins_home下测试git clone
- git clone https://toscode.gitee.com/chenshobo/book.git
Username for 'https://toscode.gitee.com': chenshobo
Password for 'https://chenshobo@toscode.gitee.com':xxxxxxx
7.在Available plugins中安装maven integretion,安装后重启。
8.安装ssh,publish over ssh,nodejs,yarn
9.添加creaditial凭据,添加目标服务器的用户密码和gitee用户名密码
10. 3.3系统配置参考 其中ssh server 的remote directory可以是目标服务器的任意路径。当Jenkins服务使用ssh连接到目标服务器时,会在此路径下创建‘构建任务’中remote directory 中的文件夹,所以在目标服务器上传输的文件路径就是系统配置中的sshserver的路径+构建任务中的路径+传输的文件名称。但是注意下面的Exec command中的命令是在/~目录中执行。【注意 其实在这里输入的命令,就是在服务器上的命令,我们所处于的位置就是当前登录用户的根目录下就是root用户就是/~目录。】【不发送文件只ssh远程服务器执行命令就选另一个选项Execute shell script on remote host using ssh】
下图是post steps
- 新建任务,源码管理中如果没有git,就去已安装插件查询git,这样就是对的。
- ROOT POM可以填这个:jeecg-boot-center/pom.xml,相对于根目录的的相对路径。一个任务的工作空间的容器地址是 /var/jenkins_home/workspace
- 构建环境选Add timestamps to the Console Output和with ant(选择配置的jdk)。
- Build:ROOT POM可以填这个:jeecg-boot-center/pom.xml,相对于根目录的的相对路径。项目情况是:https://toscode.gitee.com/chenshobo/traffic-project.git。一个任务的工作空间的容器地址是 /var/jenkins_home/workspace
第一种方式: 39.105.133.99:8080/job/jeecg-boot-center/build?token=kongzhi
任务选项如此选择的时候,访问以上路径即可触发构建。其中IP+端口是Jenkins_URL,可在浏览器前端界面的全局配置中查到。
第二种方式就是gitee的钩子函数。
踩坑:Generic Webhook Trigger插件,此插件不知道原因没用,也许是因为插件说明文档本就没有明确支持gitee。注意点:如果有多个任务时,发送这样一个请求会触发所有任务的构建,所以必须要指定token来指定触发指定的job进行构建。
使用Gitee plugin 1.2.7有用。与gitee项目的webhook的默认一样就行哈哈哈。
下图全是默认的
分支指定还是有用的。密码点击“生成即可“:
ssh之后需要执行的命令:
Exec command:
- cd /csb_docker
- docker rm -f jeecg-boot-system
- docker rmi jeecg-boot-system
- docker build -t jeecg-boot-system /jenkins/jenkins_data/workspace/jeecg-boot-center/jeecg-module-system/jeecg-system-start/
- docker-compose up -d jeecg-boot-system
Vue项目的构建【主要写与maven项目的不同点】
- node的安装:系统管理 -》全局工具配置:选择版本号,自动安装即可。使用Jenkins前端任务配置自动安装node,会下载node软件文件夹,但是不会配置环境变量,所以我们要自己配置环境变量。Node_home目录下都是CHANGELOG.md LICENSE README.md bin include lib share。然后执行
- npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
- npm install --registry=https://registry.npm.taobao.org
- npm install -g yarn
(194条消息) npm,yarn使用以及更换国内镜像源_yarn 国内源_Raliam的博客-CSDN博客
Yarn根据yarn.lock文件中的地址来下载包,如果一直显示国外源连不上而无法切换国内源就把此文件删除,可以使用设置的新的源自动重新生成yarn.lock文件。
- 构建自由风格任务。(若是任务差不多就可以用下面的copy from 已有任务)
- 设置构建环境,选择 Provide Node & npm bin/ folder to PATH 然后选择之前安装插件时候配置的node版本
- Build Steps选择Excute shell (打包后的前端文件可以打包传输到目标服务器上,然后再解压,不过此处我不需要打包因为我的宿主机就是我的目标服务器)【在此处执行的命令就是在Jenkins的docker容器中执行的命令】,再增加一个命令脚本(只在ssh远程服务器上执行命令不发送文件Execute shell script on remote host using ssh)
Build Steps的配置:
第一个脚本,执行 shell,运行在Jenkins容器中的命令:
- export NODE_OPTIONS=--openssl-legacy-provider
- cd /var/jenkins_home/workspace/ant-design-vue-jeecg-center
- yarn install
- yarn run build
第二个脚本,Execute shell script on remote host using ssh,运行在部署目标服务器上:
docker rm -f jeecg-boot-nginx
docker rmi jeecg-boot-nginx
docker build -t jeecg-boot-nginx /jenkins/jenkins_data/workspace/ant-design-vue-jeecg-center
cd /csb_docker
docker-compose up -d jeecg-boot-nginx
在Jenkins使用中遇到的问题
1、误删了Jenkins容器,但是保留了挂载出来的Jenkins目录,如何恢复Jenkins容器?
1)、 先把旧挂载目录改个名字,确保使用docker run生成容器的时候挂载同样的目录,旧目录不会被新目录直接覆盖。使用docker run指令重新生成一个容器,修改挂载目录的权限确保挂载成功新目录。使用docker logs Jenkins容器id查找初始密码,进入Jenkins浏览器界面,安装插件,生成管理员账户,管理员账户要与之前的一模一样确保恢复成功。然后正常进入Jenkins浏览器界面
2)、 在宿主机中,先stop新Jenkins容器,把旧挂载目录中的内容复制或者移动到新挂载目录,覆盖新挂载目录的所有内容,mv /旧目录名称/ /新目录名称/ 这样移动可以将文件夹中的隐藏文件夹一同复制。然后启动Jenkins容器并打开Jenkins发现成功,构建也可以成功。完美!!!
git + docker + docker-compose + Jenkins+Linux 自动化构建、部署、测试过程的更多相关文章
- dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器
# dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器 #环境centos 7.4 docker 18.03.0-ce # nuxus,创建maven本地源(可 ...
- Jenkins配置自动化构建
转自: http://blog.sina.com.cn/s/articlelist_3053349671_14_1.html Jenkins 简介和安装(一) (2014-12-02 21:18:13 ...
- 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)
本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...
- windows 安装 jenkins 自动化构建部署至linux服务器上
一.环境准备 1.git安装环境 参考链接 https://www.cnblogs.com/yuarvin/p/12500038.html 2.maven安装环境,包括jdk环境安装 参考链接 htt ...
- 使用Jenkins配置自动化构建
持续集成是个简单重复劳动,人来操作费时费力,使用自动化构建工具完成是最好不过的了. 为了实现这个要求,我选择了Jenkins. 从http://mirrors.jenkins-ci.org/windo ...
- 用Jenkins配置自动化构建
公司培训内容 -------------->记一笔 dubbo 微服务soadiamond-server 配置中心kafka rocketmq消息队列cas-server 单点登录spring ...
- jenkins+gitlab自动化编译部署方案探索及服务端编译webpack实战
一. 背景 之前我们的开发流程为在本地进行webpack打包编译,然后svn提交源代码和编译后的代码.同时每次提交前也会从svn更新源代码和编译后的代码.这样做有几个缺点: 1. svn 更新和提交编 ...
- Jenkins安装与构建部署
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布 ...
- JenKins自动化构建部署流程参考
Jenkins工作流程 程序员提交代码到Git/SVN仓库,触发钩子程序向 JenKins 进行通知,Jenkins 调用Git/SVN插件获取源码,调用Maven打包为war包,调用Deploy t ...
- linux自动化构建工具-scons指南
1.scons是linux下的自动构建工具 scons是用Python编写的,使用scons之前需确认是否已经安装了Python.(在系统的命令行中运行python -V或python --versi ...
随机推荐
- RoCE多网卡时,报文可以过去,但是回不来
摘要:虽然网卡是接入RoCE网络,但其实问题本身是单纯路由相关的,所以看的时候,不用关注RoCE,只当做一个独立子网就行了 本文分享自华为云社区<<跟唐老师学习云网络> - RoCE ...
- 使用 coding.net 发布你的个人博客
微信文章不允许外链,本文章的静态示例站点,可在文章左下角 "阅读原文" 进行预览. 很多人喜欢在 github pages / gitee pages 发布自己的个人博客,前者由于 ...
- R 绘制 GWAS 研究的 Manhattan 图
曼哈顿图本质上是一个散点图,用于显示大量非零大范围波动数值,最早应用于全基因组关联分析(GWAS)研究展示高度相关位点.它得名源于样式与曼哈顿天际线相似(如下图). 近几年,在宏基因组领域,尤其是差异 ...
- C2简介
C2简介 学习命令与控制的基本知识,帮助您成为更好的红队队员并简化您的下一次红队评估! thm:https://tryhackme.com/room/introtoc2 介绍 命令与控制 ( C2 ) ...
- 公路堵车概率模型Python(Nagel-Schreckenberg交通流模型)
路面上有N辆车,以不同速度向前行驶,模拟堵车问题.有以下假设: 假设某辆车的当前速度是 v 如果 前方可见范围内没车,下一秒车速提高到 v+1 如果 前方有车,前车的距离为 d ,且 d < v ...
- Python进行大文件的备份
Python进行大文件的备份的思路:每次仅从原文件中读取指定字符的内容后写入新文件,然后循环操作. def copy_big_file(): # 接收用户输入的文件名 old_file = input ...
- 整理spring-web里支持的文件以及对应的Content-Type
前言 最近在弄文件上传.下载.在线预览时经常需要设置请求标头或者响应标头的Content-Type 属性.所以研究了一下spring支持哪些Content-Type,通过研究MediaTypeFact ...
- 在线免费chatgpt网页版-支持gpt4
为了吸引更多的用户体验最先进的自然语言处理技术,我们推出了在线免费ChatGPT.这是一个基于OpenAI训练的大型语言模型,它可以提供智能响应.自然对话和语音识别等功能.不仅如此,我们还提供了完全免 ...
- Uniapp下GoEasy通知栏推送不工作问题排查记录
我们是uniapp开发的app,项目中的系统消息推送使用的是GoEasy Websocket 实时推送,上线一段时间后,客户反馈说,当app没有在前台运行时也需要想办法通知用户一些重要的系统通知.那么 ...
- 自然语言处理 Paddle NLP - 预训练模型产业实践课-理论
模型压缩:理论基础 模型压缩基本方法分为三类: 量化 裁剪 蒸馏 量化 裁剪 绿线:随机裁剪 30% 已经扛不住了 蓝线:60% 还不错 蒸馏 蒸馏任务与原来的学习任务同时进行. 对于没有标注的数据, ...