Jenkins从放弃到入门:摆设、配置与应用

打印 上一主题 下一主题

主题 829|帖子 829|积分 2489

目次
Jenkins详解
一、Jenkins先容
1、Jenkins 功能
2、Jenkins 概念
3、Jenkins 目的
4、Jenkins 特性
5、产物发布流程
二、Jenkins CI/CD 流程
三、摆设Jenkins
git
1、jenkins 安装
yum 安装 jenkins *jenkins 依靠 java 环境 #注意2.346之后的版本不再支持jdk8
2、配置文件
1、查询 yum 下载 Jenkins 安装的文件
2、修改配置文件
3、启动 jenkins
3、验证安装
3、jenkins配置(web页面)
1、管理员密码获取
2、安装插件 (选择在线安装)
1、修改 /var/lib/jenkins/updates/default.json
2、 修改/var/lib/jenkins/hudson.model.UpdateCenter.xml
3、创建第一个管理员用户
4、url 配置
5、安装完成
6、配置 jdk、git、maven
7、jenkins 下载插件失败处置处罚办法
四、使用Jenkins
1、Jenkins 用户权限管理
1、 用户管理配景
2、 安装用户管理插件
3、 开启该插件功能
4、 验证用户管理
1、策略改回原来的(全局安全配置)
2、开启允许用户注册(全局安全配置)
3、注册一个新用户
4、登录之后,其默认就是管理员用户,可以举行任何操纵
5、开启 Role-Based Strategy
6、重新登录新创建 test1 用户,显示已经没有任何权限了
5、 权限分别
1、Manage Roles(管理脚色)
1、Global roles
2、Item roles
2、Assigin roles(分配脚色)
1、给予test用户分配 user 脚色
2、针对指定用户分配项目脚色(一般最常用的就是针对不同用户举行项目脚色分配)
2、Jenkins 参数化构建
1、 参数化构建配景
2、安装插件
1、项目配置
2、构建选择分支举行测试,添加branch参数 git配置中选$branch参数
3、参数化配置已经见效
3、Git 插件
1、安装插件 Git Parameter
2、举行配置
3、Jenkins pipeline
1、概览
2、安装
3、实操
1、新建任务
2、编写 pipeline 脚本
3、构建测试
4、Jenkins 构建邮件状态关照
1、 前提
2、 底子配置


Jenkins详解

一、Jenkins先容

简单汗青


