在 Docker 中部署 Jenkins,并完成项目的构建和发布

前言

Jenkins 的主要作用是帮助你,把需要在本地机器完成的 Maven 构建、Docker 镜像发布、云服务器部署等系列动作全部集成在一个服务下。简化你的构建部署操作过程,因为 Jenkins 也被称为 CI&CD(持续集成&持续部署) 工具。提供超过 1000 个插件(Maven、Git、NodeJs)来支持构建、部署、自动化, 满足任何项目的需要。

代码和打包资料关注我后台私信获取

本节会需要用到的环境 Docker&Portainer 快速导航如下。

Docker:点击Docker

Portainer :点击Portainer

会带着大家完成 Jenkins 环境的安装,以及以最简单的方式配置使用 Jenkins 完成对 dev-tech-jenkins (opens new window)案例项目的部署。部署后可以访问 xfg-dev-tech-jenkins (opens new window)项目提供的接口进行功能验证。整个部署操作流程如下;


环境配置

1:确保你已经在(云)服务器上配置了 Docker (opens new window)环境,以及安装了 docker-compose。同时最好已经安装了 Portainer (opens new window)管理界面这样更加方便操作。

2:在配置和后续的验证过程中,会需要访问(云)服务的地址加端口。如果你在云服务配置的,记得开放端口;9000 - portainer、9090 - jenkins、8091 -dev-tech-app 服务
Jenkins 部署

上传文件

以上配置内容已经放到 xfg-dev-tech-jenkins (opens new window)工程中,如果你是云服务器部署则需要将 dev-ops 部分全部上传到服务器的根目录下。

compose-down.sh 是 docker-compose (opens new window)下载文件,只有你安装了 docker-compose 才能执行 docker-compose -f docker-compose-v1.0.yml up -d

jdk-down.sh 是 jdk1.8 下载路径,以及解压脚本。如果你在云服务器下载较慢,也可以本地搜索 jdk1.8 下载,并上传到云服务器上解压。注意:本步骤是可选的,如果你的项目不强依赖于 jdk1.8 也可以使用 Jenkins 默认自带的 JDK17。可以通过在安装后的 Jenkins 控制台执行 which java 找到 JDK 路径。

maven 下的 settings.xml 配置,默认配置了阿里云镜像文件,方便在 Jenkins 构建项目时,可以快速地拉取下载下来包。

脚本说明

java 复制代码
version: '3.8'
# 执行脚本;docker-compose -f docker-compose-v1.0.yml up -d
services:
  jenkins:
    image: jenkins/jenkins:2.439
    container_name: jenkins
    privileged: true
    user: root
    ports:
      - "9090:8080"
      - "50001:50000"
    volumes:
      - ./jenkins_home:/var/jenkins_home # 如果不配置到云服务器路径下,则可以配置 jenkins_home 会创建一个数据卷使用
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/local/bin/docker
      - ./maven/conf/settings.xml:/usr/local/maven/conf/settings.xml # 这里只提供了 maven 的 settings.xml 主要用于修改 maven 的镜像地址
      - ./jdk/jdk1.8.0_202:/usr/local/jdk1.8.0_202 # 提供了 jdk1.8,如果你需要其他版本也可以配置使用。
    environment:
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false # 禁止安装向导「如果需要密码则不要配置」docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
    restart: unless-stopped

volumes:
  jenkins_home:

Jenkins Docker 执行安装脚本。

1:./jenkins_home:/var/jenkins_home 是在云服务器端挂一个映射路径,方便可以重新安装后 Jenkins 依然存在。你也可以配置为 jenkins_home:/var/jenkins_home 这样是自动挂在 volumes jenkins_home 数据卷下。

2:docker 两个 docker 的配置是为了可以在 Jenkins 中使用 Docker 命令,这样才能在 Docker 安装的 Jenkins 容器内,使用 Docker 服务。

3:./maven/conf/settings.xml:/usr/local/maven/conf/settings.xml 为了在 Jenkins 中使用映射的 Maven 配置。

4:./jdk/jdk1.8.0_202:/usr/local/jdk1.8.0_202 用于在 Jenkins 中使用 jdk1.8

5:JAVA_OPTS=-Djenkins.install.runSetupWizard=false 这个是一个禁止安装向导,配置为 false 后,则 Jenkins 不会让你设置密码,也不会一开始就安装一堆插件。如果你需要安装向导可以注释掉这个配置。并且当提示你获取密码时,你可以执行;docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 获取到登录密码。
执行安装

java 复制代码
[root@lavm-aqhgp9nber dev-ops]# docker-compose -f docker-compose-v1.0.yml up -d
[+] Building 0.0s (0/0)                                                                                                       
[+] Running 1/0
 ✔ Container jenkins  Running 

执行脚本 docker-compose -f docker-compose-v1.0.yml up -d 后,这样执行完毕后,则表明已经安装成功了
插件安装

