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用户名密码
- 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生成Jenkins容器的时候旧目录不会被新目录直接覆盖。使用docker run指令重新生成一个容器,修改挂载目录的权限确保挂载成功新目录。使用docker logs Jenkins容器id查找初始密码,进入Jenkins浏览器界面,安装插件,生成管理员账户,管理员账户要与之前的一模一样确保恢复成功。然后正常进入Jenkins浏览器界面
2)、 在宿主机中,先stop新Jenkins容器,把旧挂载目录中的内容复制或者移动到新挂载目录,覆盖新挂载目录的所有内容,mv /旧目录名称/ /新目录名称/ 这样移动可以将文件夹中的隐藏文件夹一同复制。然后启动Jenkins容器并打开Jenkins发现成功,构建任务也成功恢复。完美!!!
2、