Jenkins安装,简单配置自动部署|自动化监控



1、Jenkins 是什么


jenkins是一款流行的开源持续集成工具,广泛应用于项目开发,具有自动化构建、部署等功能:官方文档:https://www.jenkins.io/zh/doc/

2、安装并初始化


(1)安装jenkins
https://www.jenkins.io/zh/download/ 根据自己的服务器操作系统选择安装,比如我是centos就下载该版本的最新包,直接按照官方文档给的命令行安装即可:

 //To use this repository, run the following command:
 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
 sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

//If you've previously imported the key from Jenkins, the rpm --import will fail because you already have a key. Please ignore that and move on.
yum install fontconfig java-11-openjdk /*如果已经安装了JDK这一步就不需要了,版本号尽量对上否则可能出现一些不知道的问题*/
yum install jenkins


(2)修改用户和端口
如果只是本机学习可以跳过该步骤,但是跳过的话需要注意后面的登录名为admin_users是 jenkins,端口为8080

这一步主要是解决其他用户无法访问本服务器8080端口的问题,一般解决方法包含:
(1)修改交换机或者防火墙配置(当然你也可以关闭防火墙)
(2)修改端口信息(这个简单点)
注:修改用户名主要是使用习惯喜欢修改为root,默认用户是jenkins也可以不改

修改方式:

vim /etc/sysconfig/jenkins
修改 JENKINS_USER = "root"
修改 JENKINS_PORT = "8888" /*端口号看个人喜好修改,不重复即可*/

vim /usr/lib/systemd/system/jenkins.service
修改 Environment="JENKINS_PORT=8888"
 
# 重新加载配置文件
systemctl daemon-reload

#重启下, 个别情况下「需要关闭防火墙启动」
systemctl restart jenkins

# 配置防火墙:两种方式
(1)直接关闭防火墙
(2)防火墙添加修改后的端口 8888

比如我使用的云服务器安装jenkins,需要在安全组中添加8888端口规则放行该端口。

(3)UI初始化
直接访问localhost:8888 即可,或者本地IP:8888(没有修改端口就是8080),按照提示cat下 /var/lib/jenkins/secrets/initialAdminPassord 查看管理员密码,或者重启后执行 systemctl ststus jenkins 也可以直接看到密码:

由于jenkins自己安装插件比较慢,所以点击「选择插件来安装」,不勾选任何插件点击安装。然后创建用户和启动jenkins即可。


3、安装插件


主要是修改插件下载地址为国内地址,下载会快些。访问 manage jenkins > plugin manager

(1)初始化插件下载地址
点击 avaliable plugins 等页面完成加载后,服务器输入一下命令替换default.json文件中的地址:

#替换插件下载地址
cd /var/lib/jenkins/updates

# 替换下载地址,就是把http://updates.jenkins-ci.rog/download 替换成清华开源的镜像库,谷歌浏览器替换成百度浏览器地址
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上点击 advance setting 替换Update Site-URL 为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
然后重启jenkins,直接在你的jenkins地址端口后面添加 /reastart 即可: http://ip:port/restart

(2)安装插件
重启后访问 访问 manage jenkins > plugin manager > Avialable plugins 搜索自己想要的插件,勾选后点击下载并重启即可,比如搜索Chinese 选择 localization: Chinese (Simpleified)下载汉化包。


4、权限管理


安转Role-baseed Authorization Strategy插件做账号权限控制,简单的说就是jenkins权限控制使用该插件,利用该插件功能创建不同访问权限的角色role_*,然后创建不同的账号分配对应的角色就可以了,我用不到所以不介绍了。

5、凭证控制


凭证用来存储密文保护的三方应用密码,如数据库、gitlab等、以便与这些三方应用交互。可以理解为jenkins不支持密码加密,所有用一个插件来保证密码的安全性。

(1)安装 Credentials Binding 插件
插件库里面搜索,点击安装就可以在首页安全下面看到凭证管理菜单,凭证管理类型有好多,账号密码、ssh、秘钥、证书等。


(2)配置git仓库凭证
git仓库可以使用ssh、账号密码都行,建议前者:

生成秘钥:然后到~/.ssh目录下查看相关文件,一般来说ssh 密钥会包含id_rsa和id_rsa.pub两个文件,分别表示生成的私钥和公钥。

ssh-keygen -t rsa -C "your_email"
1
在git上配置该公钥,jenkins 添加凭证配置私钥,路径如下:


我这里是配置的全局凭证,你也可以在System这个目录中添加不同的domin(领域),如给某个登录账号配置凭证。