地址:http://localhost:9090/ (opens new window)- 登录Jenkins

1~2步,设置镜像源,设置后重启一下 Jenkins。 镜像源地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

3~4步,下载插件,先下载安装 chinese 汉化插件,方便不太熟悉 Jenkins 的伙伴更好的知道页面都是啥内容。

5步,所有的插件安装完成后,都需要重启才会生效。安装完 chinese 插件,重启在进入到 Jenkins 就是汉化的页面了

除了以上步骤,你还需要同样的方式安装 maven、git、docker 插件。

注意,因为网络问题你可以再做过程中,提示失败。没关系,你可以再搜这个插件,再重新下载。它会把失败的继续下载。
全局工具配置

地址:http://localhost:9090/manage/configureTools/(opens new window)

用于构建部署的 SpringBoot 应用的环境,都需要在全局工具中配置好。包括;Maven、JDK、Git、Docker。注意这里的环境路径配置,如果配置了是会提示你没有对应的路径文件夹。
添加凭证

地址:http://localhost:9090/manage/credentials/store/system/domain/_/

配置了Git仓库的连接凭证,才能从Git仓库拉取代码。

如果你还需要操作如 ssh 也需要配置凭证。
新建任务

一个任务就是一条构建发布部署项目的操作。

1:配置任务

dev-tech-jenkins
配置Git

你可以 fork 这个项目,到自己的仓库进行使用

https://gitcode.net/KnowledgePlanet/x/dev-tech-content-moderation.git
配置Maven

在高级中设置 Maven 配置的路径 /usr/local/maven/conf/settings.xml。这样才能走自己配置的阿里云镜像仓库。

java 复制代码
clean install -Dmaven.test.skip=true

配置Shell

powershell 复制代码
# 先删除之前的容器和镜像文件
if [ "$(docker ps -a | grep xfg-dev-tech-app)" ]; then
docker stop xfg-dev-tech-app
docker rm xfg-dev-tech-app
fi
if [ "$(docker images -q xfg-dev-tech-app)" ]; then
docker rmi xfg-dev-tech-app
fi

# 重新生成
cd /var/jenkins_home/workspace/xfg-dev-tech-jenkins/xfg-dev-tech-app
docker build -t xiaofuge/xfg-dev-tech-app .
docker run -itd -p 8091:8091 --name xfg-dev-tech-app xiaofuge/xfg-dev-tech-app

当你熟悉后还可以活学活用,比如这里只是做build 但不做run执行操作。具体的部署可以通过 docker compose 执行部署脚本。

另外如果你有发布镜像的诉求,也可以在这里操作。
测试验证

java 复制代码
@SpringBootApplication
@RestController()
@RequestMapping("/api/")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    /**
     * http://localhost:8091/api/test
     */
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public ResponseBodyEmitter test(HttpServletResponse response) {
        response.setContentType("text/event-stream");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Cache-Control", "no-cache");

        ResponseBodyEmitter emitter = new ResponseBodyEmitter();

        String[] words = new String[]{"hello world!!!。\r\n", "你的", " Jenkins ", " 部", "署", "测", "试", "成", "功", "了啦!"};
        new Thread(() -> {
            for (String word : words) {
                try {
                    emitter.send(word);
                    Thread.sleep(250);
                } catch (IOException | InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }).start();

        return emitter;
    }
    
}

工程中提供了接口;http://localhost:8091/api/test
CI&CD - 构建发布

地址:http://localhost:9090/job/dev-tech-jenkins/

验证结果

访问:http://localhost:8091/api/test

好了 在 Docker 中部署 Jenkins,并完成项目的构建和发布 学习结束了 友友们 点点关注不迷路 老铁们!!!!!

相关推荐
IT闫1 小时前
【AI】——结合Ollama、Open WebUI和Docker本地部署可视化AI大语言模型
docker·语言模型·容器
梁萌1 小时前
06-DevOps-自动构建Docker镜像
运维·docker·devops
邹老师的小课堂5 小时前
Windows环境下,Jenkins+Gitee的CICD
windows·gitee·jenkins·测试·cicd
pingzhuyan8 小时前
03(总)-docker篇 Dockerfile镜像制作(jdk,jar)与jar包制作成docker容器方式
java·docker·jar
Bl_a_ck9 小时前
【C++】Docker介绍
运维·docker·容器·eureka
keepython11 小时前
【n8n docker 部署的代理问题】解决n8n部署无法访问openai等外国大模型厂商的api
运维·人工智能·docker·容器
八股文领域大手子11 小时前
优化IDEA2024.3大型项目启动慢
运维·nginx·spring·docker·容器
深夜面包14 小时前
Ubuntu 安装与配置 Docker
linux·ubuntu·docker
斯普信专业组17 小时前
二进制和docker两种方式部署Apache pulsar(standalone)
docker·容器·apache
Michaelwubo17 小时前
docker 支持GPU 问题 安装 NVIDIA Docker
docker·容器·eureka