jenkins 是一个开源软件项目,是基于 java 开发的一种持续集成工具,本文是对 jenkins2.176(目前最新稳定版) 进行安装和配置,实现 gitlab 上获取项目,并进行持续化自动部署。

jenkins从gitlab上拉取的项目在 /var/lib/jenkins/workspace 目录下面

一、jenkins 安装部署

1. jenkins 下载和安装

到 Jenkins download and deployment 官网下载,jenkins 分为 两种版本 Long-term Support (LTS) 和 Weekly。我们选择第一个版本LTS也就是稳定版。本文采用rpm包进行安装。下载完后将 jenkins-2.176.1-1.1.noarch.rpm 上传到 linux 服务器上,并执行以下命令进行安装:

[root@test ~]# rpm -ivh jenkins-2.176.1-1.1.noarch.rpm
warning: jenkins-2.176.1-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...1:jenkins-2.176.1-1.1              ################################# [100%]
[root@test ~]# 

若能找到 jenkins.war 包就是成功了,并且可以用这个war 包部署到 tomcat 下进行启动使用。

[root@test ~]# find / -name "jenkins.war"
/usr/lib/jenkins/jenkins.war

2. 配置java

2.1 vim /etc/init.d/jenkins 进入 jenkins 配置文件进行编辑,主要是 将 自己安装jdk的位置配在 candidates 值里面

如果没有安装openjdk,自己安装的 jdk又没配在 candidates 里面,则 jenkins 会启动失败。

2.2 /etc/init.d/jenkins 配置更改后,一定要 systemctl daemon-reload

systemctl daemon-reload

注意:
如果不执行 systemctl daemon-reload ,无论是启动,关闭jenkins还是查看jenkins状态,都会提醒你

3. 启动 jenkins

[root@test ~]# systemctl start jenkins
[root@test ~]# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation ServerLoaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)Active: active (running) since Tue 2019-07-09 10:09:18 CST; 7min agoDocs: man:systemd-sysv-generator(8)Process: 20492 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)CGroup: /system.slice/jenkins.service└─20513 /usr/local/java/jdk1.8.0_161/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/l...Jul 09 10:09:17 test systemd[1]: Starting LSB: Jenkins Automation Server...
Jul 09 10:09:17 test runuser[20497]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)
Jul 09 10:09:18 test systemd[1]: Started LSB: Jenkins Automation Server.
Jul 09 10:09:18 test jenkins[20492]: Starting Jenkins [  OK  ]
[root@test ~]#

jenkins 启动、关闭、查看状态相关命令:

systemctl start jenkins.service     启动jenkins
systemctl enable jenkins.service     设置jenkins 开机启动
systemctl stop jenkins.service     关闭jenkins
systemctl status jenkins.service    查看 jenkins 的状态

4. 访问安装

打开浏览器,访问 ip:8080 进行安装,ip为linux机器ip

提示需要输入管理员密码,从它指定的日志中找到密码 8175576cd43e484787faf2f3d507544a,输入进去,点击 “继续” 按钮,会初始化一小段时间

这里我选择 安装推荐的插件

这里就已经开始在安装插件,我们等它安装完就好了。

5. 创建首个管理员用户

上面等插件安装完后,就进入到下面界面,提示要创建第一个admin用户,并设置用户名密码

这里我直接创建用户名为 admin, 密码自定义,如下图:

点击 保存并完成

提示配置 jenkins URL, 这里保持默认即可,继续点击 保存并完成

提示 jenkins 已经就绪,开始使用 jenkins



  • 查看jenkins的配置文件:

/etc/sysconfig/jenkins

(该文件重要性类似于mysql的 /etc/my.cnf, tomcat 的 server.xml, nginx的 nginx.conf)

