Jenkins三大概念:

  • Job:即为任务
  • 插件:maven构建项目、git拉取代码、ssh插件
  • 工作空间:任务的存储空间,即为git代码的存储空间
  1. 开发者在本地开发,然后提交到 Source Respository【比如Gitee】 中,
  2. 触发GitHub或者 GitLab 配置的钩子函数程序,继而通知 Jenkins
  3. Jenkins 收到通知,会通过 Git/SVN 插件,重新从项目配置中的代码仓库中拉取最新代码,放置于 Workspace (Jenkins 存放任务的目录)
  4. 之后重新触发构建任务,Jenkins 有很多的构建的插件,Java常用的 Maven 、Gradle,前端的 Node 等
  5. 如果有安装发送邮件的插件并且进行了配置,那么可以在项目中进行配置,构建失败或者成功都可以选择是否给开发者发送邮件
  6. 构建成功后,会使用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,拿到管理员账户密码之后进行环境配置:

  1. 配置jdk,【jdk可以使用Jenkins容器默认安装的。在容器中使用which java或者echo &JAVA_HOME查找默认安装的java】。Git使用默认的,maven配置一个最新的版本3.9.1
  2. ssh-keygen -t rsa -C "jenkins" 【Jenkins容器和宿主机不一样,不能共享gitee密钥,所以要分别配置gitee的key,注意生成key 的用户是root还是jenkins,要与运行Jenkins的进程用户一样才行。Jenkins服务作为中间服务器使用ssh连接从git拉取数据和连接目标部署服务器,当Jenkins连接目标服务器的ssh server时,运行的命令如同在目标服务器上身临其境一样。】
  3. cat /var/jenkins_home/.ssh/id_rsa.pub
  4. 复制公钥到gitee
  5. 在有用户权限的目录:var/Jenkins_home下测试git clone
  6. 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

  1. 新建任务,源码管理中如果没有git,就去已安装插件查询git,这样就是对的。
  2. ROOT POM可以填这个:jeecg-boot-center/pom.xml,相对于根目录的的相对路径。一个任务的工作空间的容器地址是 /var/jenkins_home/workspace
  3. 构建环境选Add timestamps to the Console Output和with ant(选择配置的jdk)。
  4. 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项目的不同点】

  1. 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文件。

  1. 构建自由风格任务。(若是任务差不多就可以用下面的copy from 已有任务)
  2. 设置构建环境,选择 Provide Node & npm bin/ folder to PATH 然后选择之前安装插件时候配置的node版本
  3. 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 自动化构建、部署、测试过程的更多相关文章

  1. dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器

    # dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器 #环境centos 7.4 docker 18.03.0-ce # nuxus,创建maven本地源(可 ...

  2. Jenkins配置自动化构建

    转自: http://blog.sina.com.cn/s/articlelist_3053349671_14_1.html Jenkins 简介和安装(一) (2014-12-02 21:18:13 ...

  3. 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  4. windows 安装 jenkins 自动化构建部署至linux服务器上

    一.环境准备 1.git安装环境 参考链接 https://www.cnblogs.com/yuarvin/p/12500038.html 2.maven安装环境,包括jdk环境安装 参考链接 htt ...

  5. 使用Jenkins配置自动化构建

    持续集成是个简单重复劳动,人来操作费时费力,使用自动化构建工具完成是最好不过的了. 为了实现这个要求,我选择了Jenkins. 从http://mirrors.jenkins-ci.org/windo ...

  6. 用Jenkins配置自动化构建

     公司培训内容 -------------->记一笔 dubbo 微服务soadiamond-server 配置中心kafka rocketmq消息队列cas-server 单点登录spring ...

  7. jenkins+gitlab自动化编译部署方案探索及服务端编译webpack实战

    一. 背景 之前我们的开发流程为在本地进行webpack打包编译,然后svn提交源代码和编译后的代码.同时每次提交前也会从svn更新源代码和编译后的代码.这样做有几个缺点: 1. svn 更新和提交编 ...

  8. Jenkins安装与构建部署

    Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布 ...

  9. JenKins自动化构建部署流程参考

    Jenkins工作流程 程序员提交代码到Git/SVN仓库,触发钩子程序向 JenKins 进行通知,Jenkins 调用Git/SVN插件获取源码,调用Maven打包为war包,调用Deploy t ...

  10. linux自动化构建工具-scons指南

    1.scons是linux下的自动构建工具 scons是用Python编写的,使用scons之前需确认是否已经安装了Python.(在系统的命令行中运行python -V或python --versi ...

随机推荐

  1. CentOS7环境编译python3.9版本pjsua

    环境:CentOS 7.6_x64 Python版本 :3.9.12 pjsip版本:2.13 一.背景描述 pjsip地址:https://www.pjsip.org/ GitHub地址:https ...

  2. 【技术积累】Python中的Pandas库【三】

    什么是Series Series是一种带有标签的一维数组,可以容纳各种类型的数据(例如整数,浮点数和字符串).每个Series对象都有一个索引,它可以用来引用每个元素.Series对象的主要特征是可以 ...

  3. 深入浅出synchronized的原理与源码

    深入浅出synchronized的原理与源码 1.java对象头关于锁的标识 1.对象头 // 32 bits: // -------- // hash:25 ------------>| ag ...

  4. C++ 核心指南之资源管理(下)—— 智能指针最佳实践

    C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup.Herb Sutter 等顶尖 C+ 专家创建的一份 C++ 指南.规则及最佳实践.旨在帮助大家正确 ...

  5. java BigDecimal解决浮点数的精度丢失和大数计算问题

    java BigDecimal解决浮点数的精度丢失和大数计算问题 抛出浮点数问题: 先考个题,输入什么? System.out.println(0.1 + 0.2); 答案:0.30000000000 ...

  6. 一键搞定发布自己Jar到Maven中央仓库

    做java 开发那当然离不开jar包管理, 不知何时一直想想封装一个自己的jar包 然后发布到maven中央仓库给别人使用. hhh 我感觉自己写一个jar包工具然后,被很多人使用是一件很牛,很快乐事 ...

  7. 用 Vue.js 实现一个 JSON Viewer

    演示地址: http://json.imlht.com/vue-json-viewer-demo.html 常用的 JSON 格式化工具 JSON 是一种轻量级的数据交换格式, 相信大家用得比较多, ...

  8. redis 中的 list

    lpush K1 V1 V2 V3   左边加入list rpush k1 v1 v2 v3 右边加入list lpop k1 左边吐出一个值 rpop k1 右边吐出一个值 lrange k1 0 ...

  9. P1880 [NOI1995] 石子合并 题解

    区间DP. 首先将其复制一遍(因为是环),也就是经典的破环成链. 设 \(f[i][j]\) 表示将 \(i\) 到 \(j\) 段的石子合并需要的次数. 有 \[f[i][j] = 0(i = j) ...

  10. Android OAID 获取 基于MSA oaid_sdk_1.0.25.zip

    目录 简介 SDK下载 支持版本 开始使用 可能遇到的问题 替代方案 APK下载 写在最后 简介 本文链接:https://www.cnblogs.com/dks-/p/14357041.html 根 ...