jenkins简介
Jenkins是一个自包含的开源自动化服务器,可用于自动化与构建,测试以及交付或部署软件有关的各种任务。
Jenkins可以通过本机系统软件包Docker安装,甚至可以由安装了Java Runtime Environment(JRE)的任何计算机独立运行。
可实现的功能
① 持续、自动地构建/测试软件项目。
② 监控软件开放流程,快速问题定位及处理,提高开发效率。
工作原理
- 开发者检入代码到源代码仓库。
- CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。
- CI系统会在对应的工作区内执行构建过程。
- (配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
- (配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.net、 SourceForge之类的网站。
- CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件
优势
易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。
- 易于配置-所有配置都是通过其提供的web界面实现。
- 集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。
- 生成JUnit/TestNG测试报告。
- 分布式构建支持Jenkins能够让多台计算机一起构建/测试。
- 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
- 插件支持:支持扩展插件,你可以开发适合自己团队使用的工具
jenkins安装
物理机安装
1、安装java环境
1
2
3
4
5
6
7
8
9
10
|
wget https://download.oracle.com/otn/java/jdk/8u261-b12/a4634525489241b9a9e1aa73d9e118e6/jdk-8u261-linux-x64.tar.gz?AuthParam=1597552691_67429c142927b21fadba4cd7de9df6e5
mv jdk-8u261-linux-x64.tar.gz?AuthParam=1597552691_67429c142927b21fadba4cd7de9df6e5 jdk-8u261-linux-x64.tar.gz
tar zxvf jdk-8u261-linux-x64.tar.gz -C /usr/local
tee > /etc/profile.d/jdk.sh <<- 'EOF'
export JAVA_HOME=/usr/local/jdk1.8.0_261
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
EOF
source /etc/profile
|
2、安装jenkins
1
2
3
4
5
6
7
|
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum clean all
yum makecache
yum install jenkins -y
### 无法拉取官方源
yum install -y https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.235.4-1.1.noarch.rpm
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
sed -i 's/^JENKINS_USER/#JENKINS_USER/' /etc/sysconfig/jenkins
sed -i 's/^JENKINS_HOME/#JENKINS_HOME/' /etc/sysconfig/jenkins
sed -i 's/^JENKINS_PORT/#JENKINS_PORT/' /etc/sysconfig/jenkins
tee >> /etc/sysconfig/jenkins <<- 'EOF'
# jenkins configurage
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dorg.jenkinsci.plugins.gitclient.Git.timeOut=60"
JENKINS_USER="root"
JENKINS_HOME="/data/jenkins"
JENKINS_PORT="8080"
EOF
sed -i '/candidates/a\/usr/local/jdk1.8.0_221/bin/java' /etc/init.d/jenkins
systemctl enable jenkins
mkdir -pv /data/jenkins
systemctl start jenkins
|
1
2
3
4
5
6
7
8
9
10
|
cp /data/jenkins/hudson.model.UpdateCenter.xml /data/jenkins/hudson.model.UpdateCenter.xml.bak
tee > /data/jenkins/hudson.model.UpdateCenter.xml <<- 'EOF'
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
EOF
|
1
2
|
cat /data/jenkins/secrets/initialAdminPassword
curl -v http://localhost:8080
|
docker 安装
1、制作镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
tee > Dockerfile <<- 'EOF'
FROM jenkins/jenkins
ARG dockerGid=999
ENV JENKINS_HOME=/data/jenkins
USER root
#清除了基础镜像设置的源,切换成腾讯云的阿里云源
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
&& echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list \
&& apt-get update && apt-get install -y libltdl7 && apt-get update \
&& echo "docker:x:${dockerGid}:jenkins" >> /etc/group \
&& curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose
EOF
# 打包镜像
docker build -t jenkins .
|
2、启动jenkins
1
2
3
4
5
6
7
8
9
|
chown -R 1000 /data/jenkins
docker run --name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/bin/docker \
-v /data/jenkins:/data/jenkins \
-v /etc/localtime:/etc/localtime \
-d auto-jenkins
|
常用插件安装
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
61
62
63
64
65
66
|
Build Monitor View
Workspace Cleanup
Disk Usage
Multijob plugin
Build Pipeline Plugin:灰度发布
Mask Passwords Plugin:密码加密
Configuration Slicing Plugin:批量修改JOB的配置
BlueOcean
Locale
Zentimestamp plugin
multibranch-scan-webhook-trigger
Structs
Pipeline: Step API
Token Macro
Build Timeout
Credentials
Plain Credentials
SSH Credentials
Credentials Binding
SCM API
Pipeline: API
Timestamper
Pipeline: Supporting APIs
Pipeline: Nodes and Processes
Snakeyaml API
Jackson 2 API
ECharts API
JUnit
Matrix Project
Workspace Cleanup
Ant
Pipeline: SCM Step
Pipeline: Groovy
Pipeline: Job
Pipeline: Basic Steps
Gradle
Pipeline: Milestone Step
Pipeline: Input Step
Pipeline: Stage Step
Pipeline Graph Analysis
Pipeline: REST API
Pipeline: Stage View
Pipeline: Build Step
Pipeline: Model API
Pipeline: Declarative Extension Points API
JSch dependency
Git client
GIT server
Pipeline: Shared Groovy Libraries
Branch API
Pipeline: Multibranch
Pipeline: Stage Tags Metadata
Pipeline: Declarative
Lockable Resources
Pipeline
GitHub API
GitHub Branch Source
Pipeline: GitHub Groovy Libraries
Pipeline: Stage View
Git
SSH Build Agents
Email Extension
ECharts API
JUnit
Matrix Project
|
jenkinsfile脱离代码仓库
安装插件
1
2
|
1、Config File Provider Plugin
2、Pipeline: Multibranch with defaults
|
配置jenkins
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
|
// 添加default jenkinsfile
#!/usr/bin/env groovy
import groovy.transform.Field
@Field def job_name=""
node() {
environment {
PATH = "/usr/local/git/bin:$PATH"
}
job_name="${env.JOB_NAME}".replace('%2F','/').split('/')
job_name=job_name[0]
workspace="/data/jenkins/workspace/CICD"
ws("$workspace")
{
dir('Cnblog')
{
git url: 'https://github.com/MikelPan/Cnblog.git'
def check_groovy_file="kubernetes/CICD/Jenkinsfile/${job_name}/${env.BRANCH_NAME}/Jenkinsfile.groovy"
load "${check_groovy_file}"
}
}
}
// 在项目根目录中实现如下结构
---Cnblog
---master
---Jenkinsfile
|
jenkins 忘记管理员密码
操作步骤如下
- 删除jenkins目录中的config.xml中的下面部分
1
2
3
4
5
6
7
8
|
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
|
- 重启Jenkins服务;
- 进入首页>“系统管理”>“Configure Global Security”;
- 勾选“启用安全”;
- 点选“Jenkins专有用户数据库”,并点击“保存”;
- 重新点击首页>“系统管理”,发现此时出现“管理用户”;
- 点击进入展示“用户列表”;
- 点击右侧进入修改密码页面,修改后即可重新登录
Jenkins CICD 流水线说明
流水线组成
流水线的写法有两种,声明式写法和脚本化写法。两种用的语言都是 Groovy的语法,不过表述方式上会有点差别,可以根据自己喜好选取。
1、声明式写法
2、脚本式写法