Jenkins 的前身是 Hudson,一个接纳 Java 编写的开源连续集成工具。Hudson 项目由 Sun 公司在 2004 年启动,2005 年发布了第一个版本,并逐渐在连续集成工具领域占据主导地位。2008 年,Hudson 在 JavaOne 大会上获得了杜克选择大奖(Duke's Choice Award)。
2010 年 11 月,Oracle 收购 Sun 后,Hudson 的全部权标题引发了争议。紧张项目贡献者和 Oracle 之间在“Hudson”商标名称上存在分歧。2011 年 1 月,社区投票决定将项目名称改为“Jenkins”,并于 1 月 29 日获得答应,正式创建了 Jenkins 项目。
Oracle 继承开发 Hudson,认为 Jenkins 只是一个分支。随着时间的推移,Jenkins 社区迅速壮大,到 2013 年 12 月,GitHub 上的 Jenkins 项目成员远超 Hudson。现在,Jenkins 已全面超越 Hudson,成为连续集成工具领域的向导者。
为什么 Jenkins 更受接待
由开发者主导、面向开发者

首先,曾经是Hudson开发职员中的99%都转向了Jenkins的开发,其中包罗最初的创建者川口清子(Kohsuke Kawaguchi)。他独自写了大部分代码,而且他的履历是Hudson各种高级特性的关键泉源。Jenkins的开发社区更活跃。所以对很多人而言,从血统上看Hudson是后娘养的,Jenkins才是亲生的!
治理和社区


  • Jenkins 开发社区管理开放,设有独立董事会,定期举行治理会议并征求公众意见,全部代码捐赠给公共长处软件构造(SPI),确保社区连续开放。
稳固性


  • Jenkins 社区不断贡献新功能和改进,定期发布恒久支持版本,确保稳固性和可靠性。
丰富的插件生态


  • Jenkins 支持凌驾 1000 个插件,覆盖构建、摆设、测试等各个环节,使其成为开发生命周期的焦点工具。
1、Jenkins 功能

Jenkins 是一个开源的主动化服务器,可以通过插件支持构建、摆设和主动化的各个方面。它的紧张功能包罗:


  • 连续集成/连续交付(CI/CD):主动化的软件版本发布和测试项目,确保每次代码变更都能快速且可靠地集成和交付。
  • 构建主动化:支持各种构建工具和语言,如 Maven、Gradle、Ant、以及 shell 脚本等。
  • 测试主动化:能够集成各种测试工具和框架,如 JUnit、TestNG 等,主动化实行测试并生成报告。
  • 摆设主动化:主动化应用步伐的摆设过程,可以集成 Docker、Kubernetes 等工具。
  • 监控和报告:监控外部调用的实行工作,生成具体的构建和测试报告,资助快速定位和处置处罚标题。
2、Jenkins 概念

Jenkins是一个功能强大的应用步伐,允许连续集成和连续交付项目,旨在实现连续集成和连续交付。通过丰富的插件生态体系,Jenkins 可以集成各种构建、测试和摆设工具,满足不同团队的需求。其紧张概念包罗:


  • Pipeline(流水线):定义构建、测试和摆设的过程,可以通过代码(Jenkinsfile)配置。
  • Node(节点):实行构建任务的机器,可以是主节点(Master)或从节点(Agent)。
  • Job(任务):具体的构建任务,可以配置多个步骤和触发条件。
  • Plugin(插件):扩展 Jenkins 功能的组件,支持多种第三方工具和平台。
3、Jenkins 目的



  • 连续、主动地构建和测试软件项目:每次代码变更后,主动触发构建和测试,确保代码的连续集成和交付。


  • 监控软件开发流程:通过监控构建和测试过程,快速定位和处置处罚标题,提高开发效率。
4、Jenkins 特性



  • 开源的java语言开发连续集成工具,支持CI,CD。


  • 易于安装摆设配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装摆设,可方便web界面配置管理。


  • 消息关照及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail关照,生成JUnit/TestNG测试报告。


  • 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。


  • 文件辨认:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。


  • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
5、产物发布流程

产物计划成型 -> 开发职员开发代码 -> 测试职员测试功能 -> 运维职员发布上线


  • 连续集成(Continuous integration,简称CI):每次代码变更后,主动构建和测试。


  • 连续交付(Continuous delivery):在 CI 的底子上,主动化摆设到预生产环境,确保代码随时可发布。


  • 连续摆设(continuous deployment):在 CD 的底子上,进一步主动化摆设到生产环境,实现无缝发布。
二、Jenkins CI/CD 流程

说明:这张图稍微更形象一点,上线之前先把代码git到版本仓库,然后通过Jenkins将Java项目通过maven去构建,这是在非容器之前,典范的主动化的一个版本上线流程。那它有哪些标题呢?
如:它的测试环境,预生产环境,测试环境。会存在肯定的兼容性标题 (环境之间会有肯定的差异)


说明:阿里云镜像仓库,把环境打包为一个镜像,通过镜像的方式来摆设。
三、摆设Jenkins

IP主机名10.1.0.25k8s-master-node1 git

linux(centos7.9)下载安装git2.32.0_git下载 linux-CSDN博客
  1. #拉取代码
  2. [root@k8s-master-node1 ~]# yum install -y git   #首先还是安装git
  3. [root@k8s-master-node1 ~]# mkdir -p test
  4. [root@k8s-master-node1 ~]# cd test
  5. [root@k8s-master-node1 ~]# git clone git@xxx.xx.xx.x:/xx/xx/xx/xx  ##测试clone仓库
  6. #push 测试
  7. [root@k8s-master-node1 ~]# touch index.html
  8. [root@k8s-master-node1 ~]# git add .
  9. [root@k8s-master-node1 ~]# git commit -m "test"
  10. #第一次有报错警告,让配置邮箱和姓名。配置一下即可,或者直接执行给出的命令执行。
  11. [root@k8s-master-node1 ~]# git push origin master #提交到主分支(默认分支)
复制代码
1、jenkins 安装

官网: https://jenkins.io
插件:Index of /download/plugins
yum 安装 jenkins *jenkins 依靠 java 环境 #注意2.346之后的版本不再支持jdk8

  1. 卸载旧jenkins
  2. #查询以前是否安装jenkins
  3. rpm -qa |grep jenkins
  4. #卸载 jenkins
  5. yum -y remove jenkins  
  6. rpm -e jenkins
  7. #彻底删除jenkins残留文件
  8. find / -iname jenkins | xargs -n 1000 rm -rf
  9. # 导入jenkins源
  10. wget -O /etc/yum.repos.d/jenkins.repo     https://pkg.jenkins.io/redhat/jenkins.repo
  11. # 导入jenkins官方证书
  12. rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key
  13. #安装jdk11
  14. yum install fontconfig java-17-openjdk -y
  15. wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
  16. #有点慢,可以在Windows上提前下载导入。
  17. sudo yum -y install ./jdk-17_linux-x64_bin.rpm
  18. java -version
  19. #安装jenkins
  20. yum install jenkins -y
  21. #设置开机自启动
  22. systemctl enable jenkins
  23. #rpm安装
  24. wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.346.1-1.1.noarch.rpm
  25. #安装
  26. rpm -ivh jenkins-2.346.1-1.1.noarch.rpm  
复制代码
2、配置文件

1、查询 yum 下载 Jenkins 安装的文件

  1. [root@k8s-master-node1 ~]# rpm -ql jenkins
  2. /usr/bin/jenkins    # Jenkins 服务二进制文件
  3. /usr/lib/systemd/system/jenkins.service #systemd 服务单元文件,定义Jenkins启动参数
  4. /usr/share/java/jenkins.war # war 包
  5. /var/cache/jenkins  # war包解压目录 jenkins网页代码目录
  6. /var/lib/jenkins  # jenkins 工作目录
复制代码
  1. [/code] [size=1]2、修改配置文件[/size]
  2. [b]配置文件说明[/b]:
  3. [code][root@k8s-master-node1 ~]# grep -Ev "^(#|$)" /usr/lib/systemd/system/jenkins.service
  4. [Unit]
  5. Description=Jenkins Continuous Integration Server    # Jenkins 持续集成服务器的描述
  6. Requires=network.target                              # 依赖于网络服务,表示网络必须先启动
  7. After=network.target                                 # 在网络服务启动后再启动 Jenkins
  8. [Service]
  9. Type=notify                                          # 服务类型为 notify,表示服务启动后会通知
  10. NotifyAccess=main                                    # 仅监听主进程的通知
  11. ExecStart=/usr/bin/jenkins                           # 启动 Jenkins 的命令
  12. Restart=on-failure                                   # 在服务失败时自动重启
  13. SuccessExitStatus=143                                # 指定退出状态码 143 为正常退出
  14. User=root                                            # 以 root 用户身份运行 Jenkins
  15. Group=root                                           # 以 root 用户组身份运行 Jenkins
  16. Environment="JENKINS_HOME=/var/lib/jenkins"          # 设置 Jenkins 主目录的环境变量
  17. WorkingDirectory=/var/lib/jenkins                    # 指定工作目录为 /var/lib/jenkins
  18. Environment="JENKINS_WEBROOT=%C/jenkins/war"         # 设置 Jenkins Web 根目录的环境变量
  19. Environment="JAVA_OPTS=-Djava.awt.headless=true"     # 设置 Java 选项为无头模式
  20. Environment="JENKINS_PORT=3333"                      # 设置 Jenkins 监听的端口为 3333
  21. [Install]
  22. WantedBy=multi-user.target                           # 在多用户目标(运行级别)下启动 Jenkins
复制代码
3、启动 jenkins



  • 启动之前修改以 root 用户、群组身份运行 Jenkins, 确保反面 Jenkins 有权限使用 Docker 服务。

接下来启动:
  1. [root@k8s-master-node1 ~]# systemctl start jenkins
复制代码
3、验证安装

  1. [root@k8s-master-node1 /data]# ps -ef|grep jenkins
  2. root      3523  7329  0 14:04 pts/0    00:00:00 grep --color=auto jenkins
  3. jenkins  12697     1  7 14:01 ?        00:00:15 /usr/local/java/jdk1.8.0_121/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
复制代码
  1. [/code] [size=2]3、jenkins配置(web页面)[/size]
  2. [size=1]1、管理员密码获取[/size]
  3. [align=center][img=1200,1059]https://i-blog.csdnimg.cn/blog_migrate/76a02f36a29b336fd488e6a0142e78fb.png[/img][/align]
  4. [code][root@k8s-master-node1 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
复制代码
2、安装插件 (选择在线安装)



如果接纳最新版的 一般不一会出现这个情况

出现离线安装办理方法:
1、修改 /var/lib/jenkins/updates/default.json

jenkins 在下载插件之前会先查抄网络毗连,其会读取这个文件中的网址。默认是访问谷歌,肯定监测失败,所以将图下的google改为www.baidu.com即可,更改完重启服务。

2、 修改/var/lib/jenkins/hudson.model.UpdateCenter.xml

该文件为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
在修复完之后,我们发现离线标题已经办理
选择安装推荐的插件:

3、创建第一个管理员用户


4、url 配置

之前版本没有这个选项,这里默认即可:

5、安装完成

出现如下页面时,表示安装完成



6、配置 jdk、git、maven

体系管理->全局工具配置

jdk:可以主动安装,但是选择当地安装的适合项目jdk版本,写入我们jdk的路径即可

git:

maven:

7、jenkins 下载插件失败处置处罚办法

jenkins 下载插件失败,提示:
  1. java.io.IOException: Downloaded file /app/jenkins_home/plugins/jacoco.jpi.tmp does not match expected SHA-1, expected 'CtK02wHdFOxTutqhUQzmue6uvpg=', actual 'YGO05utKyaaFzpGCgCE95GS0WsU='
  2.     at hudson.model.UpdateCenter.verifyChecksums(UpdateCenter.java:1783)
  3.     at hudson.model.UpdateCenter.access$1100(UpdateCenter.java:147)
  4.     at hudson.model.UpdateCenter$InstallationJob.replace(UpdateCenter.java:1934)
  5.     at hudson.model.UpdateCenter$UpdateCenterConfiguration.install(UpdateCenter.java:1178)
  6.     at hudson.model.UpdateCenter$DownloadJob._run(UpdateCenter.java:1653)
  7.     at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:1848)
  8.     at hudson.model.UpdateCenter$DownloadJob.run(UpdateCenter.java:1624)
  9.     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  10.     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  11.     at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:110)
  12.     at java.lang.Thread.run(Thread.java:745)
