0%

Jenkins + GitHub + Docker 服务自动打包部署

部署Jenkins

基于 Jenkins + GitHub + Docker 实现简单的一键自动打包部署项目
环境: ubuntu + git(GitHub)

Jenkins 配置

Jenkins中文官网:https://www.jenkins.io/zh/

1. Jenkins启动及初始化

  • Docker安装Jenkins(8080端口可调整为其他)

    1
    docker run --name jenkins -u root --restart=always -d -p {你希望的端口,默认可填为8080}:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
  • 安装完成后访问url:http://{Jenkins所部署服务器的Ip}:{8080或自定义的端口}

  • 解锁Jenkins(首次访问需要)

    image-20230605174524476

    • 进入Jenkins容器

      1
      docker exec -it {Jenkins容器名} bash
    • 查看解锁密码

      1
      cat /var/lib/jenkins_home/secrets/initialAdminPassword
    • image-20230605174723318

    • 在网页上输入解锁密码

  • 安装插件

    选择【安装推荐插件】 即可

    image-20230605174833857

  • 创建管理员账户

    该账户需记住!

2. Jenkins系统配置

  • 安装 Maven Integration 插件

    • 【Manage Jenkins】-【Manage Plugins】-【Available】-【输入maven进行搜索】

    • image-20230605175445828

    • 配置 Maven

      • 【Manage Jenkins】-【Tools】-【拉到最下面Maven栏】,选择你的Maven版本

      • image-20230605185703170

    • 检查 Git 插件是否已经安装

      • 【Manage Jenkins】-【Manage Plugins】-【Available】-【输入Git进行搜索】

        • 如果没有搜索结果(或【Installed】标签下有结果),即代表 Git 插件已安装
        • Tips:如果有显示存在 Git 插件可安装,那么大概率是因为 Mailer 插件版本导致 Git 插件自动安装失败导致的,先进行手动安装尝试,步骤如下图:

        image-20230605180025551

      • 这一步可能会因为**Mailer**版本问题导致安装失败,解决办法详见下方【常见问题】

      image-20230605175850939

3. GitHub配置

这一步需要获取一个 GitHub 的 ssh 密钥,使得 Jenkins 可以直接访问你的代码仓库并pull代码

  1. 登录你的Github网页版
  2. 【网页右上角你的头像】-【Settings】-【SSH and GPG keys】-【New SSH key】
  3. 具体ssh key生成及配置方法可见GitHub官方指引(https://docs.github.com/en/authentication/connecting-to-github-with-ssh)
  4. 按照指引将密钥添加到GitHub服务端
  5. 第3步中所生成的密钥会有两个文件,其中一个是不带 .pub 后缀的,我们在后面配置Jenkins项目的时候需要用到这个来配置Credential以连接到GitHub

4. Jenkins 项目配置

  • 新建项目
    • 【Dashboard】-【New Item】
    • 填写项目名,选择 Freestyle Project,如下图:
      image-20230605181732281
      • 【Source Code Management】-【Git】
        image-20230605184303657
    • 点击【Add】,选择【Jenkins】,然后会有一个弹窗,我们在这添加一个密钥(上面所提到的生成的不带.pub后缀的密钥文件)

image-20230605184551745

image-20230605184646109
- 配置打包所需要的Maven设置,【Build Steps】-【Invoke top-level Maven targets】
image-20230605185913973

  • 点击【Save】,保存项目配置

5. 测试打包

  • 【Dashboard】-【点击你的项目】-【Build Now】

    image-20230605191131848

  • 检查宿主机挂载目录下是否生成了jar包,如果有则说明打包流程没有问题

    1
    ls /var/jenkins_home/workspace/你的项目名称/target

自动部署

1. Dockerfile

需要在你的项目文件夹根目录下写一个打镜像的Dockerfile文件,如有疑惑可查阅相关Docker学习资料进行知识补充,所写的Dockerfile是需要push到GitHub仓库中的,Dockerfile内容如下:

1
2
3
4
5
6
7
8
9
10
11
# 基础镜像
FROM openjdk:8-jre-slim
# 配置
ENV PARAMS=""
# 时区
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 添加应用
ADD target/{你的jar包名,如 test.jar} /{你的jar包名,如 test.jar}
## 在镜像运行为容器后执行的命令
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /{你的jar包名,如 test.jar} $PARAMS"]

2. Jenkins打包后执行shell脚本

  • 【Dashboard】-【点击你的项目】-【Configure】-【Build Steps】-【Add build step】-【Execute shell】(目的是在Jenkins 打好jar包后,增加一个打docker镜像以及启动容器的步骤,这步通过增加一个执行脚本来处理)

  • 脚本内容如下:

    1
    2
    3
    4
    5
    6
    cd /var/jenkins_home/workspace/{你的项目名字}
    docker stop {所希望的container名} || true
    docker rm {所希望的container名} || true
    docker rmi {所希望的image名} || true
    docker build -t {所希望的image名} .
    docker run -d -p 9643:9643 --name {所希望的container名} {所希望的image名}:latest
  • 重复上面测试打包的操作,即点击【Build Now】进行打包部署,顺利的话你已经可以通过docker指令看到你的应用的container已经启动了

    1
    docker container ls

Tips && 常见问题

如何重启Jenkins

  • 访问url:http://{Jenkins所部署服务器的Ip}:{8080或自定义的端口}/restart
  • 点击页面上 【restart】按钮

    安装Git插件失败,提示Mailer版本原因

点击 Details 显示报错如下:

1
2
java.io.IOException: Failed to load: Git plugin (git 4.14.3)
- Update required: Jenkins Mailer Plugin (mailer 435.v79ef3972b_5c7) to be updated to 435.438.v5b_81173f5b_a_1 or higher

解决方法:

  1. 重启Jenkins,然后在【Manage Jenkins】中找到升级系统的提示,点击升级系统,如下图:
    image-20230605181047532
  2. 系统升级后重启Jenkins,然后进行 Mailer 插件升级:
    image-20230605181424811
  3. 安装完 Mailer 后重启Jenkins加载更新,**Git**会自动被下载