企业级devops自动化部署学习 (2)jenkins安装与使用
上面我们已经在192.168.80.133服务器安装了gitlab并成功将本地项目推送到gitlab远程仓库,接下来,我们在另外一台服务器192.168.80.134上安装jenkins
一:安装jdk
Jenkins需要依赖JDK,所以先安装JDK1.8
yum install java-1.8.0-openjdk* -y
安装目录为:/usr/lib/jvm
安装好后,就自动配置好了环境变量:
二:安装jenkins
1、获取jenkins的rpm包
此处我通过华为云镜像拉取
wget https://repo.huaweicloud.com/jenkins/redhat/jenkins-2.356-1.1.noarch.rpm
2、安装jenkins
rpm -ivh jenkins-2.356-1.1.noarch.rpm
到这里,jenkins已经安装完,
默认安装目录: /usr/lib/jenkins
工作目录: /var/lib/jenkins(对应于环境变量 JENKINS_HOME)
3、修改Jenkins配置
vim /etc/sysconfig/jenkins
修改内容如下:
JENKINS_USER="root"
JENKINS_PORT="8888"
JENKINS_USER 必须修改,否则权限不足
JENKINS_PORT可以不修改,为了避免与tomcat服务器端口冲突,此处还是要改改
4、启动jenkins并查看状态
systemctl start jenkins
systemctl status jenkins
此处我们查看到,只通过修改第四步文件vim /etc/sysconfig/jenkins还不能够修改端口成功,所启动的jenkins还是默认的8080端口,下面到jenkins加载目录中修改端口尝试下能不能将端口修改成功
vim /usr/lib/systemd/system/jenkins.service
重新加载配置文件
systemctl daemon-reload
重启jenkins再来查看jenkins所运行的端口
jenkins端口修改成功
5、防火墙开放http服务以及8888端口
firewall-cmd --add-service=http --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload
6、访问jenkins:http://192.168.80.134:8888/
7、获取admin账户初始化密码并登录
cat /var/lib/jenkins/secrets/initialAdminPassword
7、跳过插件安装
9、添加管理员账户
至此,jenkins的安装配置已经完成
三、jenkins的基本使用
插件管理
Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码,使用Maven构建项目等功能需要依靠插件完成。
1、安装中文汉化插件,可以使jenkins汉化
Manage Jenkins->Manage Plugins->在"available"tab列搜索"Chinese"->下载后重启
重启jenkins后,可以看到汉化成功,不过只能支持部分汉化,没有做到全量汉化
2、Jenkins用户权限管理
安装[Role-based Authorization Strategy]插件
Jenkins用户权限管理需要使用到【Role-based Authorization Strategy】插件,下面进行安装
安装重启后,在Manage Jenkins管理页面就会看到多出个Configure Glogal Security的安全配置选项
开启权限全局安全配置,授权策略选择为【Role-Based Strategy】后保存
创建角色
这里有三种角色,分别对三种角色进行介绍。
Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
Item role(项目角色):针对某个或者某些项目的角色
Node role(节点觉得):针对节点相关的权限
接下来我们创建三个角色。
baseRole:该角色为全局角色。这个角色需要绑定Overall下面的Read权限,是为了给所有用户绑定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,则会报错误
role1:该角色为项目角色。使用正则表达式绑定"auto.*",意思是只能操作auto开头的项目。
role2:该角色也为项目角色。使用正则表达式绑定"test.*",意思是只能操作test开头的项目。
创建用户
分别新增zhangsan,lisi两个用户
用户绑定角色
为zhangsan绑定role1角色,为lisi绑定role2角色
创建项目测试
管理员创建两个项目,auto001,test001
用zhangsan用于登录的结果:
用lisi用户登录的结果:
3、Jenkins凭证管理
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件。
安装Credentials Binding插件
安装好后,在manage Jenkins中就多了【凭据配置】和【Manage 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管理工具到gitlab拉取项目源码,演示Jenkins如何管理Gitlab的凭证。
为了让Jenkins支持从Gitlab拉取源码,需要在Jenkins汇总安装Git插件以及在CentOS7服务上安装Git工具
1、Jenkins 上安装git插件
2、 CentOS7服务器安装git工具
yum install git -y
git --version #安装完后查看版本
3.1、添加凭证,选择用户密码类型
测试凭证是否可用
(1)配置前面新建的test001项目
(2)在源码管理处选择Git,其中Repository URL为gitlab项目中复制出来的URL
(3)构建项目
(4)检查构建日志
(5)查看/var/lib/jenkins/workspace/ 目录,发现已经从Gitlab成功拉取了代码到Jenkins中。
3.2 新增SSH秘钥类型凭证
SSH免密登录示意图:
1、使用root用户生成公钥和私钥
ssh-keygen -t rsa
在/root/.shh/ 目录保存了公钥和私钥,其中id_rsa是私钥文件,id_rsa.pub是公钥文件
2、把公钥放到gitlab中
3、在Jenkins中添加SSH凭证,配置私钥
4、测试凭证是否可用
(1)新建test002项目,源码管理选择git,凭证为SSH方式
构建后查看控制台
再到jenkins工作空间查看是否已经拉取代码成功。
到此,jenkins通过SSH方式拉取gitlab代码也成功了
4、Maven安装与配置
在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。
1、服务器安装maven
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
下载完后解压
tar -zxvf apache-maven-3.6.3-bin.tar.gz
配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/apache-maven-3.6.3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
查看配置是否生效
source /etc/profile #使配置生效
mvn -v #查看Maven版本
2、在jenkins中全局工具配置中关联JDK和Maven
3、添加jenkins全局变量
4、修改maven的setting文件
mkdir /root/repository #创建本地仓库目录
vim /opt/apache-maven-3.6.3/conf/settings.xml
(1) 将本地仓库地址修改为:/root/repository
(2)追加maven仓库镜像
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>google-maven-central</id>
<name>Google Maven Central</name>
<url>https://maven-central.storage.googleapis.com
</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 中央仓库在中国的镜像 -->
<mirror>
<id>maven.net.cn</id>
<name>oneof the central mirrors in china</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
5、测试Maven配置是否成功
使用jenkins前面测试的test002项目进行配置
构建->增加构建步骤->Execute Shell
输入命令:mvn clean package
再次构建,查看控制台输出,再次构建,如果可以把项目打成war包,代表maven环境配置成功。
我当前次构建失败了,我猜想原因是因为我新建的/root/repository的权限不足,下面我们对该目录添加权限
chmod 777 /root/repository
添加权限后再次构建
还是失败了,此处我猜想,估计我将将repository仓库目录放在/root目录下面估计会有Linux系统其他阻塞问题,所以我将仓库修改到了/opt/repo下,再执行构建
终于成功了,接下来到/opt/repo目录下查看是否下载依赖包成功,可以看到相关的依赖包下载成功
再查看jenkins工作空间下jar包是否生成成功
ls /var/lib/jenkins/workspace/test002/target/
此时我们执行jar包即可启动服务
java -jar gitlab_test_demo-0.0.1-SNAPSHOT.jar
我们在访问一下该项目:http://192.168.80.134:8080/hello
成功访问到了项目,自此,jenkins调用maven编译打包已完成