当前位置 : 主页 > 编程语言 > java >

Jenkins自动化部署集成了docker-maven插件的多模块项目

来源:互联网 收集:自由互联 发布时间:2022-07-04
Jenkins自动化部署环境搭建 本文的目的是将多模块的项目利用 jenkins 实现自动化的部署,再将代码推送到 gitlab 时,jenkins 通过轮询的方式查看 gitlab 的代码是否有变化,有变化则拉取仓

Jenkins自动化部署环境搭建

本文的目的是将多模块的项目利用 jenkins 实现自动化的部署,再将代码推送到 gitlab 时,jenkins 通过轮询的方式查看 gitlab 的代码是否有变化,有变化则拉取仓库的代码,使用 maven 打包,而我的项目各个子模块又集成了 docker-mavne 插件,会将各模块的服务打包为 docker 镜像推送到服务器,在服务器编写好对应 docker-compose.yml 编排文件启动项目,所以 jenkind 需要在 maven 打包完成后,向服务器发送编排启动项目的命令,即可达到自动化部署项目的目的

1.拉取镜像

有很多的 jenkins 镜像,我们选择 jdk8 这一个

docker pull jenkins/jenkins:latest-jdk8

2.准备 maven 和 jdk

自行前往官网下载对应的版本,这里采用的 maven3.6.3 和 jdk8