复制代码
中国源的标题。需要换个源就可,换源方法:
jenkins->体系管理->管理插件->高级 选择升级站点
把:http://updates.jenkins-ci.org/update-center.json
换成:http://mirror.esuni.jp/jenkins/updates/update-center.json
镜像地点查询:
http://mirrors.jenkins-ci.org/status.html
四、使用Jenkins

1、Jenkins 用户权限管理

1、 用户管理配景

针对开发、运维、测试针对不同脚色举行不同权限分别,
基于插件: Role-based Authorization Strategy ,Authorize Project 来实现。
2、 安装用户管理插件

安装该插件:
体系管理->管理插件-可选插件->搜索该插件选中直接安装即可。


3、 开启该插件功能

体系管理->全局安全设置-授权策略->选中该插件功能即可->保存

4、 验证用户管理

关闭用户管理功能来举行实践测试
1、策略改回原来的(全局安全配置)


2、开启允许用户注册(全局安全配置)


3、注册一个新用户


4、登录之后,其默认就是管理员用户,可以举行任何操纵


5、开启 Role-Based Strategy

6、重新登录新创建 test1 用户,显示已经没有任何权限了


5、 权限分别

安装 Role-Based Strategy 插件后,体系管理 中多了如图下所示的一个功能,用户权限的分别就是靠他来做的。