//查看jenkins的配置文件,定义了home、JAVA_CMD、user、port等基础配置,保持默认即可
[root@test ~]# cat /etc/sysconfig/jenkins
## Path:        Development/Jenkins
## Description: Jenkins Automation Server
## Type:        string
## Default:     "/var/lib/jenkins"
## ServiceRestart: jenkins
#
# Directory where Jenkins store its configuration and working
# files (checkouts, build reports, artifacts, ...).
#
JENKINS_HOME="/var/lib/jenkins"## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Java executable to run Jenkins
# When left empty, we'll try to find the suitable Java.
#
JENKINS_JAVA_CMD=""## Type:        string
## Default:     "jenkins"
## ServiceRestart: jenkins
#
# Unix user account that runs the Jenkins daemon
# Be careful when you change this, as you need to update
# permissions of $JENKINS_HOME and /var/log/jenkins.
#
JENKINS_USER="jenkins"## Type:        string
## Default: "false"
## ServiceRestart: jenkins
#
# Whether to skip potentially long-running chown at the
# $JENKINS_HOME location. Do not enable this, "true", unless
# you know what you're doing. See JENKINS-23273.
#
#JENKINS_INSTALL_SKIP_CHOWN="false"## Type: string
## Default:     "-Djava.awt.headless=true"
## ServiceRestart: jenkins
#
# Options to pass to java when running Jenkins.
#
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"## Type:        integer(0:65535)
## Default:     8080
## ServiceRestart: jenkins
#
# Port Jenkins is listening on.
# Set to -1 to disable
#
JENKINS_PORT="8080"## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# IP address Jenkins listens on for HTTP requests.
# Default is all interfaces (0.0.0.0).
#
JENKINS_LISTEN_ADDRESS=""## Type:        integer(0:65535)
## Default:     ""
## ServiceRestart: jenkins
#
# HTTPS port Jenkins is listening on.
# Default is disabled.
#
JENKINS_HTTPS_PORT=""## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Path to the keystore in JKS format (as created by the JDK 'keytool').
# Default is disabled.
#
JENKINS_HTTPS_KEYSTORE=""## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Password to access the keystore defined in JENKINS_HTTPS_KEYSTORE.
# Default is disabled.
#
JENKINS_HTTPS_KEYSTORE_PASSWORD=""## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# IP address Jenkins listens on for HTTPS requests.
# Default is disabled.
#
JENKINS_HTTPS_LISTEN_ADDRESS=""## Type:        integer(1:9)
## Default:     5
## ServiceRestart: jenkins
#
# Debug level for logs -- the higher the value, the more verbose.
# 5 is INFO.
#
JENKINS_DEBUG_LEVEL="5"## Type:        yesno
## Default:     no
## ServiceRestart: jenkins
#
# Whether to enable access logging or not.
#
JENKINS_ENABLE_ACCESS_LOG="no"## Type:        integer
## Default:     100
## ServiceRestart: jenkins
#
# Maximum number of HTTP worker threads.
#
JENKINS_HANDLER_MAX="100"## Type:        integer
## Default:     20
## ServiceRestart: jenkins
#
# Maximum number of idle HTTP worker threads.
#
JENKINS_HANDLER_IDLE="20"## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Pass arbitrary arguments to Jenkins.
# Full option list: java -jar jenkins.war --help
#
JENKINS_ARGS=""
  • 查看程序主目录

 /var/lib/jenkins

该目录作用类似于mysql my.cnf中配置的datadir

jobs  浏览器上面创建的任务都会存放在这里。包含jenkins管理的构建作业的配置细节、构建产物和数据。查看jobs目录内容,如下:
    目录下存放该项目的所有的构建历史;
    文件存储了该 build job 的所有配置细节;
    文件记录了这个构建任务在下一次构建时的数字序号和分别时最近稳定构建和最近成功的构建的符号链接;
    job 目录下存放的项目的构建历史会随着时间而不断增多,从而使得jobs目录不断变大。
logs  存放jenkins相关的日志
nodes  多节点时用到
plugins  插件所在目录
secrets  密码密钥所在目录
workspace 存放jenkins项目的默认工作空间。也可以在创建每个项目时勾选“Use custom workspace”,指定具体某个项目的自定义工作空间。
users 存放着jenkins登录账号信息

