一、Jenkins概述
二、安装Jenkins
安装 Java
下载地址:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
需要注册账户并登录后下载
下载源码包后,解压
[root@jenkins ~]# ls
anaconda-ks.cfg jdk-8u191-linux-x64.tar.gz
[root@jenkins ~]# tar -xf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[root@jenkins ~]# cd /usr/local/
[root@jenkins ~]# mv jdk1.8.0_191/ java
设置环境变量
/etc/profile 文件最后添加以下内容
# set java environment
JAVA_HOME=/usr/local/java # java 安装包的解压目录
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
给环境变量含义
JAVA_HOME 指明JDK安装路径,就是刚才安装时解压所指定的路径,此路径下包括lib,bin,jre等文件夹(tomcat 的运行都需要依靠此变量)。
CLASSPATH 为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,CLASSPATH变量值中的.表示当前目录
PATH 使得系统可以在任何路径下识别java命令。
特别注意:环境变量值的结尾没有任何符号,不同值之间用:隔开
设置完成后,重启或者执行如下命令是环境变量生效
[root@jenkins ~]# source /etc/profile
检查版本,以检测安装是否成功
[root@jenkins ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
创建软连接
因为 jenkins 启动时需要
[root@jenkins ~]# ln -s /usr/local/java/bin/java /usr/bin/java
下载并安装Jenkins
官方网址 https://pkg.jenkins.io/redhat-stable/
[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@jenkins ~]# yum install jenkins
相关包介绍
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置文件
/var/lib/jenkins/ 默认的JENKINS_HOME目录
/var/log/jenkins/jenkins.log Jenkins日志文件
配置与启动
Centos7 中启动方式
[root@jenkins ~]# systemctl start jenkins
Starting jenkins (via systemctl): [ OK ]
如果起动时报如下错误:说明你没有建立软链接
[root@jenkins ~]# systemctl start jenkins
Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
[root@jenkins ~]# ln -s /usr/local/java/bin/java /usr/bin/java
[root@jenkins ~]# systemctl restart jenkins //然后重启服务
centos6 及之前中启动方式
[root@jenkins ~]# /etc/init.d/jenkins start
启动时报错
- 以下错误通常出现在 Docker 的 CentOS7 镜像中
[root@jenkins ~]# /etc/init.d/jenkins start
/etc/init.d/jenkins: line 59: /etc/init.d/functions: No such file or directory
解决:
在CentOS 7 Docker映像中,只需要安装软件包即可安装initscripts
此脚本:
yum install -y initscripts
初始化 jenkins
填写初始密码
在浏览器中登录,初始密码在如下文件中:
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
f98778fe35204885bd4e529be632fe82
假如是 Docker 方式构建的,密码可以使用如下命令得到
[root@kvm-docker ~]# docker logs 589ee6c4632b
589ee6c4632b 是容器 ID
浏览器登陆:
注意:关闭防火墙,selinux
如果启动时一直卡在这个页面:
[root@jenkins ~]# vim /var/lib/jenkins/hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>http://mirror.xmission.com/jenkins/updates/update-center.json</url>
</site>
</sites>
将url改成http://mirror.xmission.com/jenkins/updates/update-center.json
如果生产要求了固定插件,将插件包解压到一个目录,或者压缩包本身就是一个目录,然后将目录下缩有插件移动到/var/lib/jenkins/plugins/,如果原目录下有文件,查看权限,
将其备份,然后将解压包下所有文件移动到/var/lib/jenkins/plugins/,查看权限,然后设置为和原来目录一样的权限,设置属主和属组
点击 安装推荐的插件
后期需要什么插件,再在系统管理 中安装即可
创建管理员用户
设置访问 Jenkins 的 URL
这个 URL 需要根据实际的架构场景填写
假如访问 Jenkins 的客户端和 这个 Jenkins 服务器在同一个局域网内。
可以填写当前 Jenkins 服务器的 IP
假如访问 Jenkins 的客户端和 这个 Jenkins 服务器不在通一个局域网中, 填写的 IP必须保证可以被客户端访问到。
当然填写 Jenkins 服务器的主机名也是一样的道理,但是必须保证可以被客户端正确解析为 IP。
三、配置Jenkins
如果你之前创建了管理员用户就无法登陆之前的admin,之前的密码也将失效,你就要使用你之前创建的用户进行登陆
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
cat: /var/lib/jenkins/secrets/initialAdminPassword: No such file or directory
假如你刚才没有创建用户,可以继续使用当前已经登录的用户
admin
登按照如下步骤创建用户。
登录
再次登录地址: http://192.168.0.106:8080
添加用户
场景: 可以这对不同角色添加可以访问 Jenkins 服务器的用户,并通过配置用户的权限来控制用户的操作行为。
系统管理 --> 管理用户
页面最大化和小窗口的视图有一些差异
为用户设置权限
系统管理 --> 全局安全配置
将所有的权限分配给root,然后保存
假如你想为另外一个用户 jenkins 添加除了 管理员权限外的所有权限,按照如下方式添加即可。(需要先去创建这个用户)
再次点击 全局安全配置 用上述的方法为刚才创建的用户 jenkins 添加除了管理员的权限的其他所有权限
注销当前管理员用户后,使用新创建的用户Jenkins登录验证
会发现新用户 jenkins
没有 系统管理 这个配置项目
添加插件
Jenkins 相当于您的管家,可以给他添加不同的插件,从而让他具备更多的功能。
首先,需要登陆管理员用户
系统管理--添加插件
添加ssh、maven等相关插件
以下插件需要选择安装:
Ansible
Git Parameter
Gitlab Hook
GitLab
Maven Invoker
Maven Integration
Publish Over SSH
SSH
Rebuilder
Safe Restart
方法如下图所示:
不一定在最前面,前面没有就往后面找
点击 直接安装
按照以上方法,把其他插件也安装好
系统管理--系统设置
系统设置--指定管理员邮箱地址
系统设置--设置邮件通知的SMTP服务器及其相关配置
邮箱通知配置的前提是把在自己邮箱的提供商地方开通 SMTP 服务,同时需要客户端授权密码
- SMTP 服务器 填写自己邮箱的提供商所提供的信息,主要是指定邮箱发件服务器地址;每个邮箱都不一定相同,这里是 163 邮箱。
- 邮件后缀 就是你邮件地址后面的部分,如账号: youname@163.com 的后缀就是 @163.com
- 这个邮箱地址需要和前面配置的管理员邮箱地址一致
- 对163的邮箱和腾讯的邮箱,这里的密码并不是你平时登录邮箱的密码,而是通过邮箱的服务提供商那里设置的 客户端授权密码
-
邮件服务器的监听端口, 不使用 SSL 协议 的填写 25;勾选 使用SSL协议的填写465 如下图所示:
系统设置--设置SSH 远程服务器地址及其配置
需要安装Publish over SSH
插件。
如下方式可以检查目前都安装了哪些插件:
此插件可以实现远程自动部署,就是可以通过 Jenkins
主机,远程连接到 应用服务器,之后把需要部署的应用程序部署到应用服务器上.
Jenkins
和 应用服务器的 SSH
连接认证,支持 密码和 密钥两种方式。
这里演示使用密钥的认证方式和远程应用服务器进行认证连接。
首先需要在 jenkins
主机上操作,让应用服务器对 jenkins
主机信任,以便让 jenkins
主机可以免密码登录到 应用服务器上。
第一步,先在 jenkins 主机上建立自己的密钥对儿
[root@jenkins ~]# ssh-keygen
# 执行以上命令后,一路按 回车 键即可把自己的密钥对创建成功
第二步,拷贝 jenkins 主机的公钥到应用服务器上
还是在 jenkins 主机上操作
[root@jenkins ~]# ssh-copy-id root@192.168.1.10
注意:
- root 是远程应用服务器上应用程序的属主用户,就是应用服务器将会使用 root 这个用户进行启动相关应用程序,比如 nginx、tomcat 等。
- 192.168.1.10 是远程应用服务器的 ip
完成以上两步后就可以配置 Publish over SSH
了
系统管理-->系统设置 --> Publish overSSH
首先配置 jenkins
主机的私钥, 此处也有两种方式
a. 配置 jenkins
主机 root
用户的私钥路径,但是需要把私钥复制到 jenkins
程序的家目录下,这里是 /var/lib/jenkins/
下面我是把私钥拷贝到 /var/lib/jenkins/.ssh/
下了
[root@jenkins ~]# mkdir /var/lib/jenkins/.ssh
[root@jenkins ~]# cp ~/.ssh/id_rsa /var/lib/jenkins/
修改文件属主和权限:
[root@jenkins ~]# cd /var/lib/jenkins/.ssh/
[root@jenkins .ssh]# chown jenkins.jenkins . -R
[root@jenkins .ssh]# chmod 600 id_rsa
之后把这个路径 配置在 页面中
b. 另一种方式是把私钥的内容之间粘贴到 key 配置项的密钥框里
[root@jenkins jenkins]# cat .ssh/id_rsa
接着就可以配置远程应用服务器的信息了
点击新增按钮即可,此处可以添加多个,但是需要给这些应用服务器分别建立信任关系。
部分设置项说明
- Passphrase:密码(私钥的保护密码,如果你设置了)
- SSH Server Name:这个连接项的名字(自定义的)
- Hostname:需要ssh 连接的远程应用服务器ip地址
- Username:远程应用服务器的用户名,这个用户名应该已经和 jenkins 主机建立的信任关系
- Remote Directory:远程应用服务器的应用程序部署的目录
注意: 这里的目录会作为此服务器代码存放的根目录,之后你
需要把 Maven 打好的包传到此应用服务器中,就是相对于这个目录
来指的具体的位置的。比如目前指定的是 /app/code,在构建任务中,指定构建后的 *.jar 包传到目录 /student 目录,实际在此应用服务器中的完整路径是 /app/code/student/ 目录下。 - Use password authentication, or use a different key:使用密码验证(使用密码验证时,需要打开此处)
配置完成后可点击Test Configuration测试到目标主机的连接,出现success则成功连接
然后点击保存
系统管理-->全局工具配置
全局工具配置—配置 jdk 环境
先在 jenkins 主机上找到 java 的安装路径
[root@jenkins jenkins]# echo $JAVA_HOME
/usr/local/java
假设使用的是 centos7 容器安装的 Jenkins,需要用 YUM 安装一下 java 开发包
yum install java-1.8.0-openjdk-develac
之后在页面上配置 :
然后点击应用
全局工具配置--配置maven
需要先安装 maven
安装方法
Maven
1. 下载 Maven
2. 安装 Maven
接着使用 wget 下载
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
安装
[root@jenkins ~]# tar -xf apache-maven-3.6.3-bin.tar.gz -C /usr/local
[root@jenkins ~]# mv /usr/local/apache-maven-3.6.3/ /usr/local/maven
添加命令执行路径到 环境变量 PATH 中
echo 'export PATH=$PATH:/usr/local/maven/bin/' > /etc/profile.d/maven.sh
使环境变量立刻生效
source /etc/profile
验证
[root@jenkins ~]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /usr/local/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
配置maven
配置Credentials
在Gitlab上创建一个==Jenkins==用户:
邮箱必须是真实的
并将Jenkins用户加入到相应的组(Group)
激活已注册的用户
注册用户时,填写的邮箱必须是真实的,Gitlab Server会向这个邮箱发送一个设置密码链接,需要访问这个链接,才能激活用户。
添加公钥
把 Jenins root 用户的公钥添加到 gitllab
[root@jenkins ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuECSSfTSOzHlzk5aULJdDwLku9HysYh8sJ3+G+ogsrUaTdRWA9hyGFT32/ryhpP0XDFJDWA6yvxSK7/OkcdK1TWQxTMZu+6qsMLweEFSjkZ1ozBrzonj13JNo9JGyqMAUU3y37TooRkRGrlVShBS0MxjYIM7NLegBMA3SewjeGkoi33OZIrnZ/nHi+nxDxMgl3KImn/FsS21x3Vk2HBD0jqj0pID+2Ne6gYC6f83trdi+5+7fRf+vD7ZP/lZo3rXGgbPQkh5SERN2XclAPrJUZkDQLGdtmTPLvYWtyxg//B3ZDqvF8cky4kvvnoeefjQc8CgIysJ7uPUzbM4OWiNJ root@biudefor
然后点击add key添加
在Jenkins中添加相关的Credentials:
系统设置-->全局安全设置
创建 Maven项目(例1)
配置项目的 git 远程仓库地址
远程仓库中要有maven项目
添加访问git server的ssh密钥(私钥)
配置 构建触发器
这里是每周六, 每隔 3 分钟检查一次远程代码库,假如有远程代码库有新的更新提交, 就会自动挡触发构建。定义时间的方法和 linux 系统中一致。
配置项目中的构建(使用maven构建包)
配置项目中的构建后动作
- 这里填写的是打好包的路径,是相对路径,相对于工作空间目录的,工作空间默认是在 $JENKINS_HOEM/workspace 目录下。每次新建一个构建任务时,会在此目录下创建一个和任务名同名的目录(比如:HelloMaven),在此目录下存放从远程代码库拉取的源代码,并且构建完成的文件(比如jar 包)也会在 HelloMaven/target 目录下。
- 是在把打好包的文件传输到远程应用服务器时,不希望被创建的目录名。 这个目录名必须是在 Source files 选项中填写的路径最前面的部分中。
- 远程应用服务器的目录,这个目录假如没有会被自动创建,但是此目录是给相对路径,相对于之前在系统设置中的 SSH Servers 中配置的服务器端路径,如下图中的 /opt
- 指构建后在远程应用服务器上执行的命令。
注意:这里执行命令的用户同样是以下图中的Username 里填写的用户的身份执行的。假如执行命令是执行一个在远程应用服务器上的一个脚本,那么路径和文件都必须存在,并且,脚本中的任何相对路径都会相对于此用户的家目录。
在配置完毕的项目上进行构建
检查远程应用服务器
以下就是构建完成后把 target 目录下的任何 jar包传输到远程应用服务器上的 /opt/student
[root@linux ~]# cd /opt/student/
[root@linux student]# ls
my-app-1.0-SNAPSHOT.jar