目录
Jenkins凭据管理
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便wenkins可以和这些第三方的应用进行交互。要在venkins使用凭据管理功能,需要安装credentials Binding插件(推荐的插件已默认安装)。
点击右上角用户名->凭据->点击全局->添加凭据
常用的凭据类型:
Username with password:用户名和密码。
SSH Username with private key:使用ssH用户和密钥。
Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的secret file就会被删除。
secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的 api token。
certificate:通过上传证书文件的方式。
为了让 Jenkins支持从Gitlab拉取源码,需要安装Git 插件以及在 linux系统上安装Git 工具。(之前已安装好了)
普通用户密码凭据
1)创建凭据 点击用户名下拉选择凭据->Jenkins全局->添加凭据 类型选择“Username with password”,输入Gitlab 的用户名和密码( zhangsan(gitlab的账户和密码)/12345678),描述输入gitlab-auth-password点击"确定"。
2)测试凭据是否可用
创建一个Freestyle项目:新建Item ->任务名称(test01) Freestyle Project ->确定 源码管理:选择Git,
Repository URL: http://192.168.37.103:85/devops_group/web_demo.git(可从 gitlab使用 Http 克隆),Credentials 下拉选择gitlab-auth-password,点击保存。
点击 Bulid Now开始构建,查看控制台输出可以看到构建成功,构建后的包会生成在服务器的/var/lib/jenkins/workspace/testo1目录中。
[root@jenkins /var/lib/jenkins]# cd workspace/test01
[root@jenkins /var/lib/jenkins/workspace/test01]# ls
pom.xml src web_demo.iml
ssH密钥类型
1)在 Jenkins服务器上使用root 用户生成免密的公钥和私钥
ssh-keygen -t rsa
2)把生成的公钥放在Gitlab中
获取公钥内容
cat /root/.ssh/id_rsa.pub
以root账户登录Gitlab ->点击头像下拉选择设置 ->SSH密钥复制刚才公钥文件的内容到这里,点击添加密钥
3)在Jenkins 中添加凭据,配置私钥
获取私钥内容
cat /root/.ssh/id rsa
点击用户名下拉选择凭据-> Jenkins 全局->添加凭据 类型选择
“SSH Username with private key",描述输入gitlab-auth-ssh,Username输入生成私钥的用户名 root,Private Key下面选择Enter directly,把刚才生成私钥文件内容全部复制过来 点击"确定”。
4)测试凭据是否可用
创建一个FreeStyle项目:新建Item->任务名称(test02)Freestyle Project->确定 源码管理:选择Git,
Repository URL: git@192.168.37.103:devops_group/web_demo.git可从Gitlab使用ssH 克隆),
Credentials下拉选择gitlab-autH--ssh,点击保存。 尝试构建项目,如果代码可以正常拉取,代表凭据配置成功!
[root@jenkins /var/lib/jenkins/workspace/test02/src/main/webapp]# cat index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>演示项目主页</title>
</head>
<body>
如果看到此页面,代表项目部署成功啦!
</body>
</html>
Jenkins 构建Maven项目测试
在 jenkins 服务器上安装Maven来编译和打包项目
cd /opt
[root@jenkins /opt]# tar -zxf apache-maven-3.6.2-bin.tar.gz
[root@jenkins /opt]# mv apache-maven-3.6.2 /usr/local/maven
[root@jenkins /opt]# cd /usr/local/maven/
[root@jenkins /usr/local/maven]# ls
bin boot conf lib LICENSE NOTICE README.txt
[root@jenkins /usr/local/maven]# cd bin/
[root@jenkins /usr/local/maven/bin]# ls
m2.conf mvn mvn.cmd mvnDebug mvnDebug.cmd mvnyjp
[root@jenkins /usr/local/maven/bin]# vim /etc/profile
.....-
export MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
[root@jenkins /usr/local/maven/bin]# source /etc/profile
[root@jenkins /usr/local/maven/bin]# mvn -v
Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T16:06:16+01:00)
Maven home: /usr/local/maven
Java version: 1.8.0_171, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_171/jre
Default locale: en_GB, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
Jenkins关联JDK和Maven
Manage Jenkins ->Global Tool configuration 点击新增JDK,别名输入jdk1.8,
取消勾选Install automatically,JAVA_HONE输入/usr/loca1/jdk1.8.0_171
点击新增Maven,Name输入maven3,取消勾选 Install automaticaily,MAVEN_HOME驶入/usr/local/maven点击"应用"和"保存"。
添加Jenkins全局变量,
让 Jenkins 能够识别JDK和 Maven环境的命令
Manage Jenkins -> Configure system ->全局属性,勾选 Environment variables键值对列表添加:
键JAVA_HOME,值/usr/local/jdk1.8.0_171
键M2_HOME ,值/usr/ local/ maven
键PATH+EXTRA ,值$M2_HOME/bin
修改Maven的settings. xml
mkdir / root/repo #创建本地仓库目录
<!--本地仓库改为/root/repo-->
55 <localRepository>/root/repo</localRepository>
<!--添加阿里云私服地址-->
154 <mirror>
155 <id>alimaven</id>
156 <mirrorOf>central</mirrorOf>
157 <name>aliyun maven</name>
158 <url>https://maven.aliyun.com/repository/public</url>
159 </mirror>
160 </mirrors>
#测试Maven是否配置成功
在本地pom clean install一下
[root@jenkins /var/lib/jenkins/workspace/mvn-demo1]# mvn clean
[root@jenkins /var/lib/jenkins/workspace/mvn-demo1]# mvn install
点击项目test02->设置->构建->增加构建步骤->Execute shell输入
mvn clean package #清空原有的构建元素(插件、依赖包等target文件),
再进行打包 点击保存 再次构建,如果可以把项目打成war包,代表maven环境配置成功。
tomcat 安装和配置
另起一台服务器安装tomcat
安装tomcat 9.0.16
[root@localhost web_demo]# cd /opt
[root@localhost opt]# ls
apache-tomcat-9.0.16.tar.gz rh
jdk-8u171-linux-x64.tar.gz
[root@localhost opt]# tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
vim /etc/profile
....
export JAVA_HOME=/usr/local/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
source /etc/profile
[root@localhost opt]# tar zxvf apache-tomcat-9.0.16.tar.gz
[root@localhost opt]# mv /opt/apache-tomcat-9.0.16/ /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh ##开启tomcat
配置tomcat 用户角色权限
默认情况下Tomcat是没有配置用户角色权限的 验证方法:可浏览器访问http://192.168.37.108:8080,点击Managing Tomcat下 的manager webapp ,发现返回403页面。 但是后续Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户进行远程部署,所以修改tomcat以下配置,添加用户及权限
[root@localhost opt]# vim /usr/local/tomcat/conf/tomcat-users.xml
43 --> ##添加tomcat 用户角色权限,指定用户密码都是tomcat,并授予权限
44 <role rolename="tomcat"/>
45 <role rolename="role1"/>
46 <role rolename="manager-script"/>
47 <role rolename="manager-gui"/>
48 <role rolename="manager-status"/>
49 <role rolename="admin-gui"/>
50 <role rolename="admin-script"/> 51 <user username="tomcat" password="tomcat" roles="manager-gui,ma nager-script,tomcat,admin-gui,admin-script"/>
52 </tomcat-users>
[root@localhost opt]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
19 <!-- ##注释掉value 配置
20 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
21 allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
22 -->
重启tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
再次访问:http://192.168.37.108:8080/mananger/html ,输入账号密码tomcat 即可登陆成功
jenkins构建Maven项目
●自由风格软件项目(Freestyle Project )
可以构建很多不同语言的项目,Jenkins 默认提供的构建类型
●Maven项目(Maven Project)
专门针对java语言的Maven项目来进行构建,在构建Maven项目会比较方便
●流水线项目(Pipeline Project)
使用代码的形式编写构建过程,灵活度非常高 每种类型的构建其实都可以完成---样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择
自由风格项目构建
项目的集成过程:拉取代码 -> 编译 -> 打包 -> 部署
拉取代码
新建item ->任务名称(web_ demo_ freestyle) FreeStyle Project ->确定
源码管理:选择Git, Repository URL: git@192.168.18.96:devops_group/web_demo.git Credentials" 下拉选择gitlab-auth-ssh, 点击保存 点击 Build Now, 尝试构建项目
编译打包
配置->构建->添加构建步骤-> Execute Shell, 输入以下命令. echo"开始编译和打包” mvn clean package echo "编译和打包结束" 点击Build Now, 尝试构建项目
部署项目
把项目部署到远程的Tomcat里面
1)安装Deploy to container插件
Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container 插件实现: Manage Jenkins ->管理插件-可选插件->搜索Deploy to container 插件选中直接安装即可
2)添加构建后操作
配置->构建后操作->增加构建后操作步骤-> Deploy war/ear to a container WAR/EAR files 输入target/*.war Containers -> Add Container -> Tomcat 9.x Remote -> Credentials, 点击添加-> Jenkins 用户名输入tomcat, 密码输入tomcat, 描述输入tomcat-auth-password, 点击添加 Credentials"下 拉选择tomcat-auth-password Tomcat URL输入http://192.168.37.108:8080 点击保存 点击Build Now, 尝试构建项目 3)部署成功后,刷新http://192.168.37.108:8080/manager/html页面,可以发现应用程序中多出一个项目,点击新项目进去访问
Maven项目 构建
1)修改源码 并提交到gitlab
cd /root/web_demo
vim src/main/webapp/index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>演示项目主页</title>
</head>
<body>
如果看到此页面,代表项目部署成功啦!
<hr/> ##添加换行
<a href="/addUser">添加用户</a> ##添加
</body>
</html>
git add .
git commit -m "添加用户"
git push -u origin master ##账号/密码:zhangsan/zhangsan@123
2)安装 maven integration 插件
Manage Jenkins ->管理插件-可选插件->搜索Maven Integration 插件选中直接安装即可
3)创建 maven 项目
新建item ->. 任务名称(web_ demo_ maven)构建一 个maven项目 -> 确定 源码管理:选择Git, Repository URL: git@192.168.18.96:devops_group/web_demo.git CredentialsI 下拉选择gitlab-auth-ssh, 点击保存
Build: Root POM输入pom. xml #指定pom. xml文件的路径
Goals and options
输入clean package #输入maven 指令,不用写mvn
构建后操作:增加构建后操作步骤-> Deploy war/ear to a container
WAR/EAR files 输入target/*.war
Containers -> Add Container -> Tomcat 9.x Remote -> Credentials" 下 拉选择tomcat-auth-password
Tomcat URL输入http:/ /192.168.37.108:8080 点击保存 点击Build Now, 尝试构建项目 浏览器访问项目: http://192.168.37.108:8080/web_demo-1.0-SNAPSHOT/
总结
开发人员将代码提交到代码托管服务器gitlab上,在CI工具jenkins服务器上进行相关的配置,源码管理使用Git进行拉取代码。凭据当中添加了Gitlab项目中的用户和密码(或者用ssh密钥对做相关的凭据)在源码管理中添加相关的http地址(或ssh地址),选择对应的凭据。在gitlab中进行拉取代码。构建时直接指定pom.xml的引导配置文件,在后面跟上相关的maven指令clean package 对相应代码进行编译,打包。然后使用工具Deploy war/ear to a container 将打包编译好的war包部署到tomcat服务器上。在整个过程都是在jenkins持续集成的流程上完成的自动化操作。