其中,jobs 和 plugins 目录比较重要



二、jenkins 与 gitlab结合

1. 查看插件:

系统管理 --> 插件管理

“可选插件” 是未安装的插件。“已安装”是已经安装的插件,其中勾选为灰色的为不可卸载的插件。

2. 安装相应插件

2.1 安装 Maven Integration 插件

安装了该插件后,在新建任务时,任务类型中才会有“构建一个maven项目”,如图:

2.2 安装 “Publish Over SSH” 插件

如果需要将打好的包分发到远程的服务器,那么就需要安装一个 Publish Over SSH 插件。这样的话,我们就可以在jenkins配置中直接使用远程拷贝了,把包直接拷贝到远程服务器。

2.3 安装 git 插件

如果在 “可选插件” 里没有搜到,可能默认已经安装了,可以在 “已安装” 里查询。

2.4 安装 GitLab 插件

2.5 安装 Version Number 插件

安装了Version Number插件后,可以在配自动部署时构建环境中配置自定义版本号

详情配置:

Version Number Format String详情:

${JOB_NAME}_${BUILD_DATE_FORMATTED, "yyyyMMdd"}.${BUILDS_TODAY}

BUILD_VERSION 效果如下:

yanshi-springboot_20210915.3

2.6 安装pipline插件(打算采用pipline方式自动部署的话)

2.7 安装完插件后,直接在linux机器上重启 jenkins 服务,而不是勾选空闲时重启

systemctl restart jenkins

3 获取 jenkins 连接 gitlab 所需的 access token

jenkins 连接 gitlab 需要配置access token ,所以先在 gitlab 上生成 access token,后将该token配置在jenkins上。(access token只需配置一次,后续每个工程直接使用即可)

3.1 获取连接token

1) 登录gitlab,点击用户头像下拉图标,选择 “Setting”

2)点击“Access Tokens”,输入 "Name" 和 "Expires at",勾选 "api":

3) 点击 “Create personal access token”,生成 access token,记录下来。

4 在jenkins上配置 gitlab

浏览器登录Jenkins web前端界面,点击 系统管理 ---> 系统设置 ---> Gitlab

a) Connection name 随便填;
b) Gitlab host URL   填Gitlab 的域名地址,例如 http://gitlab.yourdomain.com/;
c) Credentials 配置

点击 “添加” 下来框,点击 “jenkins” ;

d) 弹出框里,kind 选择 “GitLab API token”, 将之前复制备用的Private token 粘贴到 API token 输入框中,然后点击 “添加”

e) 选择刚刚新建的 Credentials: GitLab API token, 点击 “Test Connection” 按钮,测试一下能否连接成功,正常情况下因该返回 Success

f) 完成后点击页面底部的 “应用” 按钮,再点击 “保存” 按钮。

注意:如果测试连接不成功,通常是当前节点不能解析 gitlab.yourdomain.com 域名导致的,设置正确的DNS或者 hosts即可。

注意:(2020.02.10 补充笔记)

4 在jenkins上配置 gitlab  的补充说明:

Jenkins > Manage Jenkins > Configure System > Gitlab   可不配置

直接配置凭据即可。

配置凭据方法: 

Jenkins > 凭据

点击全局凭据,进入全局凭据页面 (详细路径即:Jenkins > 凭据 > 系统 > 全局凭据),左侧边栏会出现 “添加凭据” 选项

点击“添加凭据” , Add Credentials , 具体内容如下,最后点击 OK,保存。(Kind选择 Username with password)

结束。

三、 jenkins全局工具配置(maven,jdk,git)

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

1 jdk 配置

新增jdk,如下

2 Git 配置

2.1 安装git

yum -y install git

安装完后,不再有红色告警提示:

3. Maven配置

新增maven,如图

(提示:maven也可以通过命令 yum -y install maven  进行安装,yum安装的maven其 settings.xml文件在/etc/maven/目录下,其MAVEN_HOME为 /usr/share/maven)