Kind选择ssh;Scope作用范围按需选择;ID系统生成不用填写;Desc:描述信息按需填写;Username:随便填用于识别凭证的,选中Enter directly 点击Add 在这里填写私钥,点击Create即可。


6、Jenkins配置安装JDK和Maven


(1)安装和本地配置
服务器部署要安装JDK和Maven,自己百度安装方法,这里提供maven安装:

华为镜像https://repo.huaweicloud.com/apache/maven/maven-3/3.6.3/binaries/下载Maven包上传服务器,这里以tar.gz 包做安装介绍:解压后就可以用了,最好是将解压后的maven文件放在你自己创建的目录中,防止后面找不到:

tar -xzf 你的包名称  #解压
mkdir -p /opt/maven  #创建maven目录
mv ${你解压后的包} /opt/maven #将解压的包放在你创建的maven目录中

配置环境变量:

vim /etc/profile

#文件中添加
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk #这里配置的是你安装的jdk地址
export MAVEN_HOME = /opt/maven #你的mavne目录
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin #在PATH后面添加java和maven的bin目录

source /etc/profile #配置生效

mvn -V #执行下命令看配置是否生效,生效会回显maven版本信息,否则估计是路径配置的不对

(2)配置Jenkins全局工具配置
配置Jenkins 全局工具,关联JDK和Maven:下面地址中配置JDK和Maven的地址,因为我们已经安装过了,所以就直接填写地址就行。
Dashboard>Manage Jenkins>Global Tool Configuration


(3)Jenkins配置系统设置
这一步是跟本地配置环境变量一样,在Jenkins上配置环境变量,让jenkins中也能够直接全局执行maven等命令。

配置地址如下,新增环境变量,配置项与之前在本机上配置的方式一致:新增JAVA_HOME,MAVEN_HOME,PATH+EXRRA。

Value值是你本机jdk、maven安装地址,PATH+EXRRA表示的是在jenkins全局变量后面追加变量的意思,固定值,这里在后面追加MAVEN的执行路径,就是$MAVEN_HOME/bin 即我们的maven目录下的bin目录。


7、熟悉项目配置项


jenkins项目风格常见有3种类:

自由风格(FreeeStyle)
Maven项目(Maven)
流水线(Pipeline)
三种项目风格对于实现持续集成流程是一样的,只是配置方式不一样罢了:

自由风格是执行shell脚本,Maven文件是执行pom文件(所以需要填写pom地址),流水线与shell脚本类似,不过有自己的脚本语言但是也是最为灵活的。

以自由风格来说明:

(1)新建一个自由风格项目
首页New 一个项目,选择自由风格即可

(2)配置General信息
填写描述信息,下面勾选项非必选,比如第1个表示构建的包要保存多久,最多保存几个;第2个表示参数化构建,就是在构建前你可以从局外传入一些参数…持续集成自动化中使用第一个会多一点,毕竟需要看之前的结果。


(3)配置Source Code Management
选择git仓库,RepositoryURL配置ssh,Credentials选择之前配置的凭证,代码分支为master


(4)配置构建 Triggers
配置构建时机:一般第1种和第3种用的多一些,前者用于开发代码部署,后者用于自动化定时巡检

Trigger builds remotely:一般用于代码更新自动部署,低版本的jenkins没有这个,需要安装gitHub Hook插件。先在git上配置Hook,即存在代码变更时发送请求给jenkins,请求地址就是下方展示的URL,git发送时机是可配置的(PR还是merge时触发等),这个需要用户自己配置。
build after…:表示在jenkins其他项目之后构建。
build periodically:定时构建,配置cron表达式。
Poll SCM:轮询构建,定时扫描git上代码是否存在变更,存在即构建,比较耗性能不推荐这样,但方便。

(5)Build environment
从来没有用过…

(6)Build Steps
构建步骤,一般使用shell脚本多一些。比如构建(编译打包)

mvn -X clean package #-X是为了查看更多信息

(7)Post-build Actions
配置构建后的操作,比如可以将上一步构建出来的war包部署到tomcat中。比如构建成功后发送邮件给指定邮箱

