03.jenkins安装使用.md
jenkins安装
安装
启动docker安装
启动docker,下载Jenkins镜像文件
[root@localhost zhangtq]# docker pull jenkins/jenkins
Using default tag: latest
latest: Pulling from jenkins/jenkins
0e29546d541c: Pull complete
11bbb8c402a7: Pull complete
cf91f018150b: Pull complete
a98e88c6f0f0: Pull complete
f67fc70d671a: Pull complete
edbe48067464: Pull complete
fa23ca93dd6b: Pull complete
00159d993c13: Pull complete
f28fb40a17cf: Pull complete
071d309df04b: Pull complete
78599f36e494: Pull complete
896a32d969fb: Pull complete
3f1a51ea9f7f: Pull complete
26e724f0bfad: Pull complete
b377e1ae1384: Pull complete
d3cdbe7e8b9f: Pull complete
f3b40ebc3458: Pull complete
Digest: sha256:c3fa8e7f70d1e873ea6aa87040c557aa53e6707eb1d5ecace7f6884a87588ac8
Status: Downloaded newer image for jenkins/jenkins:latest
docker.io/jenkins/jenkins:latest
创建挂载目录
创建Jenkins挂载目录并授权权限(我们在服务器上先创建一个jenkins工作目录 /var/jenkins_home,赋予相应权限,稍后我们将jenkins容器目录挂载到这个目录上,这样我们就可以很方便地对容器内的配置文件进行修改。 如果我们不这样做,那么如果需要修改容器配置文件,将会有点麻烦,因为虽然我们可以使用docker exec -it --user root 容器id /bin/bash 命令进入容器目录,但是连简单的 vi命令都不能使用)
mkdir -p /var/jenkins_home chmod 777 /var/jenkins_home
创建并启动jenkins容器
-d 后台运行镜像
-u 指定容器内应用启动用户
-p 8080:8080 将镜像的8080端口映射到服务器的10240端口。
-p 50000:50000 将镜像的50000端口映射到服务器的10241端口
-v /var/jenkins_homet:/var/jenkins_home /var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /var/jenkins_home目录
-v /etc/localtime:/etc/localtime让容器使用和服务器同样的时间设置。
--name myjenkins 给容器起一个别名
docker run -d -u root -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name myjenkins jenkins/jenkins:lts
# 显示如下
d236890a4562950ed793f9231623182a51f0a1e8751442e70a95d7a7f66d73f5
查看是否启动
[root@localhost zhangtq]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d236890a4562 jenkins/jenkins "/sbin/tini -- /usr/…" About a minute ago Exited (1) About a minute ago myjenkins
查看docker容器的日志
docker logs myjenkins
配置镜像加速
需要先访问jenkins地址,输入密码后跳到插件安装界面
image-20230918223346165
方式一
配置镜像加速,进入 cd /var/jenkins_mount/ 目录。
cd /var/jenkins_home/
修改
vi hudson.model.UpdateCenter.xml
里的内容# 修改前 <?xml version='1.1' encoding='UTF-8'?> <sites> <site> <id>default</id> <url>https://updates.jenkins.io/update-center.json</url> </site> </sites>
将源地址修改为清华源
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
修改后 <?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> ~
修改
vi updates/default.json
文件将
"connectionCheckUrl":"https://www.google.com/"
修改为https://www.baidu.com/
方式二
cd /var/jenkins_home/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页面
http://192.168.0.20:8080/