四 创建任务从gitlab上拉取maven项目自动打包并发布到远程服务器

这里我们发布到 远程192.168.158.129 服务器

1 在jenkins服务器上生成一对密钥

ssh-keygen -t rsa

[root@test ~]# cd .ssh    //系统默认不带 .ssh文件
bash: cd: .ssh: No such file or directory
// 生成密钥对
[root@test ~]# ssh-keygen -t rsa        // 如果之前生成过密钥对,那可以直接用,不需要再生成
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.         // 自动生成 /root/.ssh 文件夹
Enter passphrase (empty for no passphrase):   // 直接回车,也可以设置密码
Enter same passphrase again:                  // 直接回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:uYpPQZBJkXb5uRw5Ugxs4GFG/qGuVALRZyecHqmwxJc root@test
The key's randomart image is:
+---[RSA 2048]----+
|o. +@X.+         |
|.+.E&o* o        |
|oo.*o*oo o       |
|... .+..*.       |
|  . o ooS+       |
|   +   .o.       |
|  . . . .        |
| . . o .         |
|  . ..o          |
+----[SHA256]-----+
[root@test ~]# 

生成的密钥对如下:

[root@test ~]# ls /root/.ssh/
id_rsa  id_rsa.pub

其中id_rsa 是私钥,id_rsa.pub是公钥

2 将jenkins服务器的公钥加到远程服务 192.168.158.129 上

mkdir -p /root/.ssh

cd /root/.ssh && touch authorized_keys

将jenkins服务器的公钥复制到 authorized_keys中

3 系统管理-->系统设置,找到“Publish over SSH”,进行配置

“Passphrase” 填写之前生成密钥时设置的密码,没有则留空,“Path to key” 留空,“Key” 粘贴 私钥文件 /root/.ssh/jenkins文件内容 。

然后新增 “SSH Servers”, 填入对应的hostname,这就是要发布到的目标服务器

此时,可以点击 “Test Configuration” 按钮,测试一下,正常情况,会显示 Success.

如果有多台 web server, 可以继续新增,重复以上操作,最后点击保存。

4 新建任务

回到首页,点击“新建任务”,自定义任务名称,选择“构建一个maven项目”

点击 “确定”按钮。

源码管理选择 git , Repository URL 填写 git 仓库的地址:

点击,添加 ---> Jenkins,创建 Jenkins凭据 Credentials

jenkins 构建任务触发器:

构建方式解释:

Build periodically (定时构建):周期进行项目构建(它不care源码是否发生变化)

Poll SCM (轮询 SCM):定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。

Build whenever a SNAPSHOT dependency is built:意思是依赖于快照的构建,应该是当gitlab或svn等有修改时就构建项目。

默认会勾选 “Build whenever a SNAPSHOT dependency is built”

定时器构建语法
* * * * *
星号中间用空格隔开第一个*表示分钟,取值0~59
第二个*表示小时,取值0~23
第三个*表示一个月的第几天,取值1~31
第四个*表示第几月,取值1~12
第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日用法举例:每30分钟构建一次:H代表形参
H/30 * * * *每2个小时构建一次:
H H/2 * * *每天中午下班前定时构建一次
0 12 * * *每天下午下班前定时构建一次
0 18 * * *每天的8点,12点,22点,一天构建3次: (多个时间点中间用逗号隔开)
0 8,12,22 * * *每天早上8点到晚上6点每三小时检查一次
H 8-18/3 * * *每两小时的45分,从上午9:45开始,每天下午3:45结束
45 9-16/2 * * 1-5每两小时一次,每个工作日上午九点到下午5点(也许时上午10:37,下午12:37,下午2:37,下午4:38)
H H(9-16)/2 * * 1-5

选择“构建触发器”,勾选“Pull SCM”,这个选项会每隔一段时间检查一下GitLab仓库中代码是否有更新,有的话就执行构建操作。日程表如何设置,在这个输入框下面有说明。

构建环境:

Pre Steps:

