Jenkins流水线极速打包
在使用Jenkins流水線進行打包時,發(fā)現(xiàn)直接使用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環(huán)境,然后再構建一個java環(huán)境。在java環(huán)境中使用gradle環(huán)境中的打包。在使用鏡像gradle進行打包時,發(fā)現(xiàn)特別慢。這很大一部分原因是由于我們每次都是臨時構建一個gradle環(huán)境,其中的依賴下載都是重復工作,當程序有一個很小的改動時,它同樣會從0下載一次,就造成了很長的構建耗時。
怎么樣提升速度呢?
在上述構建中,最慢的步驟是gradle的build,如果選擇選用服務器安裝gradle進行打包,再將打好的jar包直接構建成docker鏡像,一定會快很多。
那就開始做吧,原先在Jenkinsfile中,只需要build鏡像一步就夠了。現(xiàn)在需要先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') {} }在這次嘗試中,我遇到了幾個問題:
這些問題是使用Jenkinsfile常見的問題,其中,java環(huán)境和gradle環(huán)境需要在jenkins中安裝好(見Jenkins系統(tǒng)配置),然后在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}”
這里將整個工作目錄的權限都放開了,讓腳本可以順暢執(zhí)行。具體的權限可以自行摸索,777是偷懶的做法。
總結
以上是生活随笔為你收集整理的Jenkins流水线极速打包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最小表示法详解
- 下一篇: 用beyond compare 复制中文