Jenkins笔记02-Jenkins安装和持续集成环境配置

持续集成流程说明

为了演示完整的步骤,我们需要准备服务器:代码托管服务器、持续集成服务器、测试服务器。

  1. 首先,开发人员每天进行代码提交,提交到Git仓库
  2. 然后,Jenkins作为持续集成工具,使用Git工具到Git仓库拉取代码到集成服务器,再配合JDK,Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程
  3. 最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用

GitLab代码托管服务安装

GitLab简介

GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,简单来说可把GitLab看作个人版的GitHub。

GitLab安装

# 安装相关依赖
[root@localhost ~]# yum -y install policycoreutils openssh-server openssh-clients postfix
# 启动ssh服务,设置开机启动
[root@localhost ~]# systemctl enable sshd && sudo systemctl start sshd
# 设置postfix开机自启,并启动postfix支持gitlab发信功能
[root@localhost ~]# systemctl enable postfix && systemctl start postfix
# 关闭防火墙
[root@localhost ~]# systemctl disable firewalld
# 在线下载安装包
[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm --no-check-certificate
# 安装GitLab
[root@localhost ~]# rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
# 提示错误,说是缺少依赖,那我们安装依赖,如果没有报错,就不需要执行
[root@localhost ~]# yum -y install policycoreutils-python
# 再次执行安装命令,稍微等一会儿,就会提示安装成功了,在它给出的信息里,告诉我们,要去设置external_url并启动服务才能访问
[root@localhost ~]# rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
# 修改域名和端口
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
# 重载配置启动GitLab,reconfigure操作需要等待5分钟左右
[root@localhost ~]# gitlab-ctl reconfigure
[root@localhost ~]# gitlab-ctl restart

修改后的gitlab.rb文件(只展示改动部分):

external_url 'http://192.168.216.123:8081'
nginx['listen_port'] = 8081

浏览器访问http://192.168.216.123:8081/即可看到我们的GitLab服务了。首次登录需要先设置密码,GitLab提供的用户名是root。修改密码后,就可以进到GitLab的界面了。

GitLab添加组、创建用户、创建项目

创建组

点击Create a group就可以创建一个组,这里我取名叫test1_group,再点击Create group按钮。

创建项目

进入刚刚创建的test1_group,再点击New project创建项目,取名test1_project,最后点击Create project按钮创建项目。

创建用户

点击最上面的Admin Area,再点击Users,就进到了用户界面,这里可以添加用户,输入必要信息,其他保持默认即可,点击创建即可。在新创建用户界面右上角有个Edit,可以设置用户的密码。

将新建用户添加到组里

打开刚刚创建的test1_group,点击左侧的Members,在搜索框里搜索刚刚创建的用户,后面有个权限设置,这里无关紧要,后面会说,随便选一个,点击Add to group即可将用户加到组里。

  • Guest:可以创建issue、发表评论,不能读写版本库
  • Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
  • Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
  • Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限
  • Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限

源码上传到GitLab仓库

  1. 首先在本地IDEA里创建一个Web项目,只有一个index.html页面
  2. 开启版本控制:点击VCS-Enable Version Control Integration,选择Git
  3. 在项目上右键,选择Git-Add,将代码提交到缓存区
  4. 点击Commit,将代码提交到本地仓库
  5. 此时会提示定义一个远程仓库,我们点击Define remote
  6. 来到GitLab,找到之前创建的test1_project,点击右上角Clone,选择Clone with HTTP的地址,粘贴到IDEA中,最后点击Push
  7. 来到GitLab,打开test1_project项目就可以看到刚刚提交的文件了

Jenkins安装

Jenkins依赖Java环境,所以需要安装JDK,自行下载JDK。

# 解压jdk-8u231-linux-x64.tar.gz到/opt/module/下
[root@localhost ~]# tar -xzvf /opt/software/jdk-8u231-linux-x64.tar.gz -C /opt/module/
# 设置环境变量
[root@localhost ~]# vim /etc/profile
# 添加如下内容到最后
# JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_231
export PATH=$PATH:$JAVA_HOME/bin
# 刷新环境变量
[root@localhost /]# source /etc/profile
# 测试Java环境
[root@localhost /]# java -version
# 下载Jenkins,可能会很慢,我用其他工具下载下来后,再上传到服务器上的
[root@localhost software]# wget http://archives.jenkins-ci.org/redhat-stable/jenkins-2.190.3-1.1.noarch.rpm
# 安装Jenkins
[root@localhost software]# rpm -ivh jenkins-2.190.3-1.1.noarch.rpm
# 修改Jenkins配置,将JENKINS_USER改成root,JENKINS_PORT改成8083(8082端口被GitLab的一个服务占用了)
[root@localhost software]# vim /etc/sysconfig/jenkins
# 告诉jenkins服务,Java服务的位置,将“/opt/module/jdk1.8.0_231/bin/java”加到candidates里面
[root@localhost software]# vim /etc/init.d/jenkins
# 重载jenkins启动配置
[root@localhost software]# systemctl daemon-reload
# 启动Jenkins
[root@localhost software]# systemctl start jenkins

浏览器访问http://192.168.216.123:8083/即可看到Jenkins的界面了,按照提示,需要解锁Jenkins,通过这个地址/var/lib/jenkins/secrets/initialAdminPassword获取密码,输入密码后,因为网络问题,安装插件会很耗时,这里跳过插件安装(选择“选择插件来安装”,然后选择“无”),后面有提速安装方式。
创建一个管理员账户,保存并完成,此时就可以看到熟悉的Jenkins界面了。

Jenkins插件管理

Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码,使用Maven构建项目等功能需要依靠插件完成。
自带的插件下载是国外的地址,可能会比较慢,所以我们换成国内的插件下载地址:Jenkins-Manage Jenkins-Manage Plugins-Available,这一步是把Jenkins官方插件列表缓存到本地,然后修改下载地址。

[root@localhost ~]# cd /var/lib/jenkins/updates/
[root@localhost updates]# sed -i 's/http:\/\/updates.jenkinsci.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

点击Advanced,修改Update Site为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json,重启Jenkins服务,此时插件配置就做好了,下一步就是下载插件了。

Jenkins用户权限管理

我们可以利用Role-based Authorization Strategy插件来管理Jenkins用户,首先就是安装Role-based Authorization Strategy插件了,这时候报错了,提示需要升级才能安装,好吧,那就先在Jenkins界面给它自动升级一下,升级后会提示自动重启。升级完成后,需要重新执行上面的替换操作,并修改Advanced里的Update Site。
升级之后,再去搜索Role-based Authorization Strategy会发现找不到了,这是因为高版本的Jenkins直接就集成进来了,点击:Manage Jenkins-Configure Global Security,在Authorization中选择Role-Based Strategy即可,然后我们创建角色来配置他们的管理范围。
点击:Manage Jenkins-Manage and Assign Roles-Manage Role。
Global roles(全局角色):管理员等高级用户可以创建基于全局的角色 Item rols(项目角色):针对某个或者某些项目的角色
Node roles(结点角色):结点相关的权限
在Global roles里新建一个baseRole的角色,是为了给新用户分配最基本的Jenkins操作权限,比如登录权限,我们把baseRole的Overall中的Read勾选上。
在Item roles里添加role1和role2的角色,并指定Pattern,Pattern是用来表示这个role可以访问的项目通配,这里我用test1.*和test2.*来配置,表示role1用户可以访问test1开头的项目,role2可以访问test2开头的项目,并把后面所有的权限都给勾选上。
最后Apply,Save。
然后Manage Jenkins-Manage Users,这里可以创建用户,于是创建user1和user2。
再来到Manage Jenkins-Manage And Assign Roles-Assign Roles,把user1和user2添加进去,并做如下配置,也就是给user1和user2基本的登录权限(baseRole控制),给user1分配role1的权限,给user2分配role2的权限,Apply,Save。
在这里插入图片描述
此时还没有办法测试,我们先加两个项目(New Item),项目名分别以test1和test2开头,选择FreeStyle project。再使用user1和user2进行登录测试,发现user1只能看到以test1开头的项目,user2只能看到以test2开头的项目。

Jenkins凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。
首先需要安装Credentials Binding插件,安装完成后,最左侧多了一个【凭据】菜单,新版本可能在Manage Jenkins-Security里出现。
点击Stores From parent里的global,然后点击Add Credentials创建凭据,可以添加的凭据类型有5种。

  • Username with password:用户名和密码
  • SSH Username with private key: 使用SSH用户和密钥
  • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式

常用的凭证类型有:Username with password(用户密码)和SSH Username with private key(SSH 密钥),为了演示功能,需要下载Git插件,服务器上也要安装Git服务。

[root@localhost ~]# yum install -y git
[root@localhost ~]# git --version

用户密码类型

添加全局凭据,填入GitLab的用户信息。
在这里插入图片描述
测试凭据是否可用,新建一个FreeStyle project,在General的Source Code Management中选择Git,并把GitLab中某个项目的“Clone with HTTP”的值复制到Repository URL里,Credentials选择刚刚创建的。
进入这个新建项目,点击Build Now即可开始构建,因为项目很小,所以很快就编译完成了,在Console Output里可以看到编译信息。
在这里插入图片描述
我们来到/var/lib/jenkins/workspace/路径,就能找到Jenkins从GitLab拉下来的代码。

SSH密钥类型

首先生成ssh公钥和私钥,将私钥存放到 Jenkins服务器,将公钥存放到GitLab服务器,Jenkins服务器拿着私钥去找GitLab的公钥配对。

# 生成公钥和私钥
[root@localhost ~]# ssh-keygen -t rsa
# 查看公钥和私钥
[root@localhost ~]# cd /root/.ssh/

使用root账户进到GitLab,点击头像-Settings-SSH Keys,从服务器把id_rsa.pub的值粘贴进来。
来到Jenkins,添加一个新的全局凭据。填写必要的信息,并把私钥的内容粘贴进来。
在这里插入图片描述
测试凭据是否可用,新建一个Freestyle project,和上面类似,不过这次选择的是项目的Clone wtih SSH,并选择SSH凭据,再次点击Build Now,同样可以在Console Output里看到信息,在/var/lib/jenkins/workspace/里看到文件被从GitLab下载下来了。

Maven安装和配置

在Jenkins服务器上,我们需要Maven来编译和打包项目,首先安装Maven。

[root@localhost ~]# cd /opt/software/
# 下载Maven
[root@localhost software]# wget https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz --no-check-certificate
# 解压Maven
[root@localhost software]# tar -zxvf apache-maven-3.8.5-bin.tar.gz -C /opt/module/
# 配置环境变量
[root@localhost software]# vim /etc/profile
# 使环境变量生效
[root@localhost software]# source /etc/profile
# 测试Maven是否安装成功
[root@localhost software]# mvn -v

在/etc/profile文件的最后加上如下内容。

# JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_231
# MAVEN_HOME
export MAVEN_HOME=/opt/module/apache-maven-3.8.5
# 将JAVA_HOME和MAVEN_HOME加到PATH里
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

让Jenkins关联JDK和Maven,Manage Jenkins-Global Tool Configuration-JDK-Add JDK,填入Name和JAVA_HOME的值,同理,在下面的Maven也是填入Name和MAVEN_HOME的值,取消勾选Install automatically,最后保存。
添加全局变量,Manage Jenkins-Config System-Global properties,添加3个全局变量。
在这里插入图片描述

# 创建Maven本地仓库
[root@localhost ~]# mkdir /root/localRepository
# 更换Maven本地仓库位置,更换阿里云镜像地址
[root@localhost ~]# vim /opt/module/apache-maven-3.8.5/conf/settings.xml
<localRepository>/path/to/local/repo</localRepository>
<mirror>
  <id>aliyun</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

使用之前的项目来测试Maven是否配置成功,进入Jenkins的项目里点击配置,输入mvn clean package命令,再次构建,在Console Output里查看结果,并来到服务器看看是否生成target文件。
在这里插入图片描述

Tomcat安装和配置

安装Tomcat

在pom.xml里,我们定义的打包方式是war包,在Jenkins的编译目录就会有一个war了,要部署这个war包,需要安装Tomcat。

[root@localhost ~]# cd /opt/software/
# 下载Tomcat
[root@localhost software]# wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78.tar.gz --no-check-certificate
# 解压缩
[root@localhost software]# tar -zxvf apache-tomcat-8.5.78.tar.gz -C /opt/module/
# 启动Tomcat
[root@localhost ~]# cd /opt/module/apache-tomcat-8.5.78/bin/
[root@localhost bin]# ./startup.sh
# 此时访问8080会发现访问不到,好像是其台服务把8080给占用了,进入conf/server.xml,将8080端口改成8085就可以访问了

配置Tomcat角色权限

默认情况下,Tomcat是没有配置用户角色权限的,点击这里,会提示403错误,但是后序Jenkins部署到Tomcat,需要用到Tomcat的用户,所以修改Tomcat的tomcat-users.xml配置文件,添加用户及权限,这里添加了一个用户名、密码是tomcat的用户,并赋予它一些角色。
在这里插入图片描述

<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager-script"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-status"/>
  <role rolename="admin-gui"/>
  <role rolename="admin-script"/>
  <user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
</tomcat-users>

还需要修改context.xml文件,注释掉Value这一行。

[root@localhost ~]# vim /opt/module/apache-tomcat-8.5.78/webapps/manager/META-INF/context.xml
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

重启Tomcat后,访问http://192.168.216.123:8085/manager/html,输入刚才添加的用户名和密码(这里都是tomcat),就可以看到管理界面了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值