安装
安装jdk
JDK下载地址: https://jdk.java.net/archive/
不同版本的Jenkins对于Java的运行环境有要求
当服务器上运行多个版本的JDK时,不同软件所依赖的JDK版本各不相同,这时需要再程序运行前进行指定JAVA_HOME的路径即可。
1.8版本安装
[root@cicd-jenkins ~]# tar -xf jdk-8u271-linux-x64.tar.gz -C /usr/local/
[root@cicd-jenkins ~]# cd /usr/local/
[root@cicd-jenkins local]# mv jdk1.8.0_271 jdk1.8
[root@cicd-jenkins local]# vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8
PATH=$JAVA_HOME/bin:$PATH
[root@cicd-jenkins local]# source /etc/profile
[root@cicd-jenkins ~]# java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
jdk17版本安装
[root@cicd-jenkins ~]# tar -xf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local/
[root@cicd-jenkins ~]# cd /usr/local/
[root@cicd-jenkins local]# mv jdk-17.0.2/ jdk17
Jenkins安装
jenkins清华源下载: https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
在安装 jenkins 之前要先确保电脑上是否已配置过 Java 的环境变量,可调出命令窗口,通过 java -version 来检验
[root@cicd-jenkins ~]# /usr/local/jdk17/bin/java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
不同版本的jenkins对于Java的运行环境有要求,具体版本请参考官网,从 Jenkins 版本 2.357 和 LTS 2.361.1 开始,需要 Java 11 或 Java 17
# 安装字体依赖,不安装会报字体找不到的错误
yum install fontconfig ttf-dejavu git -y
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.503-1.1.noarch.rpm
rpm -ivh jenkins-2.503-1.1.noarch.rpm
sed -i '/#Environment.*JAVA_HOME/aEnvironment="JAVA_HOME=/usr/local/jdk17"' /usr/lib/systemd/system/jenkins.service
systemctl enable jenkins --now
# 查看初始密码
cat /var/lib/jenkins/secrets/initialAdminPassword
86bf257ec2c84303b4c9bcd8b4ff22ea
之后选择“选择插件安装”
然后点击安装配置用户进入即可。
配置jenkins系统时区
查看现有时区:
更改时区:
更换jenkins源
清华源: http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
如果上述方法源不能用,如下办法:
华为源: https://mirrors.huaweicloud.com/jenkins/updates/update-center.json
sed -i 's|https://updates.jenkins.io/download|https://repo.huaweicloud.com/jenkins|g' /var/lib/jenkins/updates/default.json
sed -i 's|http://www.google.com|https://www.baidu.com|g' /var/lib/jenkins/updates/default.json
之后重启jenkins
如果还不能用,就在香港开一台云服务器,安装版本一样的jenkins安装插件之后打包传输过来即可。
安装常用插件
Localization: Chinese (Simplified) 中文插件
Git: 拉取git仓库代码的插件
GitLab : 一些可以便捷与gitlab对接的插件
List Git Branches Parameter: 展示git仓库分支
Workspace Cleanup: 构建之后对构建任务的工作目录进行清理
Publish Over SSH : 构建之后对将制品发送到对端服务器
SSH Agent : 允许 Jenkins 主节点通过 SSH 连接到远程机器,并在这些机器上启动 Jenkins 代理,从而分散 Jenkins 主节点的负载
SSH Build Agent:它提供了一种通过 SSH 启动代理的方式。
Credentials Plugin: 一个为 Jenkins 提供扩展点的插件,用于安全地存储、管理和绑定凭证数据到其他 Jenkins 插件、构建、流水线等
Mailer: Jenkins默认的邮件发送器
Email Extension: 邮件扩展发送器
DingTalk:对接钉钉发送消息插件
Qy Wechat:对接企业微信发送消息
WXWork Notification: Pipeline 对接企业微信发送消息
SonarQube:支持SonarQube代码扫描
Build Name and Description Setter:自定义构建信息
ldap:支持ldap
build user vars:获取构建人信息
Folders:支持文件夹
Jenkins的目录介绍
Jenkins默认安装路径在 /var/lib/jenkins 下
/var/lib/jenkins
├── caches # 缓存数据
├── fingerprints # 文件指纹信息。
├── jobs # Jenkins 作业配置和构建历史
├── logs # 系统日志和作业日志
├── nodes # 节点配置文件
├── plugins # 已安装的插件
├── secrets # 机密信息
├── updates # 更新中心信息和插件更新包
├── userContent # 用户上传的内容
├── users # 用户配置信息
├── war # Jenkins WAR 文件和核心资源
└── workspace # 作业的工作空间,构建时使用的目录
配置jenkins启动用户为root
修改jenkins的systemd配置文件,让jenkins以root用户运行,防止后期权限不足的问题,当然你也可以设置sudo权限。
vim /usr/lib/systemd/system/jenkins.service
#User=jenkins
#Group=jenkins sudo ansible chmod +x
User=root
Group=root
# 将原来的jenkins改为root
systemctl daemon-reload && systemctl restart jenkins
配置jenkins使用nginx访问
设置jenkins 主页URL:
到nginx主机添加一下域名:
server {
listen 80;
server_name jenkins.zhangqifeng.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://100.100.137.91:8080;
}
}
配置凭据
创建jenkins访问gitlab的token凭据
凭据ID必须是全局唯一,这里为了后期方便使用,我命名为gitlab_root_token ,凭据ID一旦创建不可更改
访问jenkins --》管理jenkins --》系统设置–》填写gitlab的信息,凭据选择刚刚创建的token凭据,点击测试如果显示 sucess 即可
创建jenkins拉取git仓库代码权限的凭据
配置要部署的目标服务器凭据
注意:
如果使用密码登录,则不需要配置私钥。如果同时配置私钥和密码,这个密码是私钥的密码
Remote Directory 远程目录: 远端的根路径。
Avoid sending files that have not changed: 这个功能在jenkins 调用slave节点构建发送文件时有问题。在 Sep 29, 2023的时候已经标记此bug,但是在1.25 版本还未修复,详情: https://github.com/jenkinsci/publish-over-ssh-plugin/issues/324
配置jenkins连接work节点
配置jenkins的node工作节点
工作节点从master节点下载对应的agent包 ,然后通过java程序运行 agent包与master建立连接,当jenkins的master下发指令后agent包则会执行对应的执行,并将执行结果返回给master。
所以需要注意一下几点:
● master和node的网络能够通信
● node节点上必须安装的有java17的环境(agent的Java版本要和master的版本保持一致)
● node节点上需要安装必要的构建工具,比如git、maven等等
用法:
● 只允许运行绑定到这台机器的job: 只有job配置匹配便签和此工作节点的标签一致时才会在这个节点上进行构建
● 尽可能的使用这个机器节点: jenkins的master 根据各个节点的运行情况分配构建任务
master与node节点通信一般有两种方式:
● 一种是ssh方式,master主动连接agent的ssh端口后进行下发指令
● 另外一种是http方式连接,在agent下载agent.jar包后主动连接master服务端
○ http方式配置方式如下:
推荐使用ssh方式,这样我们就不需要关注agent.jar的运行状态。
点击完成之后查看日志:
所有节点配置maven
如果使用master节点构建项目,则在master节点配置maven即可,并配置maven的路径
如果使用工作节点构建项目,则对应的工作节点还需要搭建jdk、maven
Maven与JDK版本的对应关系主要取决于Maven的版本和所需的Java版本。以下是具体的对应关系:
● Maven 2.0.11及以下版本支持JDK 1.3和JDK 1.4。
● Maven 2.0.11及以上版本支持JDK 1.5及更高版本。
● Maven 3.0及以上版本支持JDK 1.7及更高版本。
● Maven 3.3及以上版本支持JDK 1.8。
● Maven 3.5.0及以上版本支持JDK 9。
● Maven 3.5.3及以上版本支持JDK 10。
● Maven 3.5.4及以上版本支持JDK 11。
● Maven 3.6.0及以上版本支持JDK 12。
● Maven 3.6.1及以上版本支持JDK 13。
● Maven 3.6.2及以上版本支持JDK 14。
● Maven 3.6.3及以上版本支持JDK 15。
● Maven 3.8.1及以上版本支持JDK 16。
● Maven 3.8.3及以上版本支持JDK 17。
高版本的JDK可以运行并编译较低版本的Java代码,但反过来则不行。例如,使用JDK 1.8运行Maven可以编译和输出1.8、1.7、1.6等版本的二进制文件,但如果使用较低版本的JDK运行Maven,则无法输出较高版本的Java二进制文件。
不同版本下载地址: https://archive.apache.org/dist/maven/
[root@cicd-java-node ~]# tar -zxf jdk-8u271-linux-x64.tar.gz -C /usr/local/
[root@cicd-java-node ~]# cd /usr/local/
[root@cicd-java-node local]# mv jdk1.8.0_271/ jdk1.8
[root@cicd-java-node local]# vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8
PATH=$JAVA_HOME/bin:$PATH
[root@cicd-java-node local]# source /etc/profile
[root@cicd-java-node ~]# tar -xf apache-maven-3.3.3-bin.tar.gz -C /usr/local/
[root@cicd-java-node ~]# cd /usr/local/
[root@cicd-java-node local]# mv apache-maven-3.3.3/ maven
[root@cicd-java-node local]# vim /etc/profile
export MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH
[root@cicd-java-node local]# source /etc/profile
配置maven:
清空 /usr/local/maven/conf/settings.xml 将以下内容粘贴进入
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
# 本地仓库
<localRepository>/build/m2/prod-repository</localRepository>
<servers>
</servers>
# 镜像仓库
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
</profiles>
<activeProfiles>
</activeProfiles>
<pluginGroups>
<pluginGroup>org.mortbay.jetty</pluginGroup>
<pluginGroup>org.codehaus.cargo</pluginGroup>
</pluginGroups>
<proxies>
</proxies>
</settings>
<localRepository> : 指定本地仓库的位置。默认情况下,Maven 会将下载的依赖项存储在用户主目录下的 .m2/repository 目录中。
<mirrors>: 配置 Maven 仓库的镜像,以加速依赖项的下载或替换默认的中央仓库。
<proxies>: 配置代理服务器,以便在受限网络环境中访问外部资源。
<servers>: 配置与远程仓库或其他需要身份验证的服务器进行交互时的凭据。
<profiles>: 配置构建的不同配置文件。每个配置文件可以包含不同的仓库、插件配置等。
<activeProfiles>: 指定哪些配置文件是活动的。你可以在这里激活一个或多个配置文件。
<pluginGroups>: 指定插件组,以便在使用插件时不需要在 POM 文件中指定完整的插件坐标。
配置jenkins中的maven路径:
所有节点配置node
在哪个节点进行构建node项目就在哪个节点安装
我们选用 Node-v12.18.3 TLS(稳定版本)
下载二进制包之后上传服务器
yum install gzip -y
tar -xf node-v12.18.3-linux-x64.tar.xz -C /usr/local
cd /usr/local
chown -R root.root node-v12.18.3-linux-x64
mv node-v12.18.3-linux-x64 node
vim /etc/profile
添加下面一行:
PATH=/usr/local/node/bin:$PATH
增加通知消息
使用Mailer对接邮箱
注意,这种方式只有构建失败才会发送信息
配置邮箱
首先需要安装Mailer 插件,然后为Jenkins配置邮件的发送信息
这里演示的是qq邮箱
然后登录邮箱设置第三方客户端登录密码,需要在qq邮箱申请下 ,申请之后别忘记保存下
添加邮箱配置需要在
● Jenkins–>系统管理–>系统配置–> Jenkins Location -->系统管理员邮件地址 添加系统管理员邮箱
配置完成后,在下发测试,显示 Email was successfully sent 即为成功~~
各平台的邮箱配置
阿里云
https://help.aliyun.com/document_detail/36576.html
SMTP服务器: smtp.mxhichina.com
SMTP服务器端口号(常规): 25
SMTP服务器端口号(加密): 465
SMTP用户名: 必须和个人信息内的邮箱(Jenkins Location 的邮箱设置)保持一致。填写SMTP认证登录用户名(完整发信邮箱地址)不要有空格等多余字符。
SMTP密码: 在邮箱内设置的第三方客户端密码
腾讯企业邮箱
SMTP服务器: smtp.exmail.qq.com
SMTP用户名: 必须和个人信息内的邮箱(Jenkins Location 的邮箱设置)保持一致。填写SMTP认证登录用户名(完整发信邮箱地址)不要有空格等多余字符。
SMTP密码: 在邮箱内设置的第三方客户端密码
其他邮箱
其他邮箱也是差不多的操作,先登录邮箱平台,设置第三方客户端登录密码,将对应的SMTP服务器设置后。填入账号密码,以下是常用的SMTP服务器
什么是SMTP地址?
SMTP地址是指用于发送邮件的服务器地址,它们通常由邮件服务提供商提供。使用正确的SMTP地址可以确保您的邮件能够被准确地发送到接收者的邮箱中。
Gmail SMTP地址 smtp.gmail.com
Outlook SMTP地址 smtp.live.com
QQ邮箱 SMTP地址 smtp.qq.com
163邮箱 SMTP地址 smtp.163.com
阿里云邮箱 SMTP地址 smtp.mxhichina.com
自定义域名邮箱的SMTP地址
对于使用自定义域名邮箱的用户,SMTP地址通常是由域名提供商或邮件服务提供商提供的。可以联系服务提供商获取正确的SMTP地址。
项目配置
在Recipients内填入接收邮件人邮箱地址
对接钉钉
首先需要安装 DingTalk 插件
增加机器人
然后再对应的钉钉群组内创建机器人
复制Webhook地址和加密值,后面用
配置jenkins
进入jenkins -->Manager jenkins
测试成功后点击 保存即可
然后在个人信息内配置手机号,不然钉钉插件无法发送消息,报错信息:[钉钉插件]发送消息时报错: java.lang.NullPointerException: Cannot invoke “io.jenkins.plugins.DingTalkUserProperty.getMobile()” because the return value of “hudson.model.User.getProperty(java.lang.Class)” is null
进入到项目内,添加机器人
# [ ${JOB_BASE_NAME} - 构建${JOB_STATUS}提醒](${BUILD_URL})
-------------------
- 项目名称: ${JOB_BASE_NAME}
- 构建编号: 第${BUILD_NUMBER}次构建
- 构建分支: ${BRANCH}
- 构建人: ${EXECUTOR_NAME}
- 构建 Url :${BUILD_URL}
- 任务持续时间: ${JOB_DURATION}
-----------------------
效果如下
对接微信
首先安装企业微信Qy Wechat 不要安装 WXWork Notification 插件, WXWork Notification 插件不支持freestyle模式,只支持Pipeline
增加机器人
在企业微信-群组中添加机器人
对接jenkins
在项目设置中,增加构建后操作,添加企业微信通知
根据自己的情况填写一下信息, 为了增加构建描述,我们为微信消息添加构建信息描述
- 项目名称: ${JOB_BASE_NAME}
- 构建编号: 第${BUILD_NUMBER}次构建
- 构建分支: ${BRANCH}
- 构建 Url :${BUILD_URL}
执行构建后,在企业微信群查看效果
增加SonarQube代码扫描
安装
不同版本下载地址:https://www.sonarsource.com/products/sonarqube/downloads/historical-downloads/
● 从SonarQube 7.9版本开始,需要JDK 11+的环境
● SonarQube自7.9版本开始放弃支持MySQL数据库
● SonarQube自8.9版本之后是最后一个支持Scanners以Java8环境运行的版本
● SonarQube 能够分析任何类型的 Java 源文件,无论它们遵循哪个版本的 Java。
硬件要求
需要至少2GB的RAM才能有效运行,并且1GB的可用RAM用于操作系统。
这里采用docker安装
[root@cicd-Component-docker ~]# mkdir /data/sonarqube
[root@cicd-Component-docker ~]# mkdir /data/postgres
# 修改内核参数,不然soanrqube内的es会启动失败
echo vm.max_map_count=262144 >> /etc/sysctl.conf
sysctl -p
# 运行pg
docker run --name postgres -d -p 5432:5432 \
-v /data/postgres/postgresql:/var/lib/postgresql \
-v /data/postgres/data:/var/lib/postgresql/data \
-v /etc/localtime:/etc/localtime:ro \
-e POSTGRES_USER=sonar \
-e POSTGRES_PASSWORD=sonar \
-e POSTGRES_DB=sonar \
-e TZ=Asia/Shanghai --restart always --privileged=true \
registry.cn-beijing.aliyuncs.com/zygpubilc/postgres:13.4
# 运行sonarqube初始化目录,将对应的容器内文件拷贝过来
docker run -d --name sonartest \
registry.cn-beijing.aliyuncs.com/zygpubilc/sonarqube:7.8-community
[root@cicd-Component-docker ~]# docker cp sonartest:/opt/sonarqube/conf /data/sonarqube/
Successfully copied 26.6kB to /data/sonarqube/
[root@cicd-Component-docker ~]# docker cp sonartest:/opt/sonarqube/exten/ions /data/sonarqube/
Successfully copied 90.1MB to /data/sonarqube/
[root@cicd-Component-docker ~]# docker rm -f sonartest
sonartest
[root@cicd-Component-docker ~]# mkdir /data/sonarqube/logs
[root@cicd-Component-docker ~]# mkdir /data/sonarqube/data
[root@cicd-Component-docker ~]# chmod -R 777 /data/sonarqube
# 运行sonar
docker run -d --name sonar -p 9090:9000 \
--link postgres:postgres \
-e ALLOW_EMPTY_PASSWORD=yes \
-e SONARQUBE_DATABASE_USER=sonar \
-e SONAR_JDBC_USERNAME=sonar \
-e SONAR_JDBC_PASSWORD=sonar \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://postgres:5432/sonar" \
--privileged=true --restart always \
-v /data/sonarqube/logs:/opt/sonarqube/logs \
-v /data/sonarqube/conf:/opt/sonarqube/conf \
-v /data/sonarqube/data:/opt/sonarqube/data \
-v /data/sonarqube/extensions:/opt/sonarqube/extensions \
registry.cn-beijing.aliyuncs.com/zygpubilc/sonarqube:7.8-community
配置sonarqube
默认安装成功后访问 浏览器 http://部署的服务器IP:9090 ,默认账号 admin 密码admin
安装中文插件,默认是从这里安装的,但是我们的版本是 7.8版本,而插件显示支持版本为10.6,所以需要手动安装。
手动安装步骤直接访问下载 https://github.com/xuhuisheng/sonar-l10n-zh/releases
查看sonarqube版本支持的汉化版本
[root@cicd-Component-docker sonarqube]# cd /data/sonarqube/extensions/plugins/
[root@cicd-Component-docker plugins]# wget https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.28/sonar-l10n-zh-plugin-1.28.jar
[root@cicd-Component-docker plugins]# docker restart sonar # 或者在页面内点击重启服务
配置token
保存生成的token供jenkins使用
配置jenkins
前提是安装SonarQube插件
新增凭据
新增对接凭据,使用secret text类型的凭据
配置jenkins对接sonar
安装sonar-Scanner
要在jenkins或者node节点安装
[root@cicd-jenkins ~]# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
[root@cicd-jenkins ~]# unzip sonar-scanner-cli-3.3.0.1492-linux.zip
[root@cicd-jenkins ~]# mv sonar-scanner-3.3.0.1492-linux/ /usr/local/sonar-scanner
[root@cicd-jenkins ~]# cat /etc/profile
export PATH=$PATH:/usr/local/sonar-scanner/bin
[root@cicd-jenkins ~]# sonar-scanner -v
配置tools
在jenkins – manager jenkins --tools
配置sonar-Scanner
配置JDK
配置maven
配置项目支持
选择ruoyi-auth项目, 编辑job 使用的JDK版本
增加构建步骤
添加的内容:
sonar.projectKey=${JOB_NAME}
sonar.projectName=${JOB_NAME}
sonar.projectVersion=${BUILD_NUM}
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=${WORKSPACE}
sonar.java.binaries=${WORKSPACE}
sonar.projectKey=${JOB_NAME}
# 这是项目的唯一标识键。在SonarQube服务器上,每个项目通过此键进行识别,确保在同一个SonarQube实例中它是唯一的。尽管直接写在这里的是项目密钥。
sonar.projectName=${JOB_NAME}
# 这是项目在SonarQube界面中显示的名称,可以是更易读的文本,不一定需要与sonar.projectKey相同,但通常保持一致以便于理解。
sonar.projectVersion=1.0
# 指定项目的版本
sonar.language=java
# 指定分析的代码语言
sonar.sourceEncoding=UTF-8
# 设置源代码文件的字符编码,确保SonarQube能够正确地读取和分析源代码。
sonar.sources=${WORKSPACE}
# 指定了要分析的源代码目录
sonar.java.binaries=${WORKSPACE}
# 指定编译后Java字节码的路径
以下是常见的语言与sonar-scaner的配置介绍
#projectKey项目的唯一标识,不能重复
sonar.forceAuthentication=false
sonar.login=saq
sonar.password=000000
sonar.projectKey=testuser
sonar.projectName=testuser
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.modules=java-module,javascript-module,html-module
# Java module
java-module.sonar.projectName=Java Module
java-module.sonar.language=java
# .表示projectBaseDir指定的目录
java-module.sonar.sources=.
java-module.sonar.projectBaseDir=src/main/java
sonar.binaries=classes
# JavaScript module
javascript-module.sonar.projectName=JavaScript Module
javascript-module.sonar.language=js
javascript-module.sonar.sources=js
javascript-module.sonar.projectBaseDir=src/main/webapp
# Html module
html-module.sonar.projectName=Html Module
html-module.sonar.language=web
html-module.sonar.sources=pages
html-module.sonar.projectBaseDir=src/main/webapp
接下来就开始构建项目,项目构建完成后,在项目详情出点击即可跳转到 soanrqube去
优化jenkins构建历史显示
我们的构建历史是这样的,可以进行优化下
修改build描述
前提:
(1)安装 Build Name and Description Setter插件
更改jenkins安全配置
(2)Manage Jenkins -> Configure Global Security,将Markup Formatter的设置更改为Safe HTML。
在job的构建流程中新增修改构建名称和构建描述
构建描述支持文本、jenkins内部变量、也可以支持图片
<img src ="https://img.ixintu.com/upload/jpg/20210523/9133071a73e4d6300501a773f9101d71_100709_800_1054.jpg" height="140" width="140" ></img>
配置使用ldap权限管理
安装配置ldap
安装ldap这里我们使用docker进行安装,安装openldap 和 php-ldap-admin
password='123456'
docker run \
-d -p 389:389 -p 636:636 \
--name openldap \
--restart=always \
--hostname openldap \
-v /data/openldap/slapd/database:/var/lib/ldap \
--volume /data/openldap/slapd/config:/etc/ldap/slapd.d \
--env LDAP_ORGANISATION="ev5.top" \
--env LDAP_DOMAIN="ev5.top" \
--env LDAP_BASE_DN="dc=ev5,dc=top" \
--env LDAP_ADMIN_PASSWORD=$password \
registry.cn-beijing.aliyuncs.com/zygpubilc/openldap:2.4.57
-p 389:389 TCP/IP访问端口
-p 636:636 SSL连接端口
--name openldap 自行设置容器名称
-v /data/openldap/slapd/database:/var/lib/ldap:将数据持久化到本地
--hostname openldap 设置容器主机名称为 openldap
--env LDAP_ORGANISATION="ev5.top" 配置LDAP组织名称
--env LDAP_DOMAIN="ev5.top" 配置LDAP域名
--env LDAP_BASE_DN="dc=ev5,dc=top" 配置LDAP的DN
--env LDAP_ADMIN_PASSWORD=$password 配置LDAP密码
docker run \
-p 8082:80 \
--name ldapadmin \
--link openldap:ldap \
--env PHPLDAPADMIN_LDAP_HOSTS=ldap \
--env PHPLDAPADMIN_HTTPS=false \
--detach registry.cn-beijing.aliyuncs.com/zygpubilc/phpldapadmin:0.8.0
安装完成后,访问下php-ldap-admin
这个时候没有任何的群组和用户
安装ldap客户端配置ldap
yum install openldap-clients -y
新增部门
(OU : organizationalUnit)
[root@cicd-Component-docker ~]# cat create_ou.ldif
dn: ou=user,dc=ev5,dc=top
objectclass: organizationalUnit
ou: group
[root@cicd-Component-docker ~]# ldapadd -x -D "cn=admin,dc=ev5,dc=top" -W -f create_ou.ldif
Enter LDAP Password:
adding new entry "ou=user,dc=ev5,dc=top"
其中 `-x` 表示简单认证
`-D` 表示绑定DN
-W 表示交互式输入密码,也可以使用-w 密码进行免交互
-f 表示从文件读取配置并导入
新增条目信息
新增条目就是我们新增一个用户信息
[root@cicd-Component-docker ~]# cat add_entry_user.ldif
dn: cn=zhangsan,ou=user,dc=ev5,dc=top
objectClass: inetOrgPerson
cn: zhangsan
sn: 张三
mail: zhangsan@qq.com
uid: zhangsan
departmentNumber: 1
description: zhangsan
telephoneNumber: 15512345678
userPassword: 123456
# 这里没有定义changetype 所以只能用 ldapadd 命令
[root@cicd-Component-docker ~]# ldapadd -x -w 123456 -D 'cn=admin,dc=ev5,dc=top' -f add_entry_user.ldif
adding new entry "cn=zhangsan,ou=user,dc=ev5,dc=top"
点击刷新,刷新下ldap显示
相同的步骤,我们再创建cmdb用户作为 管理员
[root@cicd-Component-docker ~]# cat add_entry_user_cmdb.ldif
dn: cn=cmdb,ou=user,dc=ev5,dc=top
objectClass: inetOrgPerson
cn: cmdb
sn: jenkins管理员
mail: cmdb@qq.com
uid: cmdb
departmentNumber: 1
description: zhangsan
telephoneNumber: 15515812345
userPassword: 123456
ldapadd -x -w 123456 -D 'cn=admin,dc=ev5,dc=top' -f add_entry_user_cmdb.ldif
此时,我们已经有了两个用户 cmdb 、zhangsan
查询新增信息
ldapsearch -x -w 123456 -b 'ou=user,dc=ev5,dc=top' -D 'cn=admin,dc=ev5,dc=top'
.....
# user, zzz5.top
dn: ou=user,dc=zzz5,dc=top
objectClass: organizationalUnit
ou: group
ou: user
# cmdb, user, zzz5.top
dn: cn=cmdb,ou=user,dc=zzz5,dc=top
objectClass: inetOrgPerson
cn: cmdb
sn: cmdb
mail: cmdb@qq.com
uid: cmdb
departmentNumber: 1
description: zhangsan
userPassword:: MTIzNDU2
telephoneNumber: 15515812345
# zhangsan, user, zzz5.top
dn: cn=zhangsan,ou=user,dc=zzz5,dc=top
objectClass: inetOrgPerson
cn: zhangsan
sn: zhangsan
mail: zhangsan@qq.com
uid: zhangsan
departmentNumber: 1
description: zhangsan
userPassword:: MTIzNDU2
telephoneNumber: 15512345678
....
jenkins对接ldap
首先需要先安装ldap插件
然后在安全设置中找到 安全域,选择使用ldap
设置以下内容
测试登录
这个时候先点保存,然后继续后面的操作,一定不要进行退出操作!!
获取构建人信息
需要安装 build user vars插件
安装完成后在 jenkins --> manager jenkins --> system --> Build User Variables
勾选 启用所有构建
The plugin provides the following environment variables:
echo "
构建信息打印
检出的代码仓库:${GIT_URL}
检出的代码分支:${BRANCH}
当前构建人: ${BUILD_USER}
当前构建人ID:${BUILD_USER_ID}
"
授权策略Role-based Authorization Strategy
全局安全设置–》授权策略
账户张三设置为只读,jenkins管理员拥有管理员权限
集成ansible
安装配置Ansible
这里我们将 over ssh 插件替换为Ansible, 主要是ansible足够灵活,不与jenkins强关联,没有版本顾虑
需要在jenkins或者node节点安装
yum方式:
[root@jenkins ~]# yum install epel-release -y
[root@jenkins ~]# yum install ansible -y
pip方式:
[root@jenkins ~]# yum install epel-release
[root@jenkins ~]# yum install python2-pip
[root@jenkins ~]# pip install ansible
查看Ansible版本:
[root@jenkins ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
配置主机清单
修改ansible禁止询问主机检查
sed -i "/^#host_key_checking /ahost_key_checking = False" /etc/ansible/ansible.cfg
创建主机清单
[root@cicd-java-node ~]# cat /etc/ansible/hosts
dev-ruoyi-auth ansible_ssh_user=root ansible_ssh_host=100.100.137.89 ansible_ssh_port=22 ansible_ssh_pass=1qaz@WSX
dev-ruoyi-system ansible_ssh_user=root ansible_ssh_host=100.100.137.89 ansible_ssh_port=22 ansible_ssh_pass=1qaz@WSX
dev-ruoyi-gateway ansible_ssh_user=root ansible_ssh_host=100.100.137.89 ansible_ssh_port=22 ansible_ssh_pass=1qaz@WSX
dev-ruoyi-ui ansible_ssh_user=root ansible_ssh_host=100.100.137.89 ansible_ssh_port=22 ansible_ssh_pass=1qaz@WSX
qa-ruoyi-auth ansible_ssh_user=root ansible_ssh_host=100.100.137.88 ansible_ssh_port=22 ansible_ssh_pass=1qaz@WSX
qa-ruoyi-system ansible_ssh_user=root ansible_ssh_host=100.100.137.88 ansible_ssh_port=22 ansible_ssh_pass=1qaz@WSX
qa-ruoyi-gateway ansible_ssh_user=root ansible_ssh_host=100.100.137.88 ansible_ssh_port=22 ansible_ssh_pass=1qaz@WSX
qa-ruoyi-ui ansible_ssh_user=root ansible_ssh_host=100.100.137.88 ansible_ssh_port=22 ansible_ssh_pass=1qaz@WSX
主机清单参数说明
ansible_ssh_host
将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port
ssh端口号.如果不是默认的端口号,通过此变量设置.
ansible_ssh_user
默认的 ssh 用户名
ansible_ssh_pass
ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass
sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
ansible_sudo_exe (new in version 1.8)
sudo 命令路径(适用于1.8及以上版本)
ansible_connection
与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
ansible_ssh_private_key_file
ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_shell_type
目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.
ansible_python_interpreter
目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python
不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).
与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
检查ansible主机连通性,可以通过主机名进行检查,也可以通过主机组进行检查
[root@cicd-jenkins ~]# ansible dev-ruoyi -m ping
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
dev-ruoyi-gateway | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[root@cicd-jenkins ~]# ansible qa_ruoyi -m ping
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
qa-ruoyi-system | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
jenkins配置
参数化构建增加部署选项
新增加一个shell,执行ansible步骤
/usr/bin/ansible ${PALTFORM}-${JOB_NAME} -m shell -a "mkdir -p /app/update/${JOB_NAME}"
/usr/bin/ansible ${PALTFORM}-${JOB_NAME} -m copy -a "src=ruoyi-auth/target/${JOB_NAME}.jar dest=/app/update/${JOB_NAME}/${JOB_NAME}.jar"
/usr/bin/ansible ${PALTFORM}-${JOB_NAME} -m script -a "start_up.sh"