构建(Build):

使用maven.test.skip,不但跳过单元测试的运行,也跳过测试代码的编译。举例,如下图:

Post Steps:

我这里要求构建成功后把war文件复制到指定的目录,然后停运tomcat,删除项目web目录,启动tomcat。

特别说明:

我在 “系统管理” ---> "系统设置" 里面,配置 “Publish Over SSH“ 时,其中 SSH Servers中, 对于 server192.168.158.129我配置的文件存放远程根目录为:/app/jenkins,如下图。所以 我实际把打包好的war包发布到了远程服务器192.168.158.129的 /app/jenkins/pro1 目录下。

在 192.168.158.129 的 /app/jenkins/pro1 目录下查看远程发布过来的war包:

注意事项:

/app/jenkins 目录必须要手动创建

mkdir -p /app/jenkins

/app/jenkins/下的pro1目录会自动生成,不需要手动创建

使用脚本举例:

构建设置: --- 可选设置

设置邮件通知。

构建后操作(和Post Steps功能类似)

(Post Steps,可选设置 ),

5 构建项目

在工作区域的左边菜单上点击“立即构建”,开始构建项目

如果构建成功,则项目状态的S为蓝色,如果失败为红色。

参考:

如果jenkins制定完任务后,点击立即构建,jenkins 在构建项目时无法在maven仓库生成jar包父目录,导致无法下载jar包

控制台报错:
Failed to create parent directories for tracking file /usr/local/maven/repository/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom

解决方案可参看:
jenkins 在构建项目时无法在maven仓库生成jar包父目录,导致无法下载jar包_wudinaniya的博客-CSDN博客



打包后处理操作命令优化:

优化命令:
关闭tomcat, 删除 老的war数据 ,备份旧war追加日期时间后缀;把新打好的包移过来,最后重启tomcat

