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"]

在上述步骤中,第一步是构建一个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. 找不到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是偷懒的做法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了迹奇有没

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值