1、Manage Roles(管理脚色)



  • Manage Roles:管理脚色,相称于针对脚色赋予不同权限,然后在将该脚色分配给用户。脚色就相称于一个组。其里面又有Global roles(全局)、Project roles(项目)、Slave roles(),来举行不同分别。
默认如图下所示:

1、Global roles

默认是有一个admin用户的,是全部权限都有的,全部权限都是勾选了的。
接下来我们来添加一个脚色:user

给其一个读的权限。
2、Item roles



  • roles to add:表示项目脚色


  • Pattern:是用来做正则匹配的(匹配的内容是Job(项目名)),比如说根据正则匹配到的项目项目脚色就都有权限;
接下来新建一个island 项目脚色,改项目脚色一般给其构建、取消、读取、读取空间权限,一般配置这4个即可




  • Agent roles (署理脚色):节点相关的权限


  • roles to add:表示项目脚色


  • Pattern:是用来做正则匹配的(匹配的内容是节点(Agent节点)),比如说根据正则匹配到的项目项目脚色就都有权限;

2、Assigin roles(分配脚色)

1、给予test用户分配 user 脚色

这样其就有 manage roles 中刚才创建的user脚色的权限了。

此时再去看 test1用户,已有查看的权限了

2、针对指定用户分配项目脚色(一般最常用的就是针对不同用户举行项目脚色分配)