获取密码登录
cd /var/jenkins_home/updates
cat /var/jenkins_home/secrets/initialAdminPassword 99f2b6efafae40718c8c4730fc8e0d94
使用
下载推荐插件
如果下载慢查看是否修改了插件源地址
vi /var/lib/jenkins/hudson.model.UpdateCenter.xml
该文件为jenkins下载插件的源地址,改地址默认jenkins默认为:
https://updates.jenkins.io/update-center.json
,就是因为https的问题,此处我们将其改为http即可,之后重启jenkins服务即可。其他国内备用地址(也可以选择使用):
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
http://mirror.esuni.jp/jenkins/updates/update-center.json
jenkins升级
下载jenkins.war
- 上传到指定目录
/home/jenkins.war
进入容器备份源文件
docker ps
docker exec -it -u root myjenkins /bin/bash
查看Jenkins路径
ps -ef | grep java
root@41bc2e7e58f7:/# ps -ef | grep java jenkins 7 1 13 13:07 ? 00:02:43 java -Duser.home=/var/jenkins_home -Djenkins.model.Jenkins.slaveAgentPort=50000 -jar /usr/share/jenkins/jenkins.war root 529 180 0 13:27 pts/0 00:00:00 grep java
如果提示没有ps命令执行
apt-get update && apt-get install procps
备份现有包
cp /usr/share/jenkins/jenkins.war /usr/share/jenkins/jenkins.war-bak
创建新目录
mkdir /usr/share/jenkins/jenkins_version
退出容器
exit
将
jenkins.war
文件拷贝到容器新建的文件夹中中执行
docker cp /home/jenkins.war myjenkins:/usr/share/jenkins/jenkins_version/
重新进入容器
docker exec -it -u root myjenkins /bin/bash
在容器里执行如下命令替换
jenkins.war
bash-5.1# cd /usr/share/jenkins bash-5.1# rm jenkins.war bash-5.1# mv jenkins_version/jenkins.war .
退出容器
exit
重启容器
docker restart myjenkins
安装常用插件
build pipeline 插件
- 进行视图管理的插件
用户权限管理
插件
用户管理背景
- 针对开发、运维、测试针对不同角色进行不同权限划分,
- 基于插件: Role-based Authorization Strategy ,Authorize Project 来实现。
安装用户管理插件
安装该插件:
系统管理->管理插件-可选插件->搜索该插件选中直接安装即可。
Role-based Authorization Strategy
image-20230919015036311
开启插件功能
系统管理->全局安全设置-授权策略->选中该插件功能即可->保存
image-20230919015249428
验证用户管理功能
关闭用户管理功能来进行实践测试
设置允许用户注册,授权策略改为任何用户可以做任何事情
注册新用户
image-20230919015645108 登录之后是管理员权限,可以做任何操作
image-20230919015809797 开启
Role-Based Strategy
重新登录新创建 test2 用户,显示已经没有任何权限了
image-20230919020314026
权限划分
安装 Role-Based Strategy 插件后,系统管理 中多了如图下所示的一个功能,用户权限的划分就是靠他来做的。
image-20230919021502577
manage roles
Manage Roles:管理角色,相当于针对角色赋予不同权限,然后在将该角色分配给用户。角色就相当于一个组。其里面又有Global roles(全局)、Project roles(项目)、Slave roles(),来进行不同划分。
默认如图下所示:
image-20230919021652145
Global roles
默认是有一个admin用户的,是所有权限都有的,所有权限都是勾选了的。
接下来我们来添加一个角色:user
image-20230919021911474 image-20230919021958241
Item Roles
role to add:表示项目角色
Pattern:是用来做正则匹配的(匹配的内容是Job(项目名)),比如说根据正则匹配到的项目项目角色就都有权限;
接下来新建一个 ItemA 项目角色,改项目角色一般给其构建、取消、读取、读取空间权限,一般配置这4个即可
image-20230919022544824 同样新建ItemB项目
image-20230919022804231 image-20250319153037351 Slave roles(奴隶角色):节点相关的权限
roles to add:表示项目角色
Pattern:是用来做正则匹配的(匹配的内容是节点(slavej节点)),比如说根据正则匹配到的项目项目角色就都有权限;
image-20230919023826640
Assigin roles(分配角色)
给予test1用户分配 user 角色
这样其就有 manage roles 中刚才创建的user角色的权限了。
image-20230919023323878
针对指定用户分配项目角色
一般最常用的就是针对不同用户进行项目角色分配
比如将test1用户分配有 ItemA 项目角色,这样其就可以有刚才我们创建的 ItemA 项目角色正则匹配到的项目的权限了
test1 也为其分配一个 ItemA 项目角色
image-20230919024022893 test2 也为其分配一个 ItemB 项目角色
此时可以在 test1 用户这里看到 ItemA 项目角色所匹配到的项目 A-web1


