git + docker + docker-compose + Jenkins+Linux 自动化构建、部署、测试过程

发布时间 2023-09-11 14:27:28作者: bobochen
# 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