docker 中運行的 jenkins 使用 maven 構建 java 應用

一、jenkins 的安裝

配置要求

  • 最小 256MB 內存,推薦 512MB 以上
  • 10GB硬盤空間,用於安裝 Jenkins、Docker 鏡像和容器

在 Docker 中運行 Jenkins

我們在服務器上面爲 jenkins 準備數據目錄,假設爲/home/data/www/jenkins.wzlinux.com,前提是我們已經在服務器上面安裝好了 docker。

docker run \
  --name jenkins \
  -u root \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -e TZ="Asia/Shanghai" \
  -v /home/data/www/jenkins.wzlinux.com:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --restart=on-failure:10 \
  jenkinsci/blueocean

配置 jenkins

使用瀏覽器打開服務器的 8080 端口,並等待 Unlock Jenkins 頁面出現。

可以使用如下命令獲取管理員的密碼:

docker logs jenkins

關於插件的安裝我這裏也不介紹了,有什麼不懂的可以微信聯繫我。

二、配置 pipeline

2.1、配置源

我們從 github 上面找一個 java 的案例作爲我們的代碼源,當然你也可以選擇自己的 gitlab。

https://github.com/jenkins-docs/simple-java-maven-app

2.2、創建我們的 pipeline

  1. 進入首頁,點擊 New Item
  2. 在項目名的地方,我們填寫simple-java-maven-app
  3. 類型我們選擇 pipeline

image-20200429113841936

2.3、拉取源代碼

點擊確定之後,我們進入到 project 的配置界面,我們找到 pipeline 這一部分。

我們可以把 pipeline 寫入到 jenkinsfile,然後保存到代碼根目錄,也可以直接在這裏填寫,我們選擇在這裏填寫。

pipeline {
    agent {
        docker {
            image 'wangzan18/maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('checkout') { 
            steps {
                git 'https://github.com/jenkins-docs/simple-java-maven-app.git'
            }
        }        
    }
}
  • 因爲我們是構建 java 項目,所以我們這裏選擇 maven 的鏡像,大家可以選擇自己的版本,使用 docker 的好處就是,一些工具我們也不需要再去安裝,然後到系統工具配置了,直接選擇自己需要的工具的 docker 鏡像就可以了。
  • 我們這裏去拉取 github 的代碼,如果語法不會的話,輸入框下面有流水線語法器,可以隨時去生成,也可以使用我們的 gitlab。

我們運行一下,看下輸出結果如何。

image-20200429122714030

並且查看一下 workspace,看下載下來的代碼

image-20200429122749098

2.4、maven 構建

那我們再完善一下 pipeline,我們增加打包構建 stage。

pipeline {
    agent {
        docker {
            image 'wangzan18/maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('checkout') { 
            steps {
                git 'https://github.com/jenkins-docs/simple-java-maven-app.git'
            }
        }        
        stage('Build') { 
            steps {
                sh 'mvn -B -DskipTests clean package' 
            }
        }
    }
}

然後提交,查看一下運行結果如何:

image-20200429122849487

然後再查看一下 wordspace 裏面構建的文件,我們看到多了一個target目錄,我們看看裏面有什麼新增的文件。

image-20200429122928696

這個 jar 包就是我們最終需要的文件。

image-20200429123113697

2.5、發佈到服務器上面

這裏我們還是選擇插件 Publish over SSH,配置這個插件,我簡要說一下。

image-20200428213009062

這裏的 Remote Directory 比較重要,後面所有的文件都會傳到以這個目錄爲根目錄的目錄下面。

這裏配置好了,但是我們要寫 pipeline,這裏我們只能借住流水線語法生成器,我們這裏計劃把 target 裏面的 jar 包放到目標服務器的 /tmp/ 目錄下面。

image-20200429123500041

Source files:需要上傳的文件(注意:相對於工作區的路徑。看後面的配置可以填寫多個,默認用,分隔),爲了簡要我們寫target/*.jar`。
Remove prefix:移除前綴(只能指定Source files中的目錄),這裏我們移除 target。
Remote directory:遠程目錄(這裏也是相對目錄,目錄根據我們配 ssh的時候填寫的Remote Directory 路徑,我寫的是/root,所以文件會被上傳到我們的 /root/java-maven 目錄下面。

最終的 pipeline 如下:

pipeline {
    agent {
        docker {
            image 'wangzan18/maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('checkout') { 
            steps {
                git 'https://github.com/jenkins-docs/simple-java-maven-app.git'
            }
        }        
        stage('Build') { 
            steps {
                sh 'mvn -B -DskipTests clean package' 
            }
        }
        stage('Deliver') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: '應用服務器4', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cp /root/java-maven/*.jar /tmp;
ls /tmp/*.jar''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/java-maven', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }        
    }
}

運行,我們查看一下結果是否如我們預期。

image-20200429123828945

image-20200429123928355

我們這裏只是把 jar 傳送到了對應的服務器,以及對應的目錄,要想發佈,我們可以直接再添加幾條啓動的命令即可,我這裏不再進行展示。

歡迎大家掃碼關注,獲取更多信息

docker 中運行的 jenkins 使用 maven 構建 java 應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章