比如将test用户分配有 island 项目脚色,这样其就可以有刚才我们创建的island 项目脚色正则匹配到的项目的权限了。

2、Jenkins 参数化构建

1、 参数化构建配景

如果只是简单的构建,jenkins自己默认的插件可以做,但是如果我们想要在构建过程中有更多功能,比如说:选择性构建、传参、项目指定变量等等其他功能,底子的参数化构建可以实现一些简单功能,但是要想使用更多功能这时候我们就需要借助参数化构建来实现交互的功能。此处我们来借助以下插件来举行实现:


  • Extended Choice Parameter(更丰富的参数化构建插件)


  • Git Parameter
2、安装插件

首先还是安装该插件,去管理插件里面举行安装 Extended Choice Parameter


1、项目配置


2、构建选择分支举行测试,添加branch参数 git配置中选$branch参数



3、参数化配置已经见效


3、Git 插件

再用 git 时使用该插件是非常方便的。
1、安装插件 Git Parameter


2、举行配置

在配置之前有一个坑,当我们在配置git中写了远端地点后,会有报错:
这个是和前面docker报错是一样的
这是由于 jenkins 我们 yum 装的运行用户是 jenkins 用户,此处是 jenkins 用户去 git 仓库举行拉取,而 jenkins 用户的话默认是 /bin/false 的,不但不能登录,也没有 git 命令权限,所以肯定是失败的。
办理此标题两种办法:


  • 更改jenkins用户为root用户;


  • 更改jenkins用户为正常的普通用户/bin/bash,将其的公钥加入到git服务器的git用户中。
此处暂时先用第一种办理办法,更改 jenkins 的运行用户为 root 用户,通过如下方式举行更改:



  • 将/usr/lib/systemd/system/docker.service;文件中user和group改为root


  • 然后再重启即可。
3、Jenkins pipeline

1、概览


2、安装

在对 jenkins 举行初始化安装时,默认已经安装了 jenkins 的相关插件,如下图所示:

3、实操

1、新建任务


2、编写 pipeline 脚本


