1.jenkins安裝
下載jenkins
官方網頁下載: https://jenkins.io/zh/doc/pipeline/tour/getting-started/
直接下載鏈接: http://mirrors.jenkins.io/war-stable/latest/jenkins.war
2.運行jenkins
java -jar jenkins.war --httpPort=9999
打開網頁: http://ip:port/可以看到:
過一會后命令行顯示(框起來的是密碼):
等待網頁加載jenkins:
輸入密碼即可進入jenkins
3.Jenkins安裝插件提速
- 進入jenkins配置目錄:
cd ~/.jenkins
- 進入插件配置目錄:
cd updates
- 更換插件下載地址:
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
- 重新啟動jenkins,需要記錄管理員密碼
4.安裝插件
5.創建管理員
6.配置根URL
按照他默認的即可
7.集成github的WebHook
注意: 部署jenkins服務器必須要是有公網IP的服務器
-
打開jenkins管理界面
image.png -
進入jenkins配置界面
image.png -
點擊高級
image.png -
配置jenkins回調地址
image.png -
點擊應用
image.png -
github上創建一個項目倉庫
創建一個倉庫,私有或公共倉庫均可
image.png
-
進入配置倉庫WebHook界面
image.png
- 配置倉庫的WebHook
當有人對這個倉庫發出push時候,github會調用配置的WebHook地址,這個地址就配置第4步jenkins的回調地址
點擊添加WebHook
點擊保存
8.使用BlueOcean
進行項目構建
此處使用jenkins最新的Blue Ocean
構建項目
-
進入插件安裝界面
image.png
image.png -
安裝
blue ocean
插件
image.png -
返回首頁
image.png -
進入Blue Ocean界面
image.png -
創建流水線
image.png -
選擇github
image.png -
為jenkins創建訪問github的 access token
image.png -
在github上創建即可
image.png
點擊最后的創建
image.png -
在jenkins填寫生成的token
輸入token,點擊connect
image.png -
選擇用戶
image.png -
選擇項目
image.png
最后因為倉庫沒有Jenkinsfile文件,會顯示如下界面
image.png
此時,會因為github倉庫中沒有Jenkinsfile文件,無法進行自動化構建,下面準備編寫Jenkinsfile文件
9. 準備一個自動化構建項目
- 準備一個Java項目,我們將它進行自動化構建
項目很簡單,使用maven創建一個項目,編寫Main.java
文件
// Main.java
/**
* @author: jiangxch
* @date: 2019/12/31 12:57
*/
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 11; i++) {
System.out.println("hello world");
}
}
}
- 將項目打包成一個可執行的jar包
因為我們的演示期望可以使用java -jar xxx.jar
來執行main
函數,所以需要打包成一個可執行的jar文件
在pom.xml
添加
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
<!-- 替換為你自己的類 -->
com.sanjin.jenkins.demo.Main
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<!-- 最終生成的可執行文件名${project.artifactId}-${project.version}-jar-with-dependencies -->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
使用mvn clean package
進行打包,可以看到target中生成的jar文件
使用java -jar target/jenkins-demo-1.0-SNAPSHOT-jar-with-dependencies.jar
執行,注意不是jenkins-demo-1.0-SNAPSHOT.jar
,輸出如下:
- 編寫Jenkinsfile文件進行自動化部署
回想一下上面java項目部署的步驟:1編譯 2部署
我們需要通過jenkins實現這一過程
10. 編寫Jenkinsfile自動構建腳本
我們先將項目與遠程庫連接
git remote add origin https://github.com/jiangxiaochuan/jenkins-demo.git
為jenkins配置docker
由于我們要實現編譯、部署的過程,所以使用docker是最方便的,一些公司也都是用這種方式進行構建的。
- 首先需要在運行jenkins的服務器上安裝docker,此處自行查閱資料
- 其次jenkins需要安裝docker插件
- 在項目目錄下創建Jenkinsfile文件
我用的Linux系統,就用touch命令創建了
touch Jenkinsfile
注意文件名稱: 一定要是 Jenkinsfile
內容如下:
pipeline {
// 設置全局變量
environment {
// jar 文件的stash名稱,maven編譯好的jar包需要轉移到jdk容器中
STASH_JAR = "targetfiles"
// 宿主機maven的.m2目錄,會將宿主機的maven庫掛載到maven容器中,不需要下載過多的jar包
MAVEN_M2_PATH = "/home/lanlan/.m2"
// jar鏡像名稱,定義jar文件名 ->
IMAGE_JAR_NAME = "${JOB_NAME}:latest"
}
agent none
stages{
// 進行maven構建
stage('Build jar file'){
agent {
// 制定docker鏡像,jenkins會自動拉取image,運行一個容器
// 所以需要部署jenkins的服務器事先安裝好docker
docker {
image 'maven:3-alpine'
args "-v ${MAVEN_M2_PATH}:/root/.m2"
}
}
steps {
// 在鏡像中執行的shell命令
sh 'mvn -DskipTests clean package'
// 將打包的好的jar文件臨時存儲起來,我們需要把這個jar文件移動到jdk容器中運行起來
stash includes: 'target/*.jar', name: "${STASH_JAR}"
}
}
// 構建部署鏡像
stage('Build docker image') {
agent any
steps {
script {
// 刪除之前的鏡像,${IMAGE_JAR_NAME}相同不會生成重復的image
// sh "docker rmi ${IMAGE_JAR_NAME}"
// 將打包的jar從臨時存放的位置拿出來,這就轉移到了宿主機中
unstash "${STASH_JAR}"
// ${JOB_NAME} -> github-jenkins-demo/master
// 構建鏡像
def targetImage = docker.build("${IMAGE_JAR_NAME}", ' .')
}
}
}
// 運行容器
stage('Deploy docker continer') {
agent any
steps {
script {
// 運行鏡像容器,--rm表示容器kill后不保存,直接刪除
sh "docker run --rm ${IMAGE_JAR_NAME}"
}
}
}
}
}
然后commit
- 編寫dockerfile
因為我們需要構建部署的docker容器,所以需要實現編寫一個dockerfile文件
在項目根目錄創建dockerfile
文件
#install OS
#FROM centos
FROM openjdk:8
#install java
#RUN yum install -y java
#put jar into container
#ADD target/AdWordsProducer-1.0-SNAPSHOT-shaded.jar adwordsproducer.jar
ADD target/*-jar-with-dependencies.jar target.jar
#run jar
ENTRYPOINT ["java", "-jar", "/target.jar"]
-
push本地項目到github
push項目后,github因為配置了WebHook,所有會發送一個請求到jenkins,jenkins會根據我們編寫的JenkinsFile進行自動化部署。
image.png
可以看到jenkins完全已經完成了自動化構建過程
-
手動觸發構建
有時候網絡等原因可能會導致push代碼后無法出發WebHook的自動構建,此時就需要手動拉去代碼并進行自動話構建
image.png
點擊該按鈕后會手動進行構建