• Jenkins流水线极速打包


    在使用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-daemon
    
    FROM 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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    怎么样提升速度呢?

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

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

    node  {
        def appimage
        def registry = ''
        def registryCredential = 'aliyun-docker-image-repository'
        def path
        env.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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

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

    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"
    
    • 1
    • 2
    • 3

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

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

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

  • 相关阅读:
    LeetCode每日一题(1599. Maximum Profit of Operating a Centennial Wheel)
    猫不长肉怎么办?增肥效果好、让猫咪迅速圆润起来的猫罐头分享!
    列存在 OceanBase 数据库架构中的应用与演进
    jQuery的extend方法仅仅是字面意思上的扩展吗?
    TYPE-C HUB(拓展坞)乐得瑞LDR6023A快充方案介绍
    idm下载器中文版下载切换语言教程
    异硫氰酸荧光素标记PCL载药纳米粒|FITC-PCL|PCL-FITC|FITC-SS-PEG-PCL(齐岳)
    使用免费开源软件 Blender 编辑视频
    Install pydot and install graphviz
    Linux ————使用常用的Linux命令
  • 原文地址:https://blog.csdn.net/w_monster/article/details/126751571