在使用Jenkins流水线进行打包时,发现直接使用Dockerfile去构建一个java或者go程序会非常慢,go好一点也要一分钟,java则需要3分钟以上。go极速打包设置见:这里

dockerfile如下:

FROM gradle:6-jdk8 AS build
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build --no-daemonFROM openjdk:8-jre-slim
EXPOSE 10087
RUN mkdir /app
COPY --from=build /home/gradle/src/build/libs/*.jar /app/test.jar
ENTRYPOINT ["java", "-jar","/app/test.jar"]

在上述步骤中,第一步是构建一个gradle环境,然后再构建一个java环境。在java环境中使用gradle环境中的打包。在使用镜像gradle进行打包时,发现特别慢。这很大一部分原因是由于我们每次都是临时构建一个gradle环境,其中的依赖下载都是重复工作,当程序有一个很小的改动时,它同样会从0下载一次,就造成了很长的构建耗时。

怎么样提升速度呢?

在上述构建中,最慢的步骤是gradle的build,如果选择选用服务器安装gradle进行打包,再将打好的jar包直接构建成docker镜像,一定会快很多。
那就开始做吧,原先在Jenkinsfile中,只需要build镜像一步就够了。现在需要先clone代码,然后gradle打包,最后将打好的包打入镜像。

费了九牛二虎之力,终于,我做到了。

node  {def appimagedef registry = ''def registryCredential = 'aliyun-docker-image-repository'def pathenv.JAVA_HOME="${tool 'java8'}"stage("Checkout"){checkout([$class: 'GitSCM', branches: [[name: '*/'+env.BRANCH_NAME]], extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: false, recursiveSubmodules: true, reference: '', trackingSubmodules: false]], userRemoteConfigs: [[credentialsId: '', url: '']]])}// 拉代码 stage('Source') {git branch: 'master', credentialsId: '', url: ''}// 打包stage('Gradle') {sh "sudo chmod -R 777 ${env.WORKSPACE}"sh "${tool 'gradle-6.5.1'}/bin/gradle clean build"}// 构建镜像stage('Build') {appimage = docker.build registry + ":" + env.BRANCH_NAME + "-$BUILD_NUMBER"}stage('Publish') {}stage('Deploy') {}
}

在这次尝试中,我遇到了几个问题:

  1. 找不到java环境
  2. 找不到gradle环境
  3. 权限不够

这些问题是使用Jenkinsfile常见的问题,其中,java环境和gradle环境需要在jenkins中安装好(见Jenkins系统配置),然后在Jenkinsfile中进行声明:

env.JAVA_HOME="${tool 'java8'}"
或者像这样直接使用
sh "${tool 'gradle-6.5.1'}/bin/gradle clean build"

需要注意的是,以上的“java8”和“gradle-6.5.1”都是在Jenkins中进行安装时,起的名字,指向的是具体的插件,而不是这里填什么Jenkins下载什么。

另外权限不够的问题,我在上面的Jenkinsfile中也有解决,如:sh “sudo chmod -R 777 ${env.WORKSPACE}”

这里将整个工作目录的权限都放开了,让脚本可以顺畅执行。具体的权限可以自行摸索,777是偷懒的做法。

