Docker 安装 Jenkins开始前最好,将docker升级到最新版本(至少大于17)
1. 安装过程- 首先拉取镜像:
docker pull jenkins (我安装的是Jenkins 2.275) - 创建本地数据卷:
mkdir -p /data/jenkins_home/ - 修改用户授权:
chown -R 1000:1000 /data/jenkins_home/ - 启动容器:
docker run -d --name jenkins -p 7900:8080 -p 50000:50000 -v /data/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins - 这里挂载了物理盘映射
- 还挂载了docker映射
- 访问对应网址:
xxx:7900 - 获取初始管理员密码(两种方式,因为映射了本地逻辑卷)
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword - 或者在进入容器后(
docker exec -it jenkins /bin/bash ):cat /data/jenkins_home/secrets/initialAdminPassword - 选择安装推荐的插件等待即可
- 按照流程创建管理员账户
- 根据之前的情况创建实例,即完成
2. Jenkins 安装 npm- 首先以root权限进入容器:
docker exec -it -u root jenkins bash
2.1. 替换容器的源- 备份:
cp /etc/apt/sources.list /etc/apt/sources.list.bak - 查看系统版号:
lsb_release -c ,并且将下文中替换文件中的对应位置进行修改 - 修改:
vim /etc/apt/sources.list ,如果无法拉取:sudo apt install apt-transport-https ca-certificates ,vim中使用shift+insert插入 W: Unable to read /etc/apt/preferences.d/ - DirectoryExists (2: No such file or directory) :这时新建此文件夹即可mkdir /etc/apt/preferences.d- 如果没有vim,先
apt update ,然后apt install vim
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-freedeb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-freedeb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-freedeb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free - 添加node源:
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
2.2. 安装nodejs和npm
3. Jenkins流水线 + Docker + Maven + Github webhooks + Spring boot
3.1. 需要的插件和配置
3.1.1. 插件
Blue Ocean
Maven Integration
3.1.2. 配置- 查看容器的全部信息:
docker inspect jenkins ,其中的Env项中包含了JAVA_HOME 等环境信息,如下所示
"Env": [ "PATH=/usr/local/openjdk-8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "LANG=C.UTF-8", "JAVA_HOME=/usr/local/openjdk-8", "JAVA_VERSION=8u242", "JAVA_BASE_URL=https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u242-b08/OpenJDK8U-jdk_", "JAVA_URL_VERSION=8u242b08", "JENKINS_HOME=/var/jenkins_home", "JENKINS_SLAVE_AGENT_PORT=50000", "REF=/usr/share/jenkins/ref", "JENKINS_VERSION=2.275", "JENKINS_UC=https://updates.jenkins.io", "JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental", "JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals", "COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log"] - 进行全局工具配置:
Jenkins -> 系统管理 -> 全局工具管理 - jdk配置,如果没有自动安装,如果有则使用上面的JAVA_HOME地址即可

Git配置 
Docker配置 
3.1.3. 安装mavenexport MAVEN_HOME=/opt/apache-maven-3.6.3export MAVEN_HOMEexport PATH=$PATH:$MAVEN_HOME/bin 编辑maven的settings.xml 来替换源(位置conf/ 下),在<mirrors></mirrors> 标签内添加一下任意一个 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf></mirror> - 刷新权限:
source /etc/profile - 然后在
Jenkins -> 系统管理 -> 全局工具管理 继续进行Maven配置

3.1.4. 配置Jenkins使用Docker- 之前在创建容器的时候已经完成了sock的映射
- 登录进入jenkins容器:
docker exec -it -u root jenkins bash - 安装docker client:
apt-get update && /apt-get -y install apt-transport-https / ca-certificates / curl / gnupg2 / software-properties-common && /curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && /add-apt-repository / "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") / $(lsb_release -cs) / stable" && /apt-get update && /apt-get -y install docker-ce - 通过输入
docker 来检查是否成功 - 授予jenkins用户docker权限:
- 以root用户身份进入jenkins容器:
docker exec -it -u root jenkins /bin/bash - 查看当前用户情况:
ls -l /var/run/docker.sock - 授权
jenkins 用户:chown jenkins: /var/run/docker.sock - 再次查看用户情况:
ls -l /var/run/docker.sock - 检查
docker ps 之类的命令是否可以使用
3.1.5. 配置Jenkins中的Git SSH- 进入jenkins容器:
docker exec -it jenkins /bin/bash - 生成SSH密钥:
ssh-keygen ,一路回车使用默认值 - 查找密钥:
cat /var/jenkins_home/.ssh/id_rsa.pub - 然后登录Github,在
settings->SSH and GPG keys 中添加密钥。
3.1.6. Github添加Webhook- 进入想要部署的仓库,
settings -> webhook ,选择Add Webhook - 设置payload_url为jenkins对应地址:
xxx(jenkins访问网址)/github-webhook/ - 选择
Just the push event. 和Active 后保存即可
3.1.7. 配置主从节点避免出现如下报错:pending—Waiting for next available executor
- 进入对应位置:
系统管理 -> 节点管理 - 点击
配置主从节点 ,设置至少为2个。