参数化构建流水线
参数化构建的背景
如果只是简单的构建,jenkins自己默认的插件可以做,但是如果我们想要在构建过程中有更多功能,比如说:选择性构建、传参、项目指定变量等等其他功能,基础的参数化构建可以实现一些简单功能,但是要想使用更多功能这时候我们就需要借助参数化构建来实现交互的功能。此处我们来借助以下插件来进行实现:
Extended Choice Parameter(更丰富的参数化构建插件)
Git Parameter
安装插件
- 首先还是安装该插件,去管理插件里面进行安装 Extended Choice Parameter

项目配置
新建流水线
image-20230919052843690 选择参数化构建->
Extended Choice Parameter
image-20230919051425670
进行配置

这里这个branch 我们就相当于给其当做一个变量,然后来为其进行传参
image-20230919053922831 构建选择执行shell进行测试
img img 参数化配置已经生效
image-20230919054125531 开始构建
可以看到构建成功并且控制台输出
test1
Started by user root Running as SYSTEM Building in workspace /var/jenkins_home/workspace/B-parameter [B-parameter] $ /bin/sh -xe /tmp/jenkins18090594104474141118.sh + echo test1 test1 Finished: SUCCESS
数据来源选择文件
- 在jenkins所在服务器进行如下操作:
[root@qfedu.com ~]# vim /opt/jenkins.property # 建立一个文件
abc=t1,t2,t3,t4
- web 端配置:

进行测试:
构建前:(可以发现也是生效的)

- 构建后查看结果:(也是成功的)


Git插件
- 在用 git 时使用该插件是非常方便的。
安装插件 Git Parameter

配置
添加git参数
image-20230919080155178 配置git
方式一:使用https方式:
image-20230919080731062 添加凭证


方式二:使用密钥配对方式
上面配置当构建时给一个选择列表,这个变量是代表分支。有哪些分支传递给这个变量。
开始构建
列表中已经有可以选择的分支了
image-20230919103254779 点击开始构建
Started by user root Running as SYSTEM Building in workspace /var/jenkins_home/workspace/B-git-parameter The recommended git tool is: NONE using credential 009e8991-9a8a-41dd-876f-f1f12766525a > /usr/bin/git rev-parse --resolve-git-dir /var/jenkins_home/workspace/B-git-parameter/.git # timeout=10 Fetching changes from the remote Git repository > /usr/bin/git config remote.origin.url http://8.131.83.115/cicd/app.git # timeout=10 Fetching upstream changes from http://8.131.83.115/cicd/app.git > /usr/bin/git --version # timeout=10 > git --version # 'git version 2.30.2' using GIT_ASKPASS to set credentials gitlab凭证 用户名为git > /usr/bin/git fetch --tags --force --progress -- http://8.131.83.115/cicd/app.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > /usr/bin/git rev-parse refs/remotes/origin/main^{commit} # timeout=10 Checking out Revision 116e2593fb45fa4ea31b08af76991f566e5b4bf7 (refs/remotes/origin/main) > /usr/bin/git config core.sparsecheckout # timeout=10 > /usr/bin/git checkout -f 116e2593fb45fa4ea31b08af76991f566e5b4bf7 # timeout=10 Commit message: "Add new file" First time build. Skipping changelog. Finished: SUCCESS
可以看到构建成功,并且获取到的代码分支是/origin/main分支的代码
新增分支
zhangtq@zhangtq-X550CC:~/data/app$ git branch * main zhangtq@zhangtq-X550CC:~/data/app$ git checkout -b test 切换到一个新分支 'test' zhangtq@zhangtq-X550CC:~/data/app$ touch a zhangtq@zhangtq-X550CC:~/data/app$ git add . zhangtq@zhangtq-X550CC:~/data/app$ git commit -m "a" [test cd2dfdb] a 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 a zhangtq@zhangtq-X550CC:~/data/app$ git push origin test 枚举对象中: 4, 完成. 对象计数中: 100% (4/4), 完成. 使用 2 个线程进行压缩 压缩对象中: 100% (2/2), 完成. 写入对象中: 100% (3/3), 289 字节 | 96.00 KiB/s, 完成. 总共 3(差异 0),复用 0(差异 0),包复用 0 remote: remote: To create a merge request for test, visit: remote: http://8.131.83.115/cicd/app/-/merge_requests/new?merge_request%5Bsource_branch%5D=test remote: To 8.131.83.115:cicd/app.git * [new branch] test -> test
任务的参数列表里可以看到新增了test分支的选项
image-20230919103254779 选择test分支进行构建
Started by user root Running as SYSTEM Building in workspace /var/jenkins_home/workspace/B-git-parameter The recommended git tool is: NONE using credential 009e8991-9a8a-41dd-876f-f1f12766525a > /usr/bin/git rev-parse --resolve-git-dir /var/jenkins_home/workspace/B-git-parameter/.git # timeout=10 Fetching changes from the remote Git repository > /usr/bin/git config remote.origin.url http://8.131.83.115/cicd/app.git # timeout=10 Fetching upstream changes from http://8.131.83.115/cicd/app.git > /usr/bin/git --version # timeout=10 > git --version # 'git version 2.30.2' using GIT_ASKPASS to set credentials gitlab凭证 用户名为git > /usr/bin/git fetch --tags --force --progress -- http://8.131.83.115/cicd/app.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > /usr/bin/git rev-parse refs/remotes/origin/test^{commit} # timeout=10 Checking out Revision cd2dfdb24a926962ce0ad25df2deee2ea57f0db3 (refs/remotes/origin/test) > /usr/bin/git config core.sparsecheckout # timeout=10 > /usr/bin/git checkout -f cd2dfdb24a926962ce0ad25df2deee2ea57f0db3 # timeout=10 Commit message: "a" First time build. Skipping changelog. Finished: SUCCESS
可以看到获取到的是test分支的代码
Jenkins Master-Slave

