Jenkins

一、Jenkins概述

Jenkins.png

二、安装Jenkins

安装 Java

下载地址:

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

需要注册账户并登录后下载


image.png
下载源码包后,解压
[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/

image.png

[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

image.png

相关包介绍

/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 
启动时报错
  1. 以下错误通常出现在 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

image.png

如果启动时一直卡在这个页面:

[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

image.png

如果生产要求了固定插件,将插件包解压到一个目录,或者压缩包本身就是一个目录,然后将目录下缩有插件移动到/var/lib/jenkins/plugins/,如果原目录下有文件,查看权限,

将其备份,然后将解压包下所有文件移动到/var/lib/jenkins/plugins/,查看权限,然后设置为和原来目录一样的权限,设置属主和属组

点击 安装推荐的插件
后期需要什么插件,再在系统管理 中安装即可

image-20180705085209072.jpg

image.png

image-20180730180807016.png

创建管理员用户

image.png

设置访问 Jenkins 的 URL

这个 URL 需要根据实际的架构场景填写
假如访问 Jenkins 的客户端和 这个 Jenkins 服务器在同一个局域网内。
可以填写当前 Jenkins 服务器的 IP
假如访问 Jenkins 的客户端和 这个 Jenkins 服务器不在通一个局域网中, 填写的 IP必须保证可以被客户端访问到。
当然填写 Jenkins 服务器的主机名也是一样的道理,但是必须保证可以被客户端正确解析为 IP。

image.png
image.png

三、配置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 服务器的用户,并通过配置用户的权限来控制用户的操作行为。

系统管理 --> 管理用户

image.png

image.png

页面最大化和小窗口的视图有一些差异
image.png

image.png

为用户设置权限

系统管理 --> 全局安全配置

image.png

image.png

image.png
image.png

将所有的权限分配给root,然后保存


image.png

假如你想为另外一个用户 jenkins 添加除了 管理员权限外的所有权限,按照如下方式添加即可。(需要先去创建这个用户)

再次点击 全局安全配置 用上述的方法为刚才创建的用户 jenkins 添加除了管理员的权限的其他所有权限


image.png

注销当前管理员用户后,使用新创建的用户Jenkins登录验证
会发现新用户 jenkins 没有 系统管理 这个配置项目

image.png

添加插件

Jenkins 相当于您的管家,可以给他添加不同的插件,从而让他具备更多的功能。
首先,需要登陆管理员用户

系统管理--添加插件


image.png

添加ssh、maven等相关插件

以下插件需要选择安装:
Ansible
    
Git Parameter
Gitlab Hook
GitLab

Maven Invoker
Maven Integration

Publish Over SSH
SSH

Rebuilder
Safe Restart

方法如下图所示:


image.png

不一定在最前面,前面没有就往后面找


image.png

点击 直接安装

按照以上方法,把其他插件也安装好

系统管理--系统设置

image.png

系统设置--指定管理员邮箱地址
image.png

image.png

image.png

系统设置--设置邮件通知的SMTP服务器及其相关配置

邮箱通知配置的前提是把在自己邮箱的提供商地方开通 SMTP 服务,同时需要客户端授权密码


image.png
  1. SMTP 服务器 填写自己邮箱的提供商所提供的信息,主要是指定邮箱发件服务器地址;每个邮箱都不一定相同,这里是 163 邮箱。
  2. 邮件后缀 就是你邮件地址后面的部分,如账号: youname@163.com 的后缀就是 @163.com
  3. 这个邮箱地址需要和前面配置的管理员邮箱地址一致
  4. 对163的邮箱和腾讯的邮箱,这里的密码并不是你平时登录邮箱的密码,而是通过邮箱的服务提供商那里设置的 客户端授权密码
  5. 邮件服务器的监听端口, 不使用 SSL 协议 的填写 25;勾选 使用SSL协议的填写465 如下图所示:


    image.png

系统设置--设置SSH 远程服务器地址及其配置

需要安装Publish over SSH插件。

如下方式可以检查目前都安装了哪些插件:


image.png

此插件可以实现远程自动部署,就是可以通过 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

之后把这个路径 配置在 页面中

image-20180718175547194.png

b. 另一种方式是把私钥的内容之间粘贴到 key 配置项的密钥框里

[root@jenkins jenkins]# cat .ssh/id_rsa
image-20180718180041284.png

接着就可以配置远程应用服务器的信息了

点击新增按钮即可,此处可以添加多个,但是需要给这些应用服务器分别建立信任关系。

image.png

部分设置项说明

  • 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则成功连接

然后点击保存

image.png

系统管理-->全局工具配置

5.png

全局工具配置—配置 jdk 环境

先在 jenkins 主机上找到 java 的安装路径

[root@jenkins jenkins]# echo $JAVA_HOME
/usr/local/java

假设使用的是 centos7 容器安装的 Jenkins,需要用 YUM 安装一下 java 开发包

yum install java-1.8.0-openjdk-develac
image-20191113150049805.png

之后在页面上配置 :

image.png
image.png

然后点击应用

全局工具配置--配置maven

需要先安装 maven

安装方法

官方网站

Maven

1. 下载 Maven

image-20191113120259906.png

2. 安装 Maven

image.png

image.png

接着使用 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"
image.png
配置maven
image.png

image.png
image.png

配置Credentials

在Gitlab上创建一个==Jenkins==用户:

邮箱必须是真实的

image.png

并将Jenkins用户加入到相应的组(Group)

image.png

image.png

激活已注册的用户

注册用户时,填写的邮箱必须是真实的,Gitlab Server会向这个邮箱发送一个设置密码链接,需要访问这个链接,才能激活用户。

添加公钥

image.png
image.png

把 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
image.png

然后点击add key添加

在Jenkins中添加相关的Credentials:

image.png

image.png

系统设置-->全局安全设置
image.png

创建 Maven项目(例1)

image.png
image.png

配置项目的 git 远程仓库地址

远程仓库中要有maven项目

image-20181118122611823-2515171.png

添加访问git server的ssh密钥(私钥)

image-20181117135934800-2434374.png
image-20181117140052596-2434452.png
image-20181117140417759-2434657.png

配置 构建触发器

image-20181118123502873-2515702.png

这里是每周六, 每隔 3 分钟检查一次远程代码库,假如有远程代码库有新的更新提交, 就会自动挡触发构建。定义时间的方法和 linux 系统中一致。
配置项目中的构建(使用maven构建包)

image-20181118123916397-2515956.png

配置项目中的构建后动作

image-20181118124449946-2516290.png
image-20181118125403668-2516843.png
    1. 这里填写的是打好包的路径,是相对路径,相对于工作空间目录的,工作空间默认是在 $JENKINS_HOEM/workspace 目录下。每次新建一个构建任务时,会在此目录下创建一个和任务名同名的目录(比如:HelloMaven),在此目录下存放从远程代码库拉取的源代码,并且构建完成的文件(比如jar 包)也会在 HelloMaven/target 目录下。
    2. 是在把打好包的文件传输到远程应用服务器时,不希望被创建的目录名。 这个目录名必须是在 Source files 选项中填写的路径最前面的部分中。
    3. 远程应用服务器的目录,这个目录假如没有会被自动创建,但是此目录是给相对路径,相对于之前在系统设置中的 SSH Servers 中配置的服务器端路径,如下图中的 /opt
    4. 指构建后在远程应用服务器上执行的命令。

注意:这里执行命令的用户同样是以下图中的Username 里填写的用户的身份执行的。假如执行命令是执行一个在远程应用服务器上的一个脚本,那么路径和文件都必须存在,并且,脚本中的任何相对路径都会相对于此用户的家目录。

image.png

在配置完毕的项目上进行构建

image-20181118125520350-2516920.png

13.png
14.png

检查远程应用服务器

以下就是构建完成后把 target 目录下的任何 jar包传输到远程应用服务器上的 /opt/student

[root@linux ~]# cd /opt/student/
[root@linux student]# ls
my-app-1.0-SNAPSHOT.jar
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容