构建后部署
下载插件 Deploy to Container,post-build Actions中选择Deploy war/ear to container配置war包地址:target/*.war配置容器container:这里需要添加凭证,可以用tomcat账号密码认证,然后填写tomcat 地址就可以了。


部署后发送邮件
-post-build Actions中选择E-mail Notification,填写收件人邮箱地址就可以了,需要注意发送邮件我们需要在全局配置中配置发件人邮箱


配置发件人邮箱:
需要给到邮箱SMTP服务端口,邮箱后缀,是否认证,以及默认的回复信息配置完成后可以勾选Test configuration sending test e-mial验证下配置是否生效。


8、创建项目


实际第7步骤中已经说的差不多了,这里我们在简单的说明下:

(1)部署后端项目
配置git 拉取源码
构建时机:简单粗暴直接 poll SCM 轮询构建
构建:直接采用shell脚本形式执行 mvn clean package就行了
部署:个人后端项目也可以直接shell脚本 java -jar *.jar的方式运行,所以就不要安装deploy to contain插件了,当前不推荐这样做,这样说明只是告诉大家,流程就是这样,实现方式有很多种,比如你的脚本编写能力很强,还管什么插件一切都是脚本控制(实际pipeline项目就是这样编写脚本方式实现)
ps aux |grep *.jar |grep -v grep |awk '{print $2}' |xargs kill -9 // 删除之前的java进程
nohup java -jar *.jar >/home/logs/zdz.out 2>&1 & // 运行当前jar包

(2)配置自动化巡检
配置git 拉取源码
构建时机:定时触发,比如每天每小时触发一次 * */1 * * *
构建:自动化不需要构建,直接执行 mvn clean test -Dxml=your_xml_name -Ptest ,不清楚的百度下mvn执行自动化
查看结果:这里需要安装TestNg Result插件并配置下就可以在jenkins上查看自动化执行结果了,也可行将结果邮件推送。作者不是很喜欢这种方式,所以直接在自动化代码中新增了一个TestNg的listener收集自动化结果上报,失败了就会直接推送邮箱或者聊天群。毕竟写java比配置jenkins简单,灵活的也很高。


9、Pipeline


简单说下流水线的配置,需要安装Pipeline插件,pipeline语法有两种形式:声明式(pipeline开头,推荐使用),脚本式(node开头),两种形式编写方式一样,这里以声明式实现自动化巡检来说明(持续部署实际是一样的方式,都可以shell脚本形式实现):

jenkins提供了在线的脚本生成器:Jenkins_url/job/test3_pipeline/pipeline-syntax/ 这里还有jenkins的一些全局变量。

#可以定义一些方法
#根据git获取仓库名称
def getRepoName(String repo) {
    return repo.substring(repo.lastIndexOf("/") + 1, repo.lastIndexOf(".git"))
}

#按照分支拉取代码,如果已经存在就pull分支最新代码
def git_no_workspace(String repo, String branch) {
    def repoName = getRepoName(repo)
    sh """
        if [[ -d ${repoName} ]];then
            cd ${repoName}
            git reset --hard
            git fetch --all
            git checkout ${branch}
            git pull origin ${branch}
            git log -2
        else
            git clone ${repo} -b ${branch}
            cd ${repoName}
            git log -2
            git branch
        fi
    """
}


#定义你的仓库信息
#测试仓库地址
def test_code_url = "ssh:lalalallalalal"
# 代码分支
def test_code_branch = "master"

def test_mvn_cmd = "mvn clean test -Dxml=testxml -Pprod -Dmaven.test.failure.ignore=true"

#jenkins运行环境的一些配置
pipeline {
    agent any

    tools {
        # 安装一些工具
    }
    stages {
        #stage表示环节,用户可以随意命名,会在执行时用于展示
        stage('拉取代码') {
          
           #步骤,该环节中的执行步骤,步骤可以是多个
            steps {
                 #拉取源码
                 git_no_workspace(test_code_url, test_code_branch)
            }
        }
          stage('执行用例') {
            steps {
                 #获取代码地址
                def repoName = getRepoName(test_code_url)
              
                  #进入代码目录执行mvn命令
                dir("${repoName}") {
                  try {
                    sh "pwd;${test_mvn_cmd}"
                  } finally {
                    
                    #jenkins存在一些全局变量,比如JOB_URL,currentBuild.currentResult 之类的,其余变量自行百度
                    if (currentBuild.currentResult != "SUCCESS"){
                      #比如执行失败后执行一些脚本
                      #git clone 脚本仓库
                      #sh " python3 ./脚本地址 '脚本参数'
                    }
                   
                  }
            }
          
            post {
                #If Maven was able to run the tests, even if some of the test
                #failed, record the test results and archive the jar file.
                success {
                    junit '**/target/surefire-reports/TEST-*.xml'
                    archiveArtifacts 'target/*.jar'
                }
            }
          
        }
    }
}


10、执行


配置完成后,项目中点击build Now,即可开始执行,点击下方具体项目可查看执行日志信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值