3.2. 使用流水线新建任务- 点击
新建任务 ,新建一个名为Jenkins-Demo 的流水线任务

构建触发器 选择GitHub hook trigger for GITScm polling

- 流水线中(
jenkinsfile 文件放置在仓库根目录下) 定义 选择Pipeline script from SCM SCM 选择Git Repository URL 输入对应仓库的git@xxx.git 地址- 如果出现报错如下,则先进入jenkins容器输入命令
git ls-remote -h -- git@github.com:xxx.git HEAD :并输入yes 确认
无法连接仓库:Command "git ls-remote -h -- git@github.com:xxx.git HEAD" returned status code 128:stdout:stderr: Host key verification failed.fatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists 
4. GitLab + Jenkins + Spring Boot
4.1. 配置GitLab插件和连接- Jenkins需要安装插件GitLab Plugin和GitLab Hook Plugin
- 进入系统配置,找到GitLab的配置位置,进行配置

- 注意上面需要的API token需要到GitLab的用户设置中,生成Personal Access Tokens
- 填写完成后点击Test Connection,如果显示Success表示配置成功
- 完成GitLab的Ssh配置,过程完全类似第二大步中的对应步骤。
4.2. 创建项目- 勾选Build when a change is pushed to GitLab. GitLab webhook URL:
- 下拉找到点击高级,找到Allowed branches,选择Filter branch by name(一般是master)
- 在下拉,来到流水线中,选择Pipeline script from SCM,URL填写GitLab获取的URL,进行测试(注意如果出现
git ls-remote -h -- ssh://git@xxx.git HEAD ,第一次是需要进入容器执行该命令,并输入yes) - 进入GitLab的对应项目仓库,找到settings->integration配置刚刚得到的webhook URL(注意看提示),然后点击Test(模拟一次Push events),如果返回为403码,则查看参考八
- 之后配置好jenkinsfile,然后跟踪构建结果即可。
5. Jenkins 使用Pipeline集成Cobertura(不支持Java 1.8)- jenkins首先安装插件
Cobertura Plugin - 在pom文件的build->plugins下添加如下的plugin以生成xml格式的覆盖率检查报告
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <configuration> <formats> <format>xml</format> </formats> <check/> </configuration></plugin> - 使用:
mvn cobertura:cobertura 生成相应的测试报告,默认路径为**/target/site/cobertura/ - 在流水线中添加如下post以添加覆盖报告到Jenkins UI。
post { always { step([$class: 'CoberturaPublisher', autoUpdateHealth: false, autoUpdateStability: false, coberturaReportFile: '**/target/site/cobertura/coverage.xml', failUnhealthy: false, failUnstable: false, maxNumberOfBuilds: 0, onlyStable: false, sourceEncoding: 'ASCII', zoomCoverageChart: false, enableNewApi: true]) }}
6. Jenkins 使用pipeline集成jacoco- 在jenkins中安装
jacoco 插件 - 在html发布后发现了403问题,在script界面运行
System.clearProperty("hudson.model.DirectoryBrowserSupport.CSP") - 之后重新构建并发布HTML报告即可
7.参考实用插件 Jenkins 嵌入到 Iframe Jenkins用户组管理 配置Jenkins的分布式构建和部署 jenkins分布式构建和部署(master-slave) - Jenkins官方教程
- Docker 安装 Jenkins (超详细)
- Jenkins 插件安装失败解决办法
- Jenkins+Docker+github+Spring Boot自动化部署
- Jenkins容器中安装Docker
- Jenkins持续集成显示pending—Waiting for next available executor
- 30分钟搞定 Jenkins CI
- gitlab webhook jenkins 403问题解决方案
- jenkins安全内容配置策略
下载地址: Linux关于透明大页机制的介绍 在vmware虚拟机安装dpdk的详细过程 |