一、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
- 進入首頁,點擊 New Item
- 在項目名的地方,我們填寫
simple-java-maven-app
- 類型我們選擇 pipeline
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。
我們運行一下,看下輸出結果如何。
並且查看一下 workspace,看下載下來的代碼
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'
}
}
}
}
然後提交,查看一下運行結果如何:
然後再查看一下 wordspace
裏面構建的文件,我們看到多了一個target
目錄,我們看看裏面有什麼新增的文件。
這個 jar 包就是我們最終需要的文件。
2.5、發佈到服務器上面
這裏我們還是選擇插件 Publish over SSH,配置這個插件,我簡要說一下。
這裏的 Remote Directory 比較重要,後面所有的文件都會傳到以這個目錄爲根目錄的目錄下面。
這裏配置好了,但是我們要寫 pipeline,這裏我們只能借住流水線語法生成器,我們這裏計劃把 target 裏面的 jar 包放到目標服務器的 /tmp/ 目錄下面。
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)])
}
}
}
}
運行,我們查看一下結果是否如我們預期。
我們這裏只是把 jar 傳送到了對應的服務器,以及對應的目錄,要想發佈,我們可以直接再添加幾條啓動的命令即可,我這裏不再進行展示。