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. 代码随想录算法训练营Day14 二叉树

    代码随想录算法训练营 代码随想录算法训练营Day14 二叉树|理论基础 递归遍历 基础知识 二叉树都是通过栈来实现的. 二叉树的种类 在我们解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树. 满 ...

  2. Flutter调优--深入探究MediaQuery引起界面Rebuild的原因及解决办法

    前言 我们可以通过MediaQuery.of(context)方法获取到一些设备和系统的相关信息,比如状态栏的高度.当前是否是黑暗模式等等,使用起来相当方便,但是也要注意可能引起的页面rebuild问 ...

  3. windows10环境下安装RabbitMQ以及延时插件(图文)

    安装转载:https://www.cnblogs.com/saryli/p/9729591.html 插件转载:https://blog.csdn.net/nbdclw/article/details ...

  4. 800名科学家Nature联名发文主张废除p值!

    每年,全球有数百万学生修读统计学课程.随着世界上的数据量越来越大,统计学已成为越来越受欢迎的话题.如果大多数学生都从这门课中记住一点,那可能就是"统计显著性"和"p 值& ...

  5. vue2中v-if 或者 v-show 使用数组中的值判断不生效

    知识点来源:博客园==> 外号蓝大胖// 对象this.$set(obj, key, value)/vue.set(obj, key, value)// 数组this.$set(arr, ind ...

  6. 曲线艺术编程 coding curves 第十一章 玫瑰花形( ROSES)

    第十一章 玫瑰花形 ROSES 原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldo ...

  7. celery笔记五之消息队列的介绍

    本文首发于公众号:Hunter后端 原文链接:celery笔记五之消息队列的介绍 前面我们介绍过 task 的处理方式,将 task 发送到队列 queue,然后 worker 从 queue 中一个 ...

  8. 【原创】xenomai内核解析-xenomai实时线程创建流程

    版权声明:本文为本文为博主原创文章,未经同意,禁止转载.如有错误,欢迎指正,博客地址:https://www.cnblogs.com/wsg1100/ 目录 问题概述 1 libCobalt中调用非实 ...

  9. ##Can not deserialize instance of java.lang.String out of START_OBJECT token

    请求中定义了一个String字段,该字段主要是一个JSON Object字符串,对应的Java PO的相关字段类型是String. 但是测试的时候传的参数是JSON对象,例如{"aa&quo ...

  10. BUUCTF-MISC-面具下的flag(vmdk的解压和Brainfuck与Ook解密)

    准备工作 下载附件得到一个一张图片 丢入winhex,发现还有一个flag.vmdk文件 vmdk文件其实是虚拟机使用的硬盘文件 打开kali binwalk -e mianju.jpg 关键步骤 这 ...