jenkins的Master-slave分布式架构主要是为了解决jenkins单点构建任务多、负载较高、性能不足的场景。
Master/Slave相当于Server和agent的概念。Master提供web接口让用户来管理job和slave,job可以运行在master本机或者被分配到slave上运行构建。一个master(jenkins服务所在机器)可以关联多个slave用来为不同的job或相同的job的不同配置来服务。
安装
前提:slave 所在服务器必须有 java环境
slave安装java环境
yum list java* yum install java-11-openjdk.x86_64
获取
java_home
root@localhost ~]# which java # 查看java命令 /usr/bin/java [root@localhost ~]# ll /usr/bin/java # 找到软链接 lrwxrwxrwx. 1 root root 22 Sep 18 22:44 /usr/bin/java -> /etc/alternatives/java [root@localhost ~]# ll /etc/alternatives/java # 找到java_home, 具体为bin前面的 lrwxrwxrwx. 1 root root 64 Sep 18 22:44 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64/bin/java # java_home = /usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64/
系统配置->节点和云管理
image-20230919105111402 新建节点
image-20230919105139321 image-20230919105241923 配置从节点
image-20230919110036238 注意这里需要配置凭据,也就是配置slave所在服务器用户和密码
image-20230919110506735 之后保存,如果无误的话就会直接启动了,如图下所示是有问题的
image-20230919110523548 通过看输出日志,发现是 jdk 的问题,一般来说,其会判断 slave 所在服务器有没有 jdk,如果有就会进行检测,如下图所示,就是没有检查到(因为jdk是我们自己装的,路径并不是默认的路径)。
image-20230919110546043 没有检查到的话其就会去oracle官网下载,来为 slave 所在服务器进行安装,但是因为中国的原因,被墙了,所以也会下载失败,最终就导致彻底失败了,失败如图下:
img 有两种方法解决:推荐方法1:
方法1:
在配置时高级的选项里指定java路径:如下图所示:
image-20230919110703081
方法2:
为 java 路径做一个软链接,保证 jenkins 可以检测到 java。
[root@qfedu.com ~]# ln -s /usr/local/jdk1.8/bin/java /usr/bin/java [root@qfedu.com ~]# ll /usr/bin/java lrwxrwxrwx 1 root root 26 Jul 25 17:33 /usr/bin/java -> /usr/local/jdk1.8/bin/java
image-20230919110805329
可以看到已经启动了
image-20230919110929959
Job配置
在项目 job 中进行配置:
可通过标签或者名称进行匹配(标签可在安装时配置)
image-20230919111205597 开始构建
image-20230919111512451 构建成功后可以看到
Started by user root Running as SYSTEM Building remotely on mysql服务器节点 in workspace /var/bin/jenkins/workspace/B-git-parameter The recommended git tool is: NONE using credential 009e8991-9a8a-41dd-876f-f1f12766525a Cloning the remote Git repository Cloning repository http://8.131.83.115/cicd/app.git > /usr/bin/git init /var/bin/jenkins/workspace/B-git-parameter # timeout=10 Fetching upstream changes from http://8.131.83.115/cicd/app.git > /usr/bin/git --version # timeout=10 > git --version # 'git version 1.8.3.1' using GIT_ASKPASS to set credentials gitlab凭证 用户名为git > /usr/bin/git fetch --tags --progress http://8.131.83.115/cicd/app.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > /usr/bin/git config remote.origin.url http://8.131.83.115/cicd/app.git # timeout=10 > /usr/bin/git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 Avoid second fetch > /usr/bin/git rev-parse refs/remotes/origin/test^{commit} # timeout=10 Checking out Revision cd2dfdb24a926962ce0ad25df2deee2ea57f0db3 (refs/remotes/origin/test) > /usr/bin/git config core.sparsecheckout # timeout=10 > /usr/bin/git checkout -f cd2dfdb24a926962ce0ad25df2deee2ea57f0db3 # timeout=10 Commit message: "a" > /usr/bin/git rev-list --no-walk cd2dfdb24a926962ce0ad25df2deee2ea57f0db3 # timeout=10 Finished: SUCCESS
之后查看构建完的工作目录,也有预想中的文件。
img 这样基本上就实现了借助 jenkins 的 slave 去构建 job了。
目前是在 slave 构建也在 slave 上部署,之后我们可以通过脚本,比如借助 rsync、ansible 等部署在其他服务器上。
扩展
- 可以为slave服务器在配置时候加上标签,这样也会方便我们选择,用法也不单单局限在一台服务器上,可以让多台 slave 去竞选。
jenkins Piple
概览