Jenkins流水线极速打包相关推荐

  1. go Jenkins流水线极速打包镜像上传

    在使用Jenkins流水线进行打包时,发现直接使用Dockerfile去构建一个java或者go程序会非常慢,go好一点也要一分钟,java则需要3分钟以上.Java&Gradle极速打包设置 ...

  2. Jenkins 流水线 获取git 分支列表_Jenkins扩展共享库进阶

    读完需 16 分钟 速读需 7 分钟 前言 前面我们介绍了Jenkins多分支流水线.Jenkins流水线即代码之扩展共享库,其实都是"流水线即代码"的体现.我们将Jenkinsf ...

  3. Docker 搭建 Jenkins 流水线项目配置

    本篇介绍 Jenkins 流水线项目的配置及流水线脚本语法规则.至于 Jenkins 的安装及其它配置,我之前写过一篇文章可以查看. https://www.yuque.com/testpu/pro/ ...

  4. Jenkins 流水线说明

    .Jenkins 流水线 .CI/CD .流水线 1.承前 作为运维,逃不掉的工作之一就是Jenkins .哪怕开发同学自己会搭也一定会等你来完成,不然像抢了某人的责任田一样. 2. Jenkins ...

  5. jekins自动打包java,Jenkins实现自动化打包并集成fir平台(超详细)

    解放你的双手! 作者博客 http://www.cnblogs.com/zhaoyanjun/ 文章目录 安装Tomcat Jenkins 部署到 Tomcat 填写 Jenkins 超级管理员密码 ...

  6. jenkins流水线(jenkinsfile)详解,保姆式教程

    jenkins流水线(jenkinsfile)详解 在学习本篇文章的时候,可以去看看jenkins官网的文档,jenkins官网支持中文,观看十分便捷 此教程使用的是gitee+docker+jenk ...

  7. Tomcat Jenkins iOS自动打包

    Tomcat Jenkins iOS自动打包 Jenkins 可以配合测试人员或者 CI 打包,主要作用是提供打包页面选择和参数传递,最后导出 ipa 包. 打包方式有如下几种 借助 Jenkins ...

  8. 自动打包linux,使用Jenkins如何自动打包部署linux

    使用Jenkins如何自动打包部署linux 发布时间:2020-11-25 14:47:07 来源:亿速云 阅读:86 作者:Leah 使用Jenkins如何自动打包部署linux?很多新手对此不是 ...

  9. navicat运行db文件_使用 YAML 文件配置 Jenkins 流水线

    本文转载自:Jenkins 中文社区 这也是一种自定义流水线 DSL 的方法 几年前,我们的 CTO 写了一篇关于 使用 Jenkins 和 Docker 为 Ruby On Rails 应用提供持续 ...

最新文章

  1. Thymeleaf 标准表达式语法详解
  2. Hibernate之mappedBy
  3. 74芯片引脚真值表汇总
  4. BEA WebLogic平台下J2EE调优攻略--转载
  5. MyBatis 编程式开发中的核心对象及其作用?
  6. mysqldump死住(实际是导致mysqld crash)
  7. 杭电OJ-2104_hide handkerchief超简洁代码
  8. 使用python game写一个贪吃蛇游戏
  9. 和项目组研究计算几何
  10. linux usermod修改用户所在组方法
  11. spring12----基于@AspectJ的AOP
  12. python学习笔记之lambda表达式
  13. stata学习笔记|自相关处理问题
  14. 在线word编辑html,eWebEditor - 在线HTML编辑器,HTML在线编辑
  15. OpenJDK构建工具IcedTea 1.7发布
  16. REST,以及RESTful的讲解
  17. webstorm绝对路径引入echarts_Webstorm+Webpack+echarts构建个性化定制的数据可视化图表两个echarts详细教程(柱状图,南丁格尔图)...
  18. csapp bomb lab (《深入理解计算机系统》lab2)
  19. Shiro中自定义Realm
  20. php在表格中截取中文,excel表格截图的快捷键是什么?

热门文章

  1. 支付宝事件溯源:2005年“雅巴“交易再回首
  2. Linux Miscellaneous Device
  3. Windows环境下OpenSSL下载安装及制作证书
  4. BLE_BQB Test_Stable Modulation Characteristics, uncoded data at 1 Ms/s_RF-PHY/TRM/BV-09-C
  5. hadoop可以解决什么问题_CC光嫩肤 可以解决什么皮肤问题?
  6. 【算法】Regular Expression Matching 正则匹配
  7. 英伟达Quadro RTX A5000/A4000显卡系统参数曝光
  8. 【历史上的今天】9 月 7 日:世界上第一部电子电视;惠普联合创始人出生;上亿美国人隐私信息泄露
  9. 随笔备忘记录-UI自动化测试-操作配置文件、封装公共类
  10. 虚拟机设置共享文件夹不显示