export PATH="/usr/local/java/bin:$PATH"
cd /home/work/apache-tomcat-7.0.94
#关闭tomcat
bin/shutdown.sh
#备份
rm -rf  webapps/testdemo-1.0.0
mv webapps/testdemo-1.0.0.war webapps/testdemo-1.0.0.war.bak`date +%Y%m%d_%H%M`
#移动项目
mv /app/jenkins/pro1/*.war  /home/work/apache-tomcat-7.0.94/webapps
#重启tomcat
bin/startup.sh

(未完,待续)

打包后处理操作命令优化方式2:---使用脚本

deploy.sh 内容如下:

#!/bin/bash
export PATH="/usr/local/java/bin:$PATH"
war=/app/jenkins/pro1/testdemo-1.0.0.war
if [ -f $war ]
thencd /home/work/apache-tomcat-7.0.94/webapps#关闭ps aux | grep tomcat |grep -v grep|cut -c 9-15|xargs kill -9sleep 10echo "服务已停!"#备份mv testdemo-1.0.0.war testdemo-1.0.0.war.bak`date +%Y%m%d_%H%M`rm -rf testdemo-1.0.0sleep 10#移动项目mv $war .#重启../bin/startup.shecho "服务已重启!"
elseecho "war包不存在!"
fi

CentOS7 安装配置 jenkins 及 自动从gitlab上拉取代码自动打包并发布到远程tomcat服务器相关推荐

  1. 从gitlab上拉代码_从gitlab上拉取代码并一键部署

    一.gitlab安装 GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目. GitLab拥有与Github类 ...

  2. git ssh配置完后拉取代码_使用git在gitlab上拉取代码的方法

    最近在项目中用到了gitlab,他是一个类似于github的代码托管工具. 因为是个初级菜鸟第一次使用还不太熟悉,所以在此记录一下. 1.首先需要使用github的注册账号登录gitlab,查看右上角 ...

  3. jenkins搭建教程及使用ant对非maven的javaweb项目进行打包发布到远程tomcat服务器

    一.环境准备 (1)CentOS 7 (2)关闭防火墙.关闭selinux 二.软件安装 使用jenkins前需要安装jdk和maven,安装过程相信大家都了解,就不在这里赘述了. jenkins安装 ...

  4. 如何从Gitlab上拉取代码

    很多人新入公司时不知如何从Git上拉取远程代码,这里进行详细介绍 1.在进入公司后,你要申请一个git账号 2.之后公司会给你的git账号授权,你就可以访问公司的项目代码了 3.点击你想拉取的项目,进 ...

  5. vnc安装linux教程,Centos7安装配置vncserver详细教程

    CentOS7安装配置vncserver教程 一.安装VNC 首先要保证目标服务器安装有图形化环境,Linux系统下常见的桌面环境有GNOME和KDE,这里我们首先通过Group的方式安装GNOME桌 ...

  6. Centos7 安装,配置静态IP

    Centos7 安装,配置静态IP 本文采用桥接方式 镜像地址 下载好镜像后使用vmware虚拟机进行安装即可(注意设置root密码). 安装完成后使用root登录,输入设置好的密码 设置静态ip v ...

  7. Docker安装配置Jenkins教程

    Docker安装配置Jenkins教程 前言 准备工作 一.安装Docker 1.安装 2.查看版本信息 二.配置Docker 镜像加速 1.编辑docker配置文件 2.配置镜像地址,编辑文件内容为 ...

  8. Centos7 安装配置 tomcat 并设置自动启动

    Centos7 安装配置 tomcat 并设置自动启动 下载安装包 这里选择适合Linux的安装包,下载到本地后上传到centos服务器,或者直接通过wget命令下载 1 2 3 4 # cd /us ...

  9. centos7安装配置vsftp搭建FTP

    参考文章: CentOS7下安装FTP服务 详解CentOS7安装配置vsftp搭建FTP centos7之vsftp安装和使用 1.安装vsftp # 查看是否已安装 方法一 [root@local ...

最新文章

  1. Nibiru Open Day,OZO 遇见 DigiArtist 国际数字艺术展
  2. javascript之温习闭包
  3. 基于visual Studio2013解决C语言竞赛题之1081shell排序
  4. python画圆形螺旋线_PS画结构素描与示范-金属管道台灯(电脑绘画)
  5. 【Android】SlidingMenu属性详解(转)
  6. c语言读取acc文件的采样率,C语言文件操作:打开检查文件指针访问模式
  7. docker 安装elasticsearch
  8. 在Angular专家Dan Wahlin的免费33部分课程中学习Angular
  9. collection集合 多少钱_Java集合框架大汇总,建议收藏
  10. c++求区间第k大数_翔哥炒股经验23 K线形态学50节 第10节:K线区间震荡
  11. 华为笔试题 简答错误记录(字符串处理,好题!!!)
  12. 拓端tecdat|matlab实现MCMC的马尔可夫转换MS- ARMA - GARCH模型估计
  13. python函数参数是数据库表名_Python-sqlite中的变量表名称
  14. Python单机版经典塔防游戏源代码
  15. C语言自学笔记(20)
  16. 十套精美个人博客网站模板
  17. The remote device or resource won't accept the connect
  18. 微信支付(小程序微信支付)
  19. P2550 [AHOI2001]彩票摇奖(C语言)
  20. 人生节点 | 2021年终总结2022年度计划

热门文章

  1. iis网站服务器端口设置,iis服务器端口设置方法
  2. cordic sinh matlab,cordic算法的应用(三角函数、相位模值、乘法除法、双曲函数、指数平方差)...
  3. Hbase伪分布式部署
  4. SqlSeve之数据库基本操作(增删改)
  5. 11自由度非线性整车动力学模型微分方程介绍(汽车悬架、制动和转向三大子系统耦合)
  6. 舆情监控系统有哪些功能,行者AI告诉你
  7. Linux初学者学习方法
  8. android手机log文件工具,怎么在android手机上查看log
  9. 灵雀云获Gartner® 首份《DevOps平台魔力象限报告》“荣誉提及”
  10. NGS基础 - 高通量测序原理