安装pipeline
在对 jenkins 进行初始化安装时,默认已经安装了 jenkins 的相关插件,如下图所示:
image-20230919112030296
编写流水线脚本

可以借助流水线语法去做。
test 流水线脚本:
pipeline { agent any stages { stage('Hello') { steps { echo 'Hello World' } } } }
构建测试

共享库
jennkins
共享库时一种机制,他允许开发者将常用的功能和代码逻辑分装成可重用的模块,以便在多个流水线中共享和复用。这种机制可以显著的提高开发效率,并促进团队之间的合作与交流
- 优势:
- 如果要更改步骤,不需要再更改 jenkins 的步骤,直接更改文件即可。
- 多项目可以共同引用
在gitlab新建仓库JenkinsLibrary
- 在仓库里新建文件夹
src/org/devops
- 在仓库里新建文件夹
vars
- 新建
jenkinsfile
文件 - jenkinsfile内容
配置流水线

构建流水线
具体配置详解请参考 https://jenkins.io/doc/book/pipeline/
构建邮件状态通知
配置全局
系统管理->系统设置->相关配置如下图:
image-20230919151039800 可以在此处进行测试发送!检验配置是否正确
Job中配置
git + jenkins(git+mvn+docker)+harbor+k8s
流水线自动化发布项目
发布PHP项目
创建代码仓库
GitLab中新建
wordpress
仓库然后再服务器执行
git clone git@8.131.83.115:cicd/wordpress.git 266 cd wordpress/ 269 wget https://cn.wordpress.org/latest-zh_CN.tar.gz 271 tar -xvf latest-zh_CN.tar.gz 273 rm -rf latest-zh_CN.tar.gz 275 cd wordpress/ 279 mv wordpress/* . 281 rm -r wordpress/ 283 git add . 284 git commit -m 'new1' 285 git push origin master 286 git status 287 git branch 288 git config --global user.email "15652533044@163.com" 289 git config --global user.name "zhangtq" 290 git status 291 git push origin master 292 git branch 293 git push origin main
配置
创建Job
image-20230919173150778 参数化构建
配置pipeline脚本(或者直接配置)
image-20230919173839789 直接配置
node ("mysql-slave01") { stage('git checkout') { checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '009e8991-9a8a-41dd-876f-f1f12766525a', url: 'http://8.131.83.115/cicd/wordpress.git']]]) } stage('code copy') { sh '''rm -rf ${WORKSPACE}/.git mkdir -p /data/backup/web-$(date +"%F") mkdir -p /home/wwwroot/default/ cp -rf ${WORKSPACE}/* /home/wwwroot/default/''' } stage('test') { sh "echo '部署完成'" } }
构建
image-20230919193713800
CICD+k8s
kubeadm init --apiserver-advertise-address=192.168.0.10 --image-repository registry.aliyuncs.com/google_containers --control-plane-endpoint=cluster-endpoint --kubernetes-version v1.24.1 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16 --v=5
sandbox_image = "registry.k8s.io/pause:3.6"
[root@localhost yum.repos.d]#
sed -i "s#k8s.io/pause#aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
https://rzugk9e7.mirror.aliyuncs.com
删除后 Kubernetes Pod 会重新创建 - IT工具网 (coder.work)
cat >/etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://rzugk9e7.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
}
EOF
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
kubeadm init --config=kubeadm.yaml --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification
openssl req -new -sha256
-key dashboard.key
-out dashboard.csr
-subj "/C=CN/ST=Shanghai/L=Shanghai/O=k8s/OU=System/CN=10.106.155.127"
cat > dashboard.cnf << EOF
extensions = san
[san]
keyUsage = digitalSignature
extendedKeyUsage = clientAuth,serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = IP:10.106.155.127,IP:127.0.0.1,DNS:10.106.155.127,DNS:localhost
EOF
openssl x509 -req -sha256
-days 3650
-in dashboard.csr
-out dashboard.crt
-CA ca.crt
-CAkey ca.key
-CAcreateserial
-extfile dashboard.cnf
openssl x509 -in dashboard.crt -noout -text
kubectl create secret generic kubernetes-dashboard-certs
--from-file=tls/dashboard.key
--from-file=tls/dashboard.crt
-n kubernetes-dashboard
eyJhbGciOiJSUzI1NiIsImtpZCI6IjdNSVVJblhrTU96WFVQUU9GVEIzNURva2Y0cy1reW5GaXliLWJjUnREZEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjk1Mjc2NTIzLCJpYXQiOjE2OTUyNzI5MjMsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiNjI2N2RiMDAtNTJlOS00MjdjLWExZWQtYjg3ZWY1YTIwMTViIn19LCJuYmYiOjE2OTUyNzI5MjMsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.m8Nodx0Z5fJnEmtjP2VhZZtVA26cvBv6o_l9FxIDiySeuauYa0CMA24366ape_IJS8yk_dyTI5D6EVXho1jMvpxuZMQ7Wo7GMI8-bk-gJr0ZVyibrNBVVm4yv2o2PbQG6E8dwG5f1Awf4NnqqjePH_DkOT09t-7l9VlQxLLpFnOr0E5E_DyQtHOsAV3dY00iELKt0mo-Y3xjxqxZrx7wpNEA4YmD3eRC0drZunFDw8Ea_UPwCcV4FSeAkhASqmXn7oMf97x5gvMuRbWqlUPwp3m71AQyLGySqLHFqolmiI5lrWOpOv3DPpFECO9rNYWFfev4sKCLF_ZJh7Schj7hVg