Jenkins

简介

Jenkins是一款开源的持续集成Continuous Integration)和持续部署Continuous Deployment)软件,用于自动化各种任务,包括构建、测试和部署软件


Docker 安装 jenkins 镜像

docker pull jenkins/jenkins:2.507-jdk17

docker-compose-jenkins.yml文件内容:

services:
  # 自定义的服务名
  jenkins:
    image: jenkins/jenkins:2.507-jdk17
    # 容器名称
    container_name: jenkins
    # 特权模式,允许容器访问主机上所有设备
    privileged: true
    # 默认情况下,Jenkins镜像会以非特权用户如`jenkins`运行。使用root是为了确保容器拥有足够的特权来执行Docker命令。
    user: root
    ports:
      # 将 Jenkins 的 Web 界面(默认运行在容器的 8080 端口)映射到宿主机的 9090 端口。
      - "9090:8080"
      # Jenkins 的 JNLP(Java Network Launch Protocol)代理通信端口(默认运行在容器的 50000 端口)映射到宿主机的 50001 端口
      - "50001:50000"
    volumes:
      # 挂载volumes jenkins_home 数据卷,存储所有jenkins的配置、插件和作业数据
      - jenkins_home:/var/jenkins_home 
      # 在Jenkins中使用Docker命令
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
    environment:
      # 禁止安装向导,配置为false,jenkins不要求设置密码,也不在一开始安装插件。如果需要安装向导可以注释掉这个配置。当需要获取初始管理员密码时,执行 docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 查看
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false
    # 重启策略:宿主机重启或容器意外停止时,自动重启。手动停止不自动重启。
    restart: unless-stopped

volumes:
  # 定义了名为 jenkins_home 的 Docker 数据卷
  jenkins_home:

使用docker compose启动jenkins服务:

# -f 指定Compose文件路径,up命令用于启动服务,-d表示分离模式运行容器(后台运行)
docker compose -f docker-compose-jenkins.yml up -d

访问localhost:9090即可。


插件安装

右上角系统管理 > 系统配置 > 插件管理

image-20250427103454807

Avaliable plugins下查找插件进行安装:

  • chinese:中文包
  • maven
  • git
  • docker

因为网络问题,可能会提示失败。可以再搜索对应插件,重新下载。

image-20250427103702396

勾选安装完成后重启Jenkins:

image-20250427104240668

也可以通过Portainer勾选对应的容器进行重启:

image-20250427104759614


全局工具配置

右上角系统管理 > 系统配置 > 全局工具配置

  • JDK安装 - 新增JDK

    JAVA_HOME的路径可以去jenkins容器中通过which java查看。

    image-20250427160532298
  • Git installations

    image-20250427160709059
  • Maven 安装

    要勾选自动安装

    image-20250427160802801
  • Docker 安装

    Installation root填写/user/local/bin

    image-20250427161125046

配置完成后,最后保存即可。


添加凭证

右上角系统管理 > 安全 > 凭据管理

image-20250427162407857

添加代码托管平台的Username with password,描述可以填写是用于什么平台的凭据,后续拉取代码,选择相应凭证即可:

image-20250427162538596

新建任务

jenkins部署为例,采用的代码仓库:

https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-jenkins.git

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

image-20250427162901306

填写任务名称,选择构建一个maven项目

image-20250427115018486

配置任务

源码管理

选择Git

  • Repository URL 填写目标代码仓库的地址
  • Credentials选择对应代码仓库的凭证

image-20250427171944328

Build

配置Maven:

  • Root POM填写pom.xml
  • Goals and options填写clean install -Dmaven.test.skip=true
image-20250427172102381

Post Steps

选择Run regardless of build result

image-20250427172742904

Add post-build step > 执行 Shell

image-20250427172319689

填写命令:

# 先删除之前的容器和镜像文件
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

填写完成后,save即可。


测试验证

立即构建

选择任务,立即构建,再选择相应的构建流水线 > 控制台输出,可以查看构建详情

image-20250427173209049 image-20250427173226039

构建成功的结果会输出Finished: SUCCESS

image-20250427173445277

验证结果

可以在Portainer中查看到已经创建了对应的容器:

image-20250427175258719

访问应用的接口能正常获取返回:

image-20250427175333006

说明自动化构建应用成功。