3.编写编排文件

  • 准备一个目录放置挂载文件和 docker-compose.yml 文件
  • 新建一个名为 hudson.model.UpdateCenter.xml 的文件,填入一下内容
  • <?xml version='1.1' encoding='UTF-8'?>
    <sites>
    <site>
    <id>default</id>
    <!-- 清华大学的Jenkins插件 镜像地址 -->
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
    </site>
    </sites>
  • 新建 docker-compose.yml 文件
  • version: '3'
    services:
    docker_jenkins:
    user: root
    restart: always
    image: jenkins/jenkins:latest-jdk8
    container_name: jenkins
    ports:
    - 8080:8080
    - 5000:5000
    volumes:
    - /etc/localtime:/etc/localtime # 挂载位置(镜像和宿主机器之间时间保持一致)
    - ./jenkins_home:/var/jenkins_home
    # 挂载maven,按自己的需求修改maven的配置文件,配置仓库地址和本地仓库存储地址
    - ./apache-maven-3.6.3:/var/jenkins_home/maven
    # 挂载 jdk8
    - ./jdk1.8.0_202:/var/jenkins_home/jdk8
    - ./jenkinsci:/usr/jenkinsci
    - /var/run/docker.sock:/var/run/docker.sock
    - /usr/bin/docker:/usr/bin/docker
    - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
    # 挂载出生成的密钥
    - ./ssh:/root/.ssh
    # 如果容器无法解析域名,则需要将容器的网络模式修改为 host 模式
  • 启动项目:docker-compose up -d
  • 4.初始化 Jenkins

  • 第一次登录需要在服务模块下获取密码,因为已经将 jenkins_home 目录挂载出来了,直接去对应的目录下找即可。
  • Jenkins自动化部署集成了docker-maven插件的多模块项目_自动化部署

  • 选择安装推荐的插进
  • Jenkins自动化部署集成了docker-maven插件的多模块项目_jenkins_02

  • 创建一个账户
    Jenkins自动化部署集成了docker-maven插件的多模块项目_git_03
  • 进入管理界面
  • Jenkins自动化部署集成了docker-maven插件的多模块项目_docker-maven_04

  • 安装插件
    这里主要安装 Maven Integration 和 publish over ssh 插件
    系统管理 -> 插件管理 -> 可选插件 搜索这两个插件下载即可
  • Jenkins自动化部署集成了docker-maven插件的多模块项目_自动化部署_05

  • 配置 maven 环境和 jdk 环境
  • 进入 系统管理 -> 全局工具配置
    • 配置 maven,新增maven,配置 maven_home
      Jenkins自动化部署集成了docker-maven插件的多模块项目_jenkins_06
    • 配置 settings 所在的路径
      Jenkins自动化部署集成了docker-maven插件的多模块项目_git_07
  • 配置 jdk
    Jenkins自动化部署集成了docker-maven插件的多模块项目_jenkins_08
  • 配置 Publish over SSH,增加一个 ssh server,方便使用 ssh 连接服务器执行一些命令,或者传输文件
    Jenkins自动化部署集成了docker-maven插件的多模块项目_自动化部署_09
  • 5.gitlab配置ssh

  • 安装 gitlab 插件
    系统管理 -> 插件管理 -> 可选插件 搜索 gitlabJenkins自动化部署集成了docker-maven插件的多模块项目_jenkins_10
  • 登录到jenkins服务器,生成秘钥,进入 jenkins 容器内部执行命令
  • # 生成密钥
    ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
    # 查看公钥
    cat /root/.ssh/id_rsa.pub
  • 登录到 gitlab 添加 ssh keys
    点击头像 -> settings -> SSH Keys 把id_rsa.pub 复制到网页框中
    Jenkins自动化部署集成了docker-maven插件的多模块项目_git_11
  • 创建 Access Token
    点击头像 -> settings -> Access Token
  • Jenkins自动化部署集成了docker-maven插件的多模块项目_docker-maven_12

    ​​复制这个令牌保存起来​​,作为之后访问 gitlab 的令牌

    Jenkins自动化部署集成了docker-maven插件的多模块项目_自动化部署_13

  • jenkins 配置 gitlab 登录
    • 系统管理 -> 系统设置 -> gitlab
      Jenkins自动化部署集成了docker-maven插件的多模块项目_docker-maven_14
    • 添加登录凭据,api token 就是在 gitlab 创建的 Access Token
      Jenkins自动化部署集成了docker-maven插件的多模块项目_docker-maven_15
    • 测试连接是否成功,成功之后点击保存即可
      Jenkins自动化部署集成了docker-maven插件的多模块项目_git_16

    6.git plugins 配置

    系统管理 -> 系统设置 -> git plugin 配置姓名和邮箱

    Jenkins自动化部署集成了docker-maven插件的多模块项目_maven_17

    7.新建任务

    首页 -> 新建任务 -> 构建一个 maven 项目

    • 在源码管理中选择 Git,复制仓库的 ssh 连接地址,此时提示无法连接仓库,点击添加
      Jenkins自动化部署集成了docker-maven插件的多模块项目_docker-maven_18
    • 类型选择 SSH Username with private key,Username 填 root,PrivateKey 选择Enter directly,点击add 登录到 jenkins 服务器查看私钥,挂载了 .ssh目录出来,在 ssh 下,查看 id_rsa 的文件内容
    cat ssh/id_rsa

    将私钥内容复制的网页上面,点击添加

    • 在“credentials”里选择我们刚刚创建的认证方式:root
      Jenkins自动化部署集成了docker-maven插件的多模块项目_docker-maven_19jenkins job默认对master分支进行构建,也可以自定义分支。
    • 配置 Job 的构建触发器
    • 选择“构建触发器”,勾选“Pull SCM”,这个选项会每隔一段时间检查一下GitLab仓库中代码是否有更新,有的话就执行构建操作。日程表如何设置,在这个输入框下面有说明,轮询的时间还可以再缩短一点,比如 10s、半分钟、一分钟之类的

      常见构建触发器:
    • Build after other projects are built 当另一个构建任务完成之后触发
    • Build periodically 周期性的触发
    • Build when a change is pushed to GitLab. GitLab CI Service 当代码有更新的时候触发,通过GitLab CI
    • GitHub hook trigger for GITScm polling 通过Github钩子触发
    • Poll SCM 定期检查代码有无更新,有更新时触发
    • 配置 maven 的 pom 文件位置
      我这里是多模块的项目,配置父模块 pom 文件所在位置
      Jenkins自动化部署集成了docker-maven插件的多模块项目_自动化部署_20
    • 构建后执行远程shell命令
      Jenkins自动化部署集成了docker-maven插件的多模块项目_docker-maven_21
      选择ssh服务,配置执行的编排命令
      ​​​我这里的项目是多模块的工程,然后每个子模块集成了 docker-maven 插件,会将每个服务的 jar 打包成镜像推送到服务器,在服务中编写对应的 docker-compose.yml 文件编排每个项目的容器,所以我这里在 jenkins 调用 maven 打包好项目之后,使用 ssh 连接服务器切换到对应的目录执行编排命令,即可启动服务,不同的部署方式可灵活变通,这里只是演示本项目所使用的一种方式。​​Jenkins自动化部署集成了docker-maven插件的多模块项目_git_22
    # 登录服务器,执行docker-compose编排命令
    cd /data/docker/farmland-chief-server
    docker-compose stop
    docker-compose rm -f
    docker-compose up -d
    docker rmi $(docker images | grep "none" | awk '{print $3}')
    • 由于是父模块 pom 进行打包的,子模块要依据父模块 pom 的位置配置 dockerfile 所在的位置
      Jenkins自动化部署集成了docker-maven插件的多模块项目_git_23
    • 点击执行构建任务
      Jenkins自动化部署集成了docker-maven插件的多模块项目_自动化部署_24

      可以查看构建项目的控制台输出,输出 maven 打包的日志
      Jenkins自动化部署集成了docker-maven插件的多模块项目_自动化部署_25


    网友评论