1. Jenkins

1.1 简介

        作为一款开源的自动化服务器,它可以帮助自动化各种任务,包括构建、测试和部署软件。Jenkins 以其灵活性和扩展性而闻名,它可以与许多版本控制系统、构建工具和其他软件交付工具集成。

一些主要的特性和用途:

  1. 持续集成(Continuous Integration, CI):Jenkins 可以自动运行构建任务,每当代码库发生变化时,它就会触发构建过程,帮助团队及早发现集成错误。

  2. 持续交付和持续部署(Continuous Delivery and Deployment, CD/CD):Jenkins 支持自动化部署流程,可以将软件自动部署到测试或生产环境,从而加快软件交付速度。

  3. 丰富的插件生态系统:Jenkins 拥有一个庞大的插件库,这些插件可以帮助用户扩展 Jenkins 的功能,以支持各种工具和服务。

  4. 易于集成:Jenkins 可以与 Git、Subversion、Maven、Gradle 等多种版本控制系统和构建工具集成,实现无缝的构建和部署流程。

  5. 多平台支持:Jenkins 可以在多种操作系统上运行,包括 Linux、Windows 和 macOS。

  6. 分布式构建:Jenkins 支持分布式构建,可以将构建任务分布到多个节点上执行,提高构建效率。

  7. 易于使用:Jenkins 提供了一个直观的 web 界面,用户可以通过它轻松配置构建任务和管理构建过程。

  8. 定时和触发构建:用户可以设置定时任务或根据特定的触发器(如代码提交)来运行构建。

  9. 报告和通知:Jenkins 可以生成构建报告,并在构建成功或失败时发送通知,帮助团队成员跟踪构建状态。

  10. 可扩展性:用户可以自定义 Jenkins 的行为,创建自定义插件来满足特定的构建和部署需求。

1.2架构图

2. Jenkins尝鲜

         该案例使用一个Java后端小demo作为演示。

2.1 安装Jenkins

执行脚本:docker-compose -f docker-compose-jenkins.yml up -d

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

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

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

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

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

2.2  安装插件

更新镜像源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 

安装docker、git、maven.。可以安装Chinese汉化。

注:安装的插件需要重启后生效

2.3 配置maven、jdk、git、docker文件

文件路径:

jdk--->/usr/java

maven--->/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation 

  • Maven全局配置

 划重点:这个文件需要在Jenkins内部存在

  • JDK

 划重点:这个文件需要在Jenkins内部存在,bin的上一层,没有该文件就会报如下错误

  •  Git

  • maven

  • docker

compose启动时已经将文件映射,docker的命令在Jenkins中可以使用

2.4 添加凭证 

2.5 新建任务(构建流水线)

工作目录:/var/jenkins_home/workspace

任务名称:决定了项目名称

代码从哪里拉取:https://gitee.com/kaikai99/test-ci-cd.githttps://gitee.com/kaikai99/test-ci-cd.git

项目中需要Dockerfile文件,详解:https://blog.csdn.net/qq_41256535/article/details/139564482

Root POM:clean install -Dmaven.test.skip=true

这个pom文件的位置从当前位置有子目录的话需要用 " . "

构建后执行shell

 

# 先删除之前的容器和镜像文件
if [ "$(docker ps -a | grep jenkins-demo)" ]; then
if [ "$(docker ps | grep jenkins-demo)" ]; then
docker stop jenkins-demo
fi
docker rm jenkins-demo
fi
if [ "$(docker images -q kaikai/jenkins-demo)" ]; then
docker rmi kaikai/jenkins-demo
fi

# 重新生成
cd /var/jenkins_home/workspace/jenkins-demo
docker build -t kaikai/jenkins-demo .
docker run -itd -p 8811:8811 --name jenkins-demo kaikai/jenkins-demo

 

3. 注意事项

  •  注意环境配置,在构建过程中容易出现找不到maven的settings.xml文件or显示settings.xml是一个目录,那可能是Jenkins中没有安装maven。

解决方案:

下载maven安装包,解压到/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation路径下,然后更改全局配置中maven的配置路径,到settings.xml。

  • 找不到jdk,可能是路径没配置对(Jenkins内部也需要jdk)。

解决方案:

将下载的java安装包解压到/usr/java,更改全局配置中Java的配置路径,到bin的上一层。

  • 容器构建好之后,运行出现 ‘找不到主类’,说明打包方式不对。

解决方案:在pom.xml文件中添加

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.6.0</version>
        </plugin>
    </plugins>
</build>

会打包两次,构建过程中出现repackage说明插件生效。

打包方式参考:https://www.jb51.net/program/306793zgg.htm

  • 出现springboot版本异常或者插件版本异常

解决方案:对比需要的版本和拉取的版本

  • jdk17只支持springboot---><version>2.6.0</version>以上的,同理插件版本也是2.6.0以上。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