可以借助流水线语法去做。
roads流水线脚本:
  1. pipeline {
  2.     agent any
  3.     // 参数化
  4.   parameters {
  5.     //  string defaultValue: '2.0.0', description: '选择版本', name: 'version'
  6.      gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH'
  7.      string(name: 'version', defaultValue: '2.0.0', description: '选择版本')
  8. }
  9.     tools {
  10.         jdk 'jdk1.8'   
  11.         maven 'maven-3.9.6'
  12.     }
  13.     stages {
  14.         stage('pull code') {
  15.             steps {
  16.                 cleanWs() //清空workspace
  17.                 echo 'pull start'
  18.                 git branch: "${params.BRANCH}",  credentialsId: 'xxxxxxxxxxxxxxxxxxxx', url: 'xxxxxxxxxxxxxxxxxxxxxxx'
  19.                 echo 'pull end'
  20.             }
  21.         }
  22.         stage('mvn install xxxxxxxxxx') {
  23.             steps {
  24.                
  25.                 echo 'build xxxxxxxx'
  26.                 dir('xxxxxxxx') {
  27.                 sh "mvn -v"
  28.                 sh "mvn clean install -Dmaven.test.skip=true"
  29.                 }
  30.             }
  31.         }
  32.         stage('mvn install xxxxxxxxxx') {
  33.             steps {      
  34.                 echo 'build xxxxxxxx'
  35.                 dir('xxxxxxxxxxx') {
  36.                 sh "mvn clean install -Dmaven.test.skip=true"
  37.                 }
  38.             }
  39.         }
  40.         stage('mvn install xxxxx') {
  41.             steps {
  42.                 echo 'build xxxxxxxxx'
  43.                
  44.                 dir('xxxxxxxx') {
  45.                 sh "mvn clean install -Dmaven.test.skip=true"
  46.                 }   
  47.             }
  48.         }
  49.         stage('mvn install island-opple') {
  50.             steps {
  51.                 echo 'build island-opple'
  52.                 sh "mvn clean install -Dmaven.test.skip=true"
  53.             }
  54.         }
  55.         // stage('login docker') {
  56.         //     steps {
  57.         //         echo 'start login docker'
  58.         //         sh "docker login --username=xxxxxxxxxxxx --password=xxxxxxxxx registry.cn-hangzhou.aliyuncs.com"
  59.         //     }
  60.         }
  61.         stage('make image and push') {
  62.             steps {
  63.                 echo 'start build image'
  64.                 script {
  65.                     def selectedProjects = "${project_name}".split(',')
  66.                     if(selectedProjects.size()>0){
  67.                         for(int i=0;i<selectedProjects.size();i++){
  68.                         aaa = selectedProjects[i].replace(""", "")
  69.                         dir(aaa){
  70.                             sh "pwd"
  71.                             sh '''
  72.                             sed -i "1c FROM xxxxxxxxxxxxxxxxxx" Dockerfile
  73.                             '''
  74.                             sh "mvn -Ddocker.image.tag=${version} dockerfile:build"
  75.                             sh '''
  76.                             sleep 3
  77.                             image=$(docker images | sed -n '2p' | awk '{print $1":"$2}')
  78.                             echo $image
  79.                             '''
  80.                             // docker push $image
  81.                              }
  82.                            
  83.                         }
  84.                     }
  85.                 }
  86.             }
  87.         }
  88.         
  89.         
  90.     }
  91. }
复制代码
3、构建测试

具体配置详解请参考 Pipeline
4、Jenkins 构建邮件状态关照

1、 前提

前提:服务器开启邮箱服务
(如果启动失败修改/etc/postfix/main.cf,确保 inet_interfaces 参数精确设置。默认是inet_interfaces = localhost,
如果你的服务器只想监听 IPv4 地点,可以将该参数设置为 inet_interfaces = 127.0.0.1
如果想监听全部地点(包罗 IPv4 和 IPv6),可以将其设置为 inet_interfaces = all。


2、 底子配置

需要安装一个插件:
插件: Email Extension Plugin
举行配置:
体系管理->体系设置->相关配置如下图:

可以在此处举行测试发送!检验配置是否精确





未完待续。。。。。。。。。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表