Jenkins使用教程

什么是Jenkins

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,基于Java开发的,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle

安装

mac用户推荐使用homebrew安装

1
2
3
4
5
6
7
8
// 安装
brew install jenkins
// 后台启动
brew services start jenkins
// 另一种启动方式:前台启动
// jenkins
// 停止
brew services stop jenkins

注意:安装时选择安装所有推荐的插件,否则CI时部分功能会报错

CI/CD是什么

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解

image

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式

image

构建流水线

通过提供的账号密码登陆

image

新建任务,选择流水线,可以复制一个原有的任务

image

勾选“丢弃旧的构建记录”,并设置要手动输入的参数,这里设置了git要拉取分支名

image

设置流水线脚本

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
pipeline {
agent any
options { timestamps() }
environment {
REPOSITORY="git@gitlab.xxx.com:gov-cloud/myProject.git"//project gitlab address
TARGET_FILE="target/myProject.jar" // target file path
IMAGE_NAME="myProject" //docker image name
DOMAIN_NAME="registry-docker.com" //推送的域名地址
DOCKER_FILE="/Users/chenshinan/work/file/docker-deploy/myProject-dockerfile" //本地DockerFile的路径
CP_PROPERTIES="cp /Users/chenshinan/work/file/docker-deploy/myProject.properties ./src/main/resources/application.properties" //本地复制properties
APP_NAME="myProject" // 应用名

}
stages {
stage('拉代码') {
steps {
echo 'start clone code forom git:${REPOSITORY}'
deleteDir() //递归删除WORKSPACE下的文件和文件夹
git (
branch:"${env.branch}",
credentialsId:"06ef5819-d19c-4207-b545-a0ed87170e57",
url:"${REPOSITORY}",
changelog:true
)
sh("git branch && git log -3")
}
}
stage('编译代码') {
steps {
echo "start compile source code"
sh("${CP_PROPERTIES}")
sh("mvn clean package -Dmaven.test.skip=true -DskipTests=true")
sh("ls -lat ${TARGET_FILE}")
}
}
stage('拉基础镜像') {
steps {
script {
echo "start pull base image!"
sh("docker pull ${DOMAIN_NAME}/base-centos-7")
}
}
}
stage('构建镜像') {
steps {
script {
echo "start build image!"
sh("docker build --build-arg JAR_NAME=${TARGET_FILE} -f ${DOCKER_FILE} -t ${DOMAIN_NAME}/${IMAGE_NAME}:${env.BUILD_TIMESTAMP}_${currentBuild.id} .")
echo "image vsersion:${env.BUILD_TIMESTAMP}_${currentBuild.id}"
}
}
}
stage('推送镜像到仓库') {
steps {
echo "start push image to repository!"
sh("docker push ${DOMAIN_NAME}/${IMAGE_NAME}:${env.BUILD_TIMESTAMP}_${currentBuild.id}")
}
}
}
}

Jenkins的思维导图

image

参考文献