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管理界面
-
进入jenkins配置界面
-
点击高级
-
配置jenkins回调地址
-
点击应用
-
github上创建一个项目仓库
创建一个仓库,私有或公共仓库均可
-
进入配置仓库WebHook界面
- 配置仓库的WebHook
当有人对这个仓库发出push时候,github会调用配置的WebHook地址,这个地址就配置第4步jenkins的回调地址
点击添加WebHook
点击保存
8.使用BlueOcean
进行项目构建
此处使用jenkins最新的Blue Ocean
构建项目
-
进入插件安装界面
-
安装
blue ocean
插件
-
返回首页
-
进入Blue Ocean界面
-
创建流水线
-
选择github
-
为jenkins创建访问github的 access token
-
在github上创建即可
点击最后的创建
-
在jenkins填写生成的token
输入token,点击connect
-
选择用户
-
选择项目
最后因为仓库没有Jenkinsfile文件,会显示如下界面
此时,会因为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进行自动化部署。
可以看到jenkins完全已经完成了自动化构建过程
-
手动触发构建
有时候网络等原因可能会导致push代码后无法出发WebHook的自动构建,此时就需要手动拉去代码并进行自动话构建
点击该按钮后会手动进行构建