持续集成交付CICD:Jenkins部署

目录

一、理论

1.CI/CD

2.Gitlab内置持续集成

3.Jenkins安装与部署

4.Gitlab服务部署

5.Jenkins服务部署

6.Tomcat服务部署

7.Jenkins–Pipeline流水线项目构建

二、实验

1.Gitlab服务部署

2.Jenkins服务部署

3.Tomcat服务部署

4.Jenkins–Pipeline流水线项目构建

三、问题

1.报错FirewallD is not running

2.Gitlab报错502

3.Gitlab提交代码申明报错

4.linux下安装新JDK

5.jenkins插件scale安装失败

6.Jenkins中正则表达式未匹配

7.Gitlab界面添加SSH key报错ssh key已经存在

8.连接 Gitlab的PostgreSql数据库有哪些方式

9.Jenkins新建项目中源码管理使用Git时

10. jenkins登录报错

11.tomcat账户密码登录报错

12.jenkins添加Git项目时报错

13.jenkins 设置Git sshkey 凭证后报错

14.流水线进行编译打包失败

15.流水线报错 mvn: 未找到命令

四、总结


一、理论

1.CI/CD

(1)概念

① CI:

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了 新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确 地集成在一起。

② CD:

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近 真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环 境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。

2.Gitlab内置持续集成

(1)概念

① 持续集成(CI)

1)集成团队中每个开发人员提交的代码到代码存储库中。

2)开发人员在merge或者pull请求中合并拉去新的代码。

3)在提交或者合并更改到代码库之前,会触发了构建,测试和新代码验证的管道。

4)CI 可帮助您在开发周期的早期发现并减少错误。

② 持续交付(CD)

1)可通过结构化的部署管道确保将经过CI验证的代码交付给您的应用程序。

2)CD可以将经过验证的代码更快地移至您的应用程序。

③ 持续集成交付(CI/CD)

持续集成交付CICD:Jenkins部署_第1张图片

CI/CD一起可以加快团队为客户和利益相关者交互成果的速度。CI 和 CD必须无缝协作,以使您的团队快速有效的进行构建,并且对于确保完全优化的开发实践至关重要。

持续集成交付CICD:Jenkins部署_第2张图片

④ 设计步骤

根据持续集成的设计,代码从提交到生产,整个过程有以下几步:

1)提交
流程的第一论,是开发者向代码仓库提交代码。所有后面的步骤都始于本地代码的一次提交(commit)
测试(第一轮)
代码仓库对commit操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试.

2)构建
通过第一轮测试,代码就可以合并进主干。就算可以交付了。
交付后,就先进行构建(build),再进入第二轮测试。所谓构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源〔样式表、JS脚本、图片)等等。
测试(第二轮)
构建完成,就要进行第二轮测试。如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然,这时构建步骤也要移到第一轮测试前面。

3)部署
过了第二轮测试,当前代码就是一个可以直接部署的版本(artifact)。将这个版本的所有文件打包(tarfilename.tar*]存档,发到生产服务器。

4)回滚
一旦当前版本发生问题,就要回滚到上一个版本的构建结果。最简单的做法就是修改一下符号链接,指向上一个版本的目录。

(2) Gitlab的CI/CD优势

1)开源:ci/cd是开源gitlab社区版和专有gitlab企业版的一部分。
2)易于学习:具有详细的入门文档。
3)无缝集成:gitlab的ci/cd是gitlab的一部分,支持从计划到部署,具有出色的用户体验。
4)可扩展:测试可以在单独的计算机上分布式运行,可以根据需要添加任意数量的计算机。
5)更快的结果:每个构建可以拆分为多个作业,这些作业可以在多台计算机上并行运行。
6)针对交付进行了优化:多个阶段、手动部署、环境和变量。

持续集成交付CICD:Jenkins部署_第3张图片

(3)Gitlab的CI/CD特点

1)多平台:UNIX,WINDOWS,macOS和任何其他支持GO的平台上执行构建。

2)多语言:构建脚本是命令行驱动的,并且可以与java、php、ruby、c和其他语言一起使用。

3)稳定构建:构建在gitlab不同的机器上运行。

4)并行构建:gitlab CI/CD在多台机器上拆分构建,以实现快速执行。‘

5)实时日志记录:合并请求中的链接将您带到动态更新的当前构建日志。

6)灵活的管道:您可以在每个阶段定义多个并行作业,并且可以触发其他构建。

7)版本管道:一个.gitlab-ci.yml文件包含您的测试,整个过程的步骤,是每个人都能贡献更改,并确保每个分支
获得所需的管道。

8)自动缩放:您可以自动缩放构建机器,以确保立即处理您的构建并降低成本。

9)构建工件:您可以将二进制文件和其他构建工件上载到gitlab并浏览和下载它们。

10)docker支持:可以使用自定义docker镜像,作为测试的一部分启动服务,构建新的dockers镜像,甚至可以在k8s上运行。

11)容器注册表:内置的容器注册表,用于存储,共享和使用容器镜像。

12)受保护的变量:子啊部署期间使用受每个环境保护的变量安全地存储和使用机密。
环境:定义多个环境。

持续集成交付CICD:Jenkins部署_第4张图片

(4)Gitlab的CI/CD组件

为了运行测试,至少需要一个 GitLab 实例、一个 GitLab Runner、一个gitlab-ci文件:

① Gitlab CI/CD

1)Gitlab的一部分,Gitlab是一个web应用程序,具有将其状态存储在数据库中的API。

2)除了Gitlab的所有功能之外,它还管理项目、构建并提供一个不错的用户界面。

② Gitlab Runner

1)是一个处理构建的应用程序。

2)它可以单独部署,并通过API 与 Gitlab CI/CD 一起使用。

持续集成交付CICD:Jenkins部署_第5张图片

③ .gitlab-ci.yml

定义流水线作业运行,位于应用项目根目录下 。

持续集成交付CICD:Jenkins部署_第6张图片

(5)  Gitlab CI/CD工作原理

1)将代码托管到git存储库中;

2)在项目根创建ci文件 .gitlab-ci.yml,在文件中指定构建,测试和部署脚本;

3)gitlab将检测到它并使用名为gitlab runner的工具运行脚本;

4)脚本被分组为作业,它们共同组成了一个管道。

持续集成交付CICD:Jenkins部署_第7张图片

管道状态也会由GitLab显示:

持续集成交付CICD:Jenkins部署_第8张图片

最后,如果出现任何问题,可以轻松地 回滚所有更改:

持续集成交付CICD:Jenkins部署_第9张图片


3.Jenkins安装与部署

(1) 概念

官网:https://www.jenkins.io/

Jenkins是一个广泛用于持续集成的可视化web自动化工具,Jenkins可以很友好的支持各种语言的项目构建,也可以完全兼容ant maven、gradle等多种第三方构建工具,同时跟svn git能无缝集成,也支持直接与知名源代码托管网站,比如 github、bitbucket直接集成,而且插件众多,在这么多年的"技术积累之后,在国内大部分公司都有使用Jenkins。

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具。主要做的事情就是从git中拉取代码,根据配置信息打包;把打好的包传输到目标服务器,并可以执行一些shell脚本,使项目打包发布一键完成。
 

持续集成交付CICD:Jenkins部署_第10张图片

(2)特点

1)开源的ava语言开发持续集成工具,支持持续集成,持续部署。

2)易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。

3)消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。

4)分布式构建:支持Jenkins能够让多台计算机一起构建/测试。

5)文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。

6)丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

(3)安装和持续集成环境配置

使用三台服务器:一台Gitlab仓库服务器、一台Jenkins服务器(JDK、Git、Maven)、一台Tomcat测试服务器。

持续集成交付CICD:Jenkins部署_第11张图片

4.Gitlab服务部署

(1)介绍

官网:https://about.gitlab.com/

GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

(2)Gitlab与Github区别

GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发。
Github服务器在别人手上,所有的代码需要上传到别人的服务器上。Gitlab可以看作是一个个人版的Github。

(3)Gitlab安装

1.安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix
2.启动ssh服务&设置为开机启动
systemctl enable sshd && systemctl start sshd
3.设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix
4.开放ssh以及http服务,然后重新加载防火墙列表
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
如果关闭防火墙就不需要做以上配置
关闭防火墙和增强机制
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
#使用命令行模式在线下载
1)第一个下载源
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ol/7/gitlab-ce-12.10.14-ce.0.el7.x86_64.rpm/download.rpm

2)第二个下载源
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/gitlabce/yum/el7/gitlab-ce-12.10.14-ce.0.el7.x86_64.rpm
#--no-check-certificate 不进行证书验证


#安装
rpm -ivh gitlab-ce-12.10.14-ce.0.el6.x86_64.rpm

(4)修改Gitlab配置

vim /etc/gitlab/gitlab.rb
external_url 'http://xxxxxxx' #29行,ip地址:端口;外部访问的地址
nginx['listen_port'] = 82 #1197默认注释。修改为82端口
unicorn['worker_processes'] = 2 #736行,设置gitlab占用内存大小

重载配置及启动gitlab

gitlab-ctl reconfigure #重新加载配置

gitlab-ctl restart #重启服务

#开机自启
systemctl enable gitlab-runsvdir.service

试着用IP 直接访问 IP:82

http://192.168.204.8:82/

修改管理员密码后,即可登录

(5)Gitlab用户管理

创建用户组

组名: test
组描述:no
组权限: Private

权限等级分三种:

1)Private 私有的,只有你自己或者组内的成员能访问

2)Internal 所有登录的用户

3)Public 公开的,所有人都可以访问

创建项目

Project name(项目名) : web test
Visibility level: Private

代码上传

#安装git
yum install -y git

git config --global user.name "root" #全局声明
git clone http://192.168.204.8:82/root/web-test.git #将项目克隆到服务器
输入密码:(之前修改的)
cd web-test #切换目录
git add . #将代码上传到工作区
git commit -m "Initial commit" #提交代码申明
git push -u origin master #将代码推送到Gitlab

用户创建

菜单栏More选择Admin Area

创建新用户: New user

Name: david
Username: david
Email: [email protected]

#项目上限
Project limit: 100000
Access level: Regular (普通用户类型)
              Admin (可以访问所有)

点击创建,在生成用户的右侧点击创建密码
点下面的保存你修改,save change!

④ 添加用户到组

菜单Groups选择Explorer groups

#添加用户 
Gitlab member or Email address:david

#选择用户权限
Choose a role permission: Owner

#激活
Invite

Gitlab用户在组里面有5种不同权限:

1)Guest:可以创建issue、发表评论,不能读写版本库

2)Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限

3)Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限

4)Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限

5)Owner:可以设置项目访问权限·Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限

⑤使用新用户登录,第一次登录系统会让更改密码

5.Jenkins服务部署

(1)安装

官网:https://www.jenkins.io/

华为云下载jenkins:

Index of jenkins-local/redhat-stable (huaweicloud.com)
新版的Jenkins需要安装JDK11的JAVA环境,所以我们首先要配置JDK

Java Archive Downloads - Java SE 11 | Oracle 中国
下载完之后拖到opt目录下

cd /opt

#安装JDK11
rpm -ivh jdk-11.0.15.1_linux-x64_bin.rpm
#安装Jenkins
rpm -ivh jenkins-2.332.3-1.1.noarch.rpm

(2)  修改Jenkins配置文件

vim /etc/sysconfig/jenkins
JENKINS_PORT="8080" #修改默认端口,根据所需修改
systemctl start jenkins.service

在浏览器访问IP:端口 (记得这里要把防火墙给关闭)

#查看密码
cat/var/lib/jenkins/secrets/initialAdminPassword

在浏览器访问,选择自行选择插件安装,选择None全部不安装

第一次进入后,会让创建一个管理员账户与密码

(3)Jenkins添加汉化插件

Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索Chinese、Locale插件

在Manage Jenkins–>Configure System中设置如下

zh_CN

解决插件安装完,中文简体部分不翻译在Locale中,将语言设置为en_US,重启,再设置为zh_CN;注:zh_TW为中文繁体(因为版本问题可能会导致部分英文无法被识别)

Locale插件需要在2.346.3版本及以上安装

 (4)用户权限管理

① 安装插件

Role-based Authorization Strategy:主要用于用户权限管理

系统管理-全局安全配置-授权策略选择刚添加的role-based

添加完后可以再管理界面看到如下功能选项

Manage and Assign Roles

点击进入

Glabal rales (全局角色):管理员等高级用户可以创建基于全局的角色
Project roles(项目角色)︰针对菜个或者某些项目的角色
Node rales(节点角色)︰节点相关的权限

 添加角色

添加以下三个角色:
TEST: 该角色为全局角色。这个角色需要绑定Dverall下面的Read权限,是为了给所有用户绑定最基本的jenkins访问权限。
注意:如果不给后续用户绑定这个角色,会报错误:用户名is missing the Overall/Read permission
test1:该角色为项目角色。使用正则表达式绑定david.*,意思是只能操作zzh开头的项目。
test2:该角色也为项目角色。绑定mao.*,意思是只能操作wxd开头的项目。

③ 创建用户

路径:系统管理–>管理用户–>新建用户
新建两个用户001与002

用户名:001
密码:XXXXXXXX
确认密码:XXXXXXXX
全名:001

用户名:002
密码:XXXXXXXX
确认密码:XXXXXXXX
全名:002

查看用户列表

④ 切换账户

http://192.168.204.15:8080

⑤ 权限分配

系统管理–>Manage and Assign Roles–>Assign Roles

#先在这添加001 002
1)Add
001  002

#接着进行全局授权,test是只读权限,admin为管理员权限
2)TEST:001 002
   admin: david

#添加要授权的账户
3)Add
001  002

#项目角色授权
001: 有权访问test1的项目
002: 有权访问test2的项目

⑥ 项目创建

在首页新建任务中,创建两个自由风格项目

#构造一个自由风格的软件项目
david001
mao001

切换账户进行访问

001
002

(5)  Jenkins凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。

① 安装Credentials Binding插件

点全局创建凭据

安装完插件后在系统管理,多了两个功能菜单

路径:系统管理–>Manage Credentials

Username with password:用户名和密码 比如使用Gitlab拉取代码
SSH Username with private key:使用SSH用户和密钥 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的凭证。

② 安装Git插件和Git工具

为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOs7上安装Git工具Git插件安装

插件所搜Git
随便选择一个项目
点击配置,多了git选项

打开服务器安装Git工具

yum install -y git #安装git工具
git --version #查看git版本

(6) 配置Gitlab凭证

SSH免密登录

路径:系统管理-->Manage Credentials
在Gitlab服务器上,使用root用户生成钥匙对

ssh-keygen
#/root/.ssh/目录保存公钥和使用
id_rsa:私钥文件
id_rsa.pub:公钥文件
把生成的公钥放在Gitlab中,使用root用户登录Gitlab

Gitlab点击Settings

查看服务器上的公钥内容,添加密钥Gitlab

cat /root/.ssh/id_rsa.pub

将私钥复制到jenkins

cat /root/.ssh/id_rsa

生成后的凭证(如连接gitlab失败可采用令牌方式)

打开gitlab,选择仓库,复制仓库ssh克隆地址

选择一个项目
ssh:免费,需要密码

#在gitlab上面clone拉取http代码链接
URL: http://192.168.204.8:82/root/web-test.git

当免密登录ssh失败的时候,就选这里添加root账户密码然后前面选root登录就可以了

测试,选择david001的任务,选择立即构建进行拉取gitlab代码
 

#点击立即构建
Build Now

#控制台输出,可以查看详细信息,相当于操作日志
控制台输出: Finished SUCCESS 成功

(7) Maven部署

在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。Maven是编译java、Python的工具(后端打包工具)
Maven官网:https://maven.apache.org/download.cgi

① Maven 源概述

持续集成交付CICD:Jenkins部署_第12张图片

 安装Maven

上传Maven软件【在Jenkins的服务器上装】
 

tar -xf apache-maven-3.8.6-bin.tar.gz #解压
mv apache-maven-3.8.6 /usr/local/maven #移动文件
#配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/java/jdk-11.0.15.1
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
#刷新配置
source /etc/profile
mvn -v #查找Maven版本

③ Jenkins配置Maven

打开全局工具设置

新增JDK

别名:jdk11

#要与profile里面的一致
JAVA_HOME:/usr/java/jdk-11.0.15.1

#取消自动安装
Install automatically

③ 添加Maven

Name:maven3.8.6

MAVEN_HOME: /usr/local/maven

取消自动安装

应用保存
打开系统设置

#jdk开发工具包
键:JAVA_HOME
值:/usr/java/jdk-11.0.15.1

#maven编译工具
键:MAVEN_HOME
值: /usr/local/maven

#固定格式
键:PATH+EXTRA
值:$M2_HOME/bin

④  修改Maven的settings.xml

mkdir /opt/repo #创建本地仓库目录
vim /usr/local/maven/conf/settings.xml

6.Tomcat服务部署

(1) JDK配置

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#上传安装包
apache-tomcat-9.0.16.tar.gz #tomcat安装包
jdk-8u201-linux-x64.rpm #JDK安装包
#解压,安装JDK
rpm -ivh jdk-8u201-linux-x64.rpm

(2)  设置JDK环境变量

#新建文件
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
#刷新变量
source /etc/profile.d/java.sh

使用java -version查看版本
 

java -version

在服务台测试
mvn help:system
出现如下,则说明mvn配置正确
 

mvn help:system

(3) 安装Tomcat

#解压安装包
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm
tar -xf apache-tomcat-9.0.16.tar.gz
#移动解压包到指定目录
mv apache-tomcat-9.0.16 /usr/local/tomcat
#创建用户,便于管理服务
useradd -M -s /sbin/nologin tomcat
chown -R tomcat:tomcat /usr/local/tomcat
#添加启动脚本:
vim /etc/init.d/tomcat
#!/bin/bash
#chkconfig: 35 80 25
#description:Tomcat Service Control Script
start="/usr/local/tomcat/bin/startup.sh"
stop="/usr/local/tomcat/bin/shutdown.sh"
case "$1" in
start)
$start
;;
stop)
$stop
;;
restart)
$0 stop
$0 start
;;
*)
echo "$0 {start|stop|restart}"
esac
#设置:
chmod +x /etc/init.d/tomcat #添加执行权限
chkconfig --add tomcat #添加到系统服务
systemctl start tomcat
lsof -i:8080 #查看服务是否启动

(4)设置终端访问

#添加tomcat用户密码用于终端登录
vim /usr/local/tomcat/conf/tomcat-users.xml










#开启终端访问,修改以下配置,默认不许允许远程访问,现在需要注释掉
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
#重启服务
systemctl start tomcat

#查看服务状态
systemctl status tomcat.service

网页测试

http://192.168.204.13:8080

输入用户名和密码,点击manager_webapp

7.Jenkins–Pipeline流水线项目构建

(1)  Pipeline

概念

Pipeline,简单来说,就是一套运行在Jenkins上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。

使用Pipeline有以下好处

代码: Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。
持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。
可停止: Pipeline可接收交互式输入,以确定是否继续执行Pipeline。
多功能: Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能。
可扩展: Pipeline插件支持其DSL的自定义扩展,以及与其他插件集成的多个选项。

创建Jenkins Pipeline

Pipeline脚本是由Groovy语言实现的,但是我们没必要单独去学习Groovy
Pipeline支持两种语法: Declarative(声明式)和Scripted Pipeline(脚本式)语法
**Pipeline也有两种创建方法:**可以直接在Jenkins的Web UI界面中输入脚本;也可以通过创建一个Jenkinsfile脚本文件放入项目源码库中(一般我们都推荐在Jenkins 中直接从源代码控制(SCM)中直接载入Jenkinsfile Pipeline这种方法)。

(2)安装Pipeline插件

插件搜索Pipeline

新建流水线项目

Pipeline分为:脚本式、声明式,2.0以后推荐使用声明式脚本

声明式:以pipeline开头 stages之前,可以加入环境、jdk、maven等配置,
stages(一个)阶段下有多个stage,stage下有steps,拉取代码等操作

声明式脚本(Pipeline script)

pipeline {
agent any
stages {
stage('pull code') {
steps {
echo '开始拉取代码'
}
}
stage('build project') {
steps {
echo '开始构建'
}
}
stage('publish project') {
steps {
echo '正在部署'
}
}
}
}

点击构建,查看控制台输出

(3)拉取代码

选择checkout拉取代码
选择代码仓库:Git
URL: [email protected]:root/freestyle.git
Credentials:jenkins

点击生成脚本,将内容复制到脚本中

应用、保存、再次构建

能够看到刚刚的操作
查看Jenkins工作空间/var/lib/jenkins/workspace/

ls /var/lib/jenkins/workspace/

(4) 编译打包

流水线语法

mvn clean package

将代码放入脚本中

再次点击应用、保存,并构建
查看控制台输出

查看Jenkins工作空间

ls /var/lib/jenkins/workspace/

(5) 发布

① Tomcat认证

类型:Usename with password

用户名:tomcat

密码:添加tomcat的远程账户密码

生成密钥,将war包部署到tomcat上

插件安装Deploy to container

选择流水线语法,生成pipeline脚本
 

deploy adapters: [tomcat9(credentialsId: '8108a31f-a1bc-4350-9cfb-147bafaae1e8',
path: '', url: 'http://192.168.204.13:8080')], contextPath: null, war: '**/*.war'

将脚本内容复制到代码中

点击应用、保存,并构建,查看控制台输出

访问tomcat界面

二、实验

1.Gitlab服务部署

(1)环境配置

持续集成交付CICD:Jenkins部署_第13张图片

(2)修改主机

gitlab

持续集成交付CICD:Jenkins部署_第14张图片

jenkins

持续集成交付CICD:Jenkins部署_第15张图片

tomcat

持续集成交付CICD:Jenkins部署_第16张图片

分别配置主机hosts文件

(3)Gitlab安装

安装相关依赖

启动ssh服务&设置为开机启动
设置postfix开机自启,并启动,postfix支持gitlab发信功能
开放ssh以及http服务,然后重新加载防火墙列表

持续集成交付CICD:Jenkins部署_第17张图片

如果关闭防火墙就不需要做以上配置
关闭防火墙和增强机制持续集成交付CICD:Jenkins部署_第18张图片
上传软件并安装

持续集成交付CICD:Jenkins部署_第19张图片

持续集成交付CICD:Jenkins部署_第20张图片

(4)修改Gitlab配置

ip地址:端口;外部访问的地址

设置gitlab占用内存大小

修改为82端口

④ 重载配置及启动gitlab

重新加载配置

持续集成交付CICD:Jenkins部署_第21张图片

重启服务
持续集成交付CICD:Jenkins部署_第22张图片

开机自启

监听端口


 

试着用IP 直接访问 IP:82

持续集成交付CICD:Jenkins部署_第23张图片


修改管理员密码后,即可登录

持续集成交付CICD:Jenkins部署_第24张图片

登录

持续集成交付CICD:Jenkins部署_第25张图片

进入主界面

持续集成交付CICD:Jenkins部署_第26张图片

(5)Gitlab用户管理

创建用户组持续集成交付CICD:Jenkins部署_第27张图片组名: test,组描述:no    ,组权限: Private

持续集成交付CICD:Jenkins部署_第28张图片

创建成功

持续集成交付CICD:Jenkins部署_第29张图片

权限等级分三种:

1)Private 私有的,只有你自己或者组内的成员能访问

2)Internal 所有登录的用户

3)Public 公开的,所有人都可以访问

创建项目

持续集成交付CICD:Jenkins部署_第30张图片

项目名 : web test,权限: Private

持续集成交付CICD:Jenkins部署_第31张图片

创建成功

持续集成交付CICD:Jenkins部署_第32张图片

代码上传

全局声明(用户、密码、邮箱)

将项目克隆到服务器

持续集成交付CICD:Jenkins部署_第33张图片

切换目录

将代码上传到工作区

提交代码申明持续集成交付CICD:Jenkins部署_第34张图片
 将代码推送到Gitlab持续集成交付CICD:Jenkins部署_第35张图片

查看

持续集成交付CICD:Jenkins部署_第36张图片

用户创建

点击New user

持续集成交付CICD:Jenkins部署_第37张图片

创建新用户持续集成交付CICD:Jenkins部署_第38张图片

点击创建,在生成用户的右侧点击Edit创建密码

持续集成交付CICD:Jenkins部署_第39张图片
点下面的保存你修改,save change!

持续集成交付CICD:Jenkins部署_第40张图片

④ 添加用户到组持续集成交付CICD:Jenkins部署_第41张图片添加用户,选择用户权限Owner持续集成交付CICD:Jenkins部署_第42张图片

成功:

持续集成交付CICD:Jenkins部署_第43张图片

Gitlab用户在组里面有5种不同权限:

1)Guest:可以创建issue、发表评论,不能读写版本库

2)Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限

3)Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限

4)Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限

5)Owner:可以设置项目访问权限·Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限

⑤使用新用户登录,第一次登录系统会让更改密码

持续集成交付CICD:Jenkins部署_第44张图片

设置新密码

持续集成交付CICD:Jenkins部署_第45张图片

查看所属组

持续集成交付CICD:Jenkins部署_第46张图片

2.Jenkins服务部署

(1)安装

上传

安装并查看java版本

安装jenkins

(2)  修改Jenkins配置文件

修改默认端口,根据所需修改

启动服务

在浏览器访问IP:端口 (记得这里要把防火墙给关闭)

持续集成交付CICD:Jenkins部署_第47张图片

输入密码

持续集成交付CICD:Jenkins部署_第48张图片

在浏览器访问,选择右边的自行选择插件安装,

持续集成交付CICD:Jenkins部署_第49张图片

选择None(无)全部不安装

持续集成交付CICD:Jenkins部署_第50张图片

第一次进入后,会让创建一个管理员账户与密码

持续集成交付CICD:Jenkins部署_第51张图片

输入账户密码

持续集成交付CICD:Jenkins部署_第52张图片

实例配置

持续集成交付CICD:Jenkins部署_第53张图片

登录成功

持续集成交付CICD:Jenkins部署_第54张图片

(3)Jenkins添加汉化插件

Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索Chinese、Locale插件

在Manage Jenkins–>Configure System中设置如下持续集成交付CICD:Jenkins部署_第55张图片

持续集成交付CICD:Jenkins部署_第56张图片

持续集成交付CICD:Jenkins部署_第57张图片

选择不重启安装

重启勾选

持续集成交付CICD:Jenkins部署_第58张图片

解决插件安装完,中文简体部分不翻译在Locale中,将语言设置为en_US,重启,再设置为zh_CN;注:zh_TW为中文繁体(因为版本问题可能会导致部分英文无法被识别)持续集成交付CICD:Jenkins部署_第59张图片

需要在2.346.3版本及以上安装

持续集成交付CICD:Jenkins部署_第60张图片

 更新版本

持续集成交付CICD:Jenkins部署_第61张图片

插件已安装

持续集成交付CICD:Jenkins部署_第62张图片

持续集成交付CICD:Jenkins部署_第63张图片

(4)用户权限管理

① 安装插件

Role-based Authorization Strategy:主要用于用户权限管理持续集成交付CICD:Jenkins部署_第64张图片持续集成交付CICD:Jenkins部署_第65张图片

已安装

持续集成交付CICD:Jenkins部署_第66张图片

安全域

持续集成交付CICD:Jenkins部署_第67张图片

授权策略

添加完后可以再管理界面看到如下功能选项持续集成交付CICD:Jenkins部署_第68张图片

点击进入

Glabal rales (全局角色):管理员等高级用户可以创建基于全局的角色
Project roles(项目角色)︰针对菜个或者某些项目的角色
Node rales(节点角色)︰节点相关的权限

持续集成交付CICD:Jenkins部署_第69张图片持续集成交付CICD:Jenkins部署_第70张图片持续集成交付CICD:Jenkins部署_第71张图片

 添加角色

添加以下三个角色:
TEST: 该角色为全局角色。这个角色需要绑定Dverall下面的Read权限,是为了给所有用户绑定最基本的jenkins访问权限。
注意:如果不给后续用户绑定这个角色,会报错误:用户名is missing the Overall/Read permission
test1:该角色为项目角色。使用正则表达式绑定david.*,意思是只能操作zzh开头的项目。
test2:该角色也为项目角色。绑定mao.*,意思是只能操作wxd开头的项目。

持续集成交付CICD:Jenkins部署_第72张图片持续集成交付CICD:Jenkins部署_第73张图片

③ 创建用户

路径:系统管理–>管理用户–>新建用户

持续集成交付CICD:Jenkins部署_第74张图片
新建两个用户001与002持续集成交付CICD:Jenkins部署_第75张图片

持续集成交付CICD:Jenkins部署_第76张图片查看用户列表

持续集成交付CICD:Jenkins部署_第77张图片

④ 切换账户

没权限

持续集成交付CICD:Jenkins部署_第78张图片

⑤ 权限分配

系统管理–>Manage and Assign Roles–>Assign Roles

持续集成交付CICD:Jenkins部署_第79张图片

⑥ 项目创建

在首页新建任务中,创建两个自由风格项目

持续集成交付CICD:Jenkins部署_第80张图片持续集成交付CICD:Jenkins部署_第81张图片持续集成交付CICD:Jenkins部署_第82张图片

切换账户进行访问

 持续集成交付CICD:Jenkins部署_第83张图片

持续集成交付CICD:Jenkins部署_第84张图片

(5)  Jenkins凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。

① 安装Credentials Binding插件

路径:系统管理–>Manage Credentials

持续集成交付CICD:Jenkins部署_第85张图片

持续集成交付CICD:Jenkins部署_第86张图片持续集成交付CICD:Jenkins部署_第87张图片

安装完插件后在系统管理,多了两个功能菜单

持续集成交付CICD:Jenkins部署_第88张图片

路径:系统管理–>Manage Credentials
持续集成交付CICD:Jenkins部署_第89张图片

Username with password:用户名和密码 比如使用Gitlab拉取代码
SSH Username with private key:使用SSH用户和密钥 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的凭证。

持续集成交付CICD:Jenkins部署_第90张图片
 

② 安装Git插件和Git工具

为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOs7上安装Git工具Git插件安装

持续集成交付CICD:Jenkins部署_第91张图片

随便选择一个项目

持续集成交付CICD:Jenkins部署_第92张图片

点击配置,多了git选项

持续集成交付CICD:Jenkins部署_第93张图片

打开服务器安装Git工具,查看git版本

(6) 配置Gitlab凭证

SSH免密登录:

在Gitlab服务器上使用root用户生成钥匙对

持续集成交付CICD:Jenkins部署_第94张图片

/root/.ssh/目录保存公钥和使用,查看服务器上的公钥内容,添加密钥Gitlab

查看版本

Gitlab点击Settings

持续集成交付CICD:Jenkins部署_第95张图片

将私钥复制到jenkins

持续集成交付CICD:Jenkins部署_第96张图片

生成后的凭证持续集成交付CICD:Jenkins部署_第97张图片

打开gitlab,选择仓库,复制仓库ssh克隆地址

持续集成交付CICD:Jenkins部署_第98张图片

如连接Gitlba失败,可以采用令牌方式

持续集成交付CICD:Jenkins部署_第99张图片

测试,选择david001的任务,选择立即构建进行拉取gitlab代码

点击立即构建

持续集成交付CICD:Jenkins部署_第100张图片

控制台输出,可以查看详细信息,相当于操作日志

SUCCESS为成功

持续集成交付CICD:Jenkins部署_第101张图片

(7) Maven部署

在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。Maven是编译java、Python的工具(后端打包工具)
Maven官网:https://maven.apache.org/download.cgi

① Maven 源概述

持续集成交付CICD:Jenkins部署_第102张图片

 安装Maven

上传Maven软件【在Jenkins的服务器上装】配置环境变量

刷新配置

查找Maven版本

持续集成交付CICD:Jenkins部署_第103张图片

③ Jenkins配置Maven

打开全局工具设置

持续集成交付CICD:Jenkins部署_第104张图片

③ 添加Maven持续集成交付CICD:Jenkins部署_第105张图片

应用保存


打开系统设置

持续集成交付CICD:Jenkins部署_第106张图片

④  修改Maven的settings.xml

创建本地仓库目录

持续集成交付CICD:Jenkins部署_第107张图片

3.Tomcat服务部署

(1) JDK配置

关闭防火墙

持续集成交付CICD:Jenkins部署_第108张图片

上传安装包

解压,安装JDK

持续集成交付CICD:Jenkins部署_第109张图片

(2)  设置JDK环境变量

新建文件

刷新变量

使用java -version查看版本

在服务台测试
mvn help:system
出现如下,则说明mvn配置正确
 

mvn help:system

(3) 安装Tomcat

持续集成交付CICD:Jenkins部署_第110张图片

移动解压包到指定目录,,创建用户便于管理服务

添加启动脚本

持续集成交付CICD:Jenkins部署_第111张图片

设置:

添加执行权限,添加到系统服务,启动并查看服务是否启动

持续集成交付CICD:Jenkins部署_第112张图片

(4)设置终端访问

持续集成交付CICD:Jenkins部署_第113张图片

开启终端访问,修改以下配置,默认不许允许远程访问,现在需要注释掉


重启服务

查看服务状态

持续集成交付CICD:Jenkins部署_第114张图片

网页测试

持续集成交付CICD:Jenkins部署_第115张图片

输入用户名和密码,点击manager_webapp

持续集成交付CICD:Jenkins部署_第116张图片

持续集成交付CICD:Jenkins部署_第117张图片

登录成功

持续集成交付CICD:Jenkins部署_第118张图片

4.Jenkins–Pipeline流水线项目构建

(1)  Pipeline

创建Jenkins Pipeline

Pipeline脚本是由Groovy语言实现的,但是我们没必要单独去学习Groovy
Pipeline支持两种语法: Declarative(声明式)和Scripted Pipeline(脚本式)语法
**Pipeline也有两种创建方法:**可以直接在Jenkins的Web UI界面中输入脚本;也可以通过创建一个Jenkinsfile脚本文件放入项目源码库中(一般我们都推荐在Jenkins 中直接从源代码控制(SCM)中直接载入Jenkinsfile Pipeline这种方法)。

(2)安装Pipeline插件

持续集成交付CICD:Jenkins部署_第119张图片

新建流水线项目

Pipeline分为:脚本式、声明式,2.0以后推荐使用声明式脚本

声明式:以pipeline开头 stages之前,可以加入环境、jdk、maven等配置,
stages(一个)阶段下有多个stage,stage下有steps,拉取代码等操作

声明式脚本(Pipeline script)

持续集成交付CICD:Jenkins部署_第120张图片

点击构建,查看控制台输出

持续集成交付CICD:Jenkins部署_第121张图片

(3)拉取代码

持续集成交付CICD:Jenkins部署_第122张图片

点击”流水线语法“查看

持续集成交付CICD:Jenkins部署_第123张图片

代码生成器,生成一些pipeline代码

声明式脚本生成

官网pipeline语法说明

持续集成交付CICD:Jenkins部署_第124张图片

选择checkout拉取代码
 

持续集成交付CICD:Jenkins部署_第125张图片

点击生成脚本,将内容复制到脚本中

持续集成交付CICD:Jenkins部署_第126张图片

应用、保存、再次构建

持续集成交付CICD:Jenkins部署_第127张图片

持续集成交付CICD:Jenkins部署_第128张图片

能够看到刚刚的操作
查看Jenkins工作空间/var/lib/jenkins/workspace/

(4) 编译打包

流水线语法

持续集成交付CICD:Jenkins部署_第129张图片

将代码放入脚本中

持续集成交付CICD:Jenkins部署_第130张图片

再次点击应用、保存,并构建

持续集成交付CICD:Jenkins部署_第131张图片
查看控制台输出

查看Jenkins工作空间

ls /var/lib/jenkins/workspace/

(5) 发布

① Tomcat认证

持续集成交付CICD:Jenkins部署_第132张图片

安装插件

持续集成交付CICD:Jenkins部署_第133张图片

生成密钥,将war包部署到tomcat上

持续集成交付CICD:Jenkins部署_第134张图片

持续集成交付CICD:Jenkins部署_第135张图片插件安装Deploy to container

选择流水线语法,生成pipeline脚本
持续集成交付CICD:Jenkins部署_第136张图片

将脚本内容复制到代码中

持续集成交付CICD:Jenkins部署_第137张图片

点击应用、保存,并构建,查看控制台输出

访问tomcat界面

三、问题

1.报错FirewallD is not running

(1)报错

(2)原因分析

防火墙未开启

(3)解决方法

通过systemctl status firewalld查看firewalld状态,发现当前是dead状态,即防火墙未开启。
使用命令:

systemctl start firewalld #开启防火墙

再次通过systemctl status firewalld查看firewalld状态,显示running即已开启了。

持续集成交付CICD:Jenkins部署_第138张图片

成功:

2.Gitlab报错502

(1)报错

持续集成交付CICD:Jenkins部署_第139张图片

(2)原因分析

配置文件错误、内存空间

(3)解决方法

尝试 gitlab-ctl reconfigure 、gitlab-ctl restart

如果上述两个命令无效,常见的502错误的解决方案如下:

 Gitlab官网硬件需求:Installation system requirements | GitLab

1.首先查看配置文件/etc/gitlab/gitlab.rb 中的端口号是否被占用
我们可以用gitlab-ctl tail 命令查看实时log。 发现日志报错:端口被占用。
在服务器上查看 netstat -tnlp | grep “被占用端口”
之后重启gitlab :gitlab-ctl restart

2.另外一个原因是gitlab占用内存太多,导致服务器崩溃
内存问题 解决办法,启用swap分区,步骤如下:
cat /proc/swaps 查看swap分区是否启动(无)
创建 :
dd if=/dev/zero of=/data/swap bs=512 count=8388616
创建swap大小为bs*count=4294971392(4G);
通过mkswap命令将上面新建出的文件做成swap分区
mkswap /data/swap
查看内核参数vm.swappiness中的数值是否为0,如果为0则根据实际需要调整成60
查看: cat /proc/sys/vm/swappiness
设置: sysctl -w vm.swappiness=60
若想永久修改,则编辑/etc/sysctl.conf文件,改文件中有vm.swappiness变量配置,默认为0
启用分区
swapon /data/swap
echo “/data/swap swap swap defaults 0 0” >> /etc/fstab
再次使用cat /proc/swaps 查看swap分区是否启动
重启gitlab。

3.服务器内存多大(参考 Gitlab硬件需求)
内存
GitLab至少需要8GB的可寻址内存(RAM +SWAP空间)才能安装和使用!内存太少的话,GitLab将在重新配置运行期间产生奇怪的错误,在使用过程中会经常产生500错误。
4GB RAM + 4GB交换支持多达100个用户,但是,速度非常慢 8GB RAM是所有安装推荐的最小内存大小,最多支持100个用户 16GB RAM最多支持500个用户 32GB RAM最多支持1,000个用户 128GB RAM最多支持5,000个用户 更多用户或高可用性查看多应用程序服务器
我们建议,即使你当前有足够的可用内存,在服务器上至少有2GB的SWAP空间。

查看内存:

查看日志:

持续集成交付CICD:Jenkins部署_第140张图片

修改配置文件:

修改前:

 

修改后:

 检查:

持续集成交付CICD:Jenkins部署_第141张图片

成功:

持续集成交付CICD:Jenkins部署_第142张图片

3.Gitlab提交代码申明报错

(1) 报错持续集成交付CICD:Jenkins部署_第143张图片

(2)原因分析

在创建本地仓库时未定义邮箱

(3)解决方法

查看默认邮箱

申明默认邮箱

成功:

持续集成交付CICD:Jenkins部署_第144张图片

4.linux下安装新JDK

(1)如果本机自带jdk 请先卸载jdk 

rpm -qa|grep java 

rpm -e --nodeps xxxxx

查询持续集成交付CICD:Jenkins部署_第145张图片

删除

再次查询

持续集成交付CICD:Jenkins部署_第146张图片

5.jenkins插件scale安装失败

(1)报错

持续集成交付CICD:Jenkins部署_第147张图片

(2)原因分析

Jenkins 从2.332.3更新到2.346.3或更高的版本来运行该插件

(3)解决方法

#查看jenkins安装路径
[root@jenkins opt]# ps -aux | grep jenkins
avahi       658  0.0  0.0  30196  1748 ?        Ss   13:01   0:00 avahi-daemon: running [jenkins.local]
jenkins    7441 14.1 17.5 8092236 1400548 ?     Ssl  18:41   2:00 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=%C/jenkins/war --httpPort=8080
root       8459  0.0  0.0 112680   980 pts/0    S+   18:55   0:00 grep --color=auto jenkins

#所以上述路径为:
/usr/share/java/jenkins.war

#进入jenkins目录,建议此时备份原来的jenkins.war
cd /usr/share/java/

#关闭jenkins服务  
service jenkins stop

#覆盖原因来jenkins
cp -i /opt/jenkins.war ./   

#启动jenkins服务
service jenkins start

#好了,升级ok,可以看到版本已升级到最新了,但是此时管理界面出现了一些提示:
Because of a security vulnerability discovered earlier, we need to change the encryption key used to protect secrets in your configuration files on the disk. This process scans a large portion of your $JENKINS_HOME (/var/lib/jenkins), find encrypted data, re-key them, which will take some time. See this document for more implications about different ways of doing this (or not doing this.) This operation can be safely run in background, but cautious users are recommended to take backups.3 R* }/

#单击 “Re-key in background now”按钮即对整个Jenkins Home进行校验,一般需要1-2天的时间。可以在日志里查看进度。

下载新jenkins版本

持续集成交付CICD:Jenkins部署_第148张图片

关闭服务

覆盖

再次启动

成功,查看版本

持续集成交付CICD:Jenkins部署_第149张图片

提示信息

持续集成交付CICD:Jenkins部署_第150张图片

6.Jenkins中正则表达式未匹配

(1)报错

未发现任何任务

持续集成交付CICD:Jenkins部署_第151张图片持续集成交付CICD:Jenkins部署_第152张图片

(2)原因分析

Jenkins中使用正则表达式匹配:

1)构建规则:可以使用正则表达式来匹配分支名称、标签或其他构建参数,以决定是否触发构建。
匹配所有分支:.*
匹配指定分支:master|develop

2)文件路径筛选:可以使用正则表达式来匹配特定文件路径,以决定哪些文件需要进行构建或测试。
匹配所有文件:.*
匹配特定文件类型:.*\.java

3)日志分析:可以使用正则表达式来匹配日志输出,从而提取关键信息或触发特定操作。
匹配特定关键字:ERROR|WARNING
提取日志中的变量值:VariableName: (\w+)

Jenkins用户权限管理部分的正则表达式 :

匹配所有用户权限:.*
匹配管理员权限:admin.*
匹配特定用户权限:^username.*

(3)解决方法

修改正在表达式

修改前

持续集成交付CICD:Jenkins部署_第153张图片

修改后

持续集成交付CICD:Jenkins部署_第154张图片

成功

持续集成交付CICD:Jenkins部署_第155张图片

持续集成交付CICD:Jenkins部署_第156张图片

7.Gitlab界面添加SSH key报错ssh key已经存在

(1)  报错

添加SSH key,报错ssh key已经存在。

持续集成交付CICD:Jenkins部署_第157张图片

(2) 原因分析

原先是通过authorized_keys文件添加的ssh key,没有在gitlab界面上添加,所以在gitlab界面上找不到删除的地方。

删除文件/home/git/.ssh/authorized_keys中的自己账号相关ssh key,还是无效。

(3)解决方法

① 第一种方法


>cd ~/.ssh/
>mkdir search_keys  #名字随便定
>cd search_keys
>pwd  (获取当前目录路径,如:/data/duser/.ssh/search_keys)
>ssh-keygen
输入上述路径
Generating public/private rsa key pair.
Enter file in which to save the key (/data/duser/.ssh/id_rsa): /data/duser/.ssh/search_keys/id_rsa
 
>ssh-agent bash
>ssh-add id_rsa
>cat id_rsa.pub  展示的就是新生成的公钥

然后把新生成的公钥放到git的ssh keys里面就可以

② 第二种方法(操作PostgreSQL数据库 )

查看 PostgreSQL 配置信息:

cat /var/opt/gitlab/gitlab-rails/etc/database.yml

持续集成交付CICD:Jenkins部署_第158张图片

查看 /etc/passwd 文件里边 gitlab 对应的系统用户

cat /etc/passwd | grep gitlab

持续集成交付CICD:Jenkins部署_第159张图片

切换到对应用户

su - gitlab-psql

连接数据库,连接到gitlabhq_production库

psql -h /var/opt/gitlab/postgresql -d gitlabhq_production

查看帮助命令

 \h

持续集成交付CICD:Jenkins部署_第160张图片查看数据库

\l 

持续集成交付CICD:Jenkins部署_第161张图片

找到gitlab数据库:gitlabhq_production

 \c gitlabhq_production

查看多表

\dt

持续集成交付CICD:Jenkins部署_第162张图片

查看索引

\di 

持续集成交付CICD:Jenkins部署_第163张图片查看所有表空间

 SELECT spcname FROM pg_tablespace; 
 批量替换某个表字段的字符串
update tableA set field=replace(field,'value1','value2')
导入与导出库
1)导出整个库:
pg_dump -h 127.0.0.1 -U testuser test >test.sql

2)导入整个库
psql -U testuser test < test.sql

注意:这里的testuser是postgres用户,test是数据库名称,而且,testuser需要有test的权限

查看单表

\d Keys

持续集成交付CICD:Jenkins部署_第164张图片

打开keys表,删除表中自己账号的key,通过title字段查看是否自己账号的ssh key。

select key from Keys

#指定内容为空
update Keys set fingerprint = NULL;

#下手操作会使gitlab报错500
alter table Keys drop column key;
alter table Keys drop column fingerprint;

然后就可以在gitlab界面添加SSH key了。持续集成交付CICD:Jenkins部署_第165张图片

退出psql
\q 
退出登录用户
exit 

8.连接 Gitlab的PostgreSql数据库有哪些方式

(1)直连方式

查看PostgreSql通用配置信息

[root@gitlab ~]# cat /var/opt/gitlab/gitlab-rails/etc/database.yml


[root@gitlab ~]# cat /etc/passwd

 登录

#切换用户
[root@gitlab ~]# su - gitlab-psql

#-h 对应PostgreSql安装位置;-d 对应登录用户名;根据上面信息,得知默认没有密码
-sh-4.2$ psql -h /var/opt/gitlab/postgresql -d gitlabhq_production

# \l 查看有哪些库
gitlabhq_production=# \l

#一些其他常用命令,包括
 “\dt” 以列表形式查看所有表
 “\d 表名” 查看单张表信息
 “\di” 列表形式查看所有索引 

(2)Navicat方式连接

修改核心配置文件:

放开注释部分,修改为如下所示。cidr为0.0.0.0 代表不限制来访ip地址

 [root@gitlab ~]# vim /etc/gitlab/gitlab.rb
 postgresql['custom_pg_hba_entries'] = {
   APPLICATION: [ # APPLICATION should identify what the settings are used for
     {
       type: "host",
       database: "all",
       user: "all",
       cidr: "0.0.0.0/0",
       method: "trust",
     }
   ]
 }

持续集成交付CICD:Jenkins部署_第166张图片

###修改完配置文件,刷新使其生效
[root@gitlab ~]# gitlab-ctl  reconfigure
 
###查看是否生效。/var/opt/gitlab/postgresql路径 就是你PostgreSql的安装目录
[root@gitlab ~]# vim /var/opt/gitlab/postgresql/data/pg_hba.conf
 
# 这里是自动新增的部分
host all all 0.0.0.0/0 trust

不安全的修改

这次修改会在刷新配置之后,会有报错

   依然修改/etc/gitlab/gitlab.rb文件,如下所示

 ### 允许从其他地址访问本地PostgreSql数据库
 postgresql['enable'] = true
 
 ### 允许访问的地址  0.0.0.0表示允许所有地址的访问
 postgresql['listen_address'] = '0.0.0.0'
 
 ### 开放的端口
 postgresql['port'] = '5432'
 
 ### 修改PostgreSql数据库的数据存储位置
 postgresql['data_dir'] = "/var/opt/gitlab/postgresql/data"

本次修改后,同样刷新配置,可能会有报错。

      提示‘listen_address’属性不合规什么的,但是不会影响整体功能,请忽略即可。

      确认5432端口是否已放开监听,如果没有,重启gitlab服务即可

[root@gitlab ~]# netstat -antp |grep :5432
 
###如果执行上述命令后,没有反应,重启gitlab
[root@gitlab ~]# gitlab-ctl   restart
 
###再次执行netstat 发现5432已打开
[root@gitlab ~]# netstat -antp |grep :5432

创建连接

持续集成交付CICD:Jenkins部署_第167张图片

  其中,主机就是你的服务器ip,端口、用户名、初始数据库等信息,请参考/var/opt/gitlab/gitlab-rails/etc/database.yml

   正常情况下,测试连接即可正常连接到PostgreSql。

9.Jenkins新建项目中源码管理使用Git时

(1) 报错

Jenkins新建项目中源码管理使用Git时遇到如下问题:

持续集成交付CICD:Jenkins部署_第168张图片

(2)原因分析

Jenkins版本版本升级

(3)解决方法

Gitlab添加令牌

持续集成交付CICD:Jenkins部署_第169张图片

安装GitLab插件

持续集成交付CICD:Jenkins部署_第170张图片

持续集成交付CICD:Jenkins部署_第171张图片

API token:即上面创建的GitLab个人访问令牌

持续集成交付CICD:Jenkins部署_第172张图片GitLab配置

持续集成交付CICD:Jenkins部署_第173张图片

成功:

持续集成交付CICD:Jenkins部署_第174张图片

10. jenkins登录报错

(1) 报错

主机重启,jenkins网页登录失败

持续集成交付CICD:Jenkins部署_第175张图片

(2)原因分析

jenkins服务未开启

[root@jenkins ~]# netstat -antp | grep 8080

(3)解决方法

启动服务

[root@jenkins ~]# systemctl stop firewalld
[root@jenkins ~]# netstat -antp | grep 8080
[root@jenkins ~]# systemctl start jenkins.service
[root@jenkins ~]# netstat -antp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      2103/java   

成功:

持续集成交付CICD:Jenkins部署_第176张图片

11.tomcat账户密码登录报错

(1)报错

持续集成交付CICD:Jenkins部署_第177张图片

持续集成交付CICD:Jenkins部署_第178张图片

(2)原因分析

配置文件错误

(3)修改配置文件

[root@tomcat opt]# vim /usr/local/tomcat/conf/tomcat-users.xml

 

重启

持续集成交付CICD:Jenkins部署_第179张图片

成功:

持续集成交付CICD:Jenkins部署_第180张图片

12.jenkins添加Git项目时报错

(1)报错

Failed to connect to repository : Error performing git command: git ls-remote -h

持续集成交付CICD:Jenkins部署_第181张图片

(2)原因分析

由于git客户端版本过低造成的或者未安装git。

Jenkins本机默认使用"yum install -y git" 安装的git版本比较低,应该自行安装更高版本的git。

(3)解决方法

查看GI版本

git --version

如果存在,卸载低版本

yum remove -y git

下载高版本

接着进行git版本升级操作:下载并安装高版本的git,下载地址:https://mirrors.edge.kernel.org/pub/software/scm/git/

[root@jenkins ~]# yum -y install libcurl-devel expat-devel curl-devel  gettext-devel openssl-devel zlib-devel
 
[root@jenkins ~]# yum -y install  gcc perl-ExtUtils-MakeMaker
 
[root@jenkins ~]# cd /usr/local/src/
 
# 下面的地址就是通过之前的下载地址获取的
[root@jenkins src]# wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
 
[root@jenkins src]# tar -zvxf git-2.9.5.tar.gz
 
[root@jenkins src]# cd git-2.9.5.tar
 
[root@jenkins git-2.9.5]# make prefix=/usr/local/git all
 
[root@jenkins git-2.9.5]# make prefix=/usr/local/git install

添加git到环境变量

[root@jenkins git-2.9.5]# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
[root@jenkins git-2.9.5]# source /etc/bashrc

查看更新后的git版本和所在路径

[root@jenkins ~]# git --version
 
[root@jenkins ~]# whereis git

进入jenkins设置

接着登录jenkins界面,依次打开"系统管理" -> "Global Tool Configuration" 全局工具配置-> "Git" -> "Path to Git executable",在此处填入"whereis git"查询出的地址 + "/bin/git" (如上面"whereis git"的地址为"/usr/local/git",则应该填入 "/usr/local/git/bin/git") 并保存。

持续集成交付CICD:Jenkins部署_第182张图片

最后再在Jenkins新建项目中源码管理Repository URL添加git地址,尝试多刷几次就可以了。

持续集成交付CICD:Jenkins部署_第183张图片

13.jenkins 设置Git sshkey 凭证后报错

(1)报错

设置jenkins通过 ssh key 访问git 地址报错

No ECDSA host key is known for

持续集成交付CICD:Jenkins部署_第184张图片

(2)原因分析

配置错误

(3)修改配置

打开 Manage jenkins --> Configure Global Security ,找到 Git Host Key Verification Configuration,按下图修改后保存。警告信息可以忽略

持续集成交付CICD:Jenkins部署_第185张图片

成功:

持续集成交付CICD:Jenkins部署_第186张图片

14.流水线进行编译打包失败

(1) 报错

(2)原因分析

Shell Script编写错误

(3)解决方法

修改Shell Script

修改前:

修改后:

持续集成交付CICD:Jenkins部署_第187张图片

成功

持续集成交付CICD:Jenkins部署_第188张图片

15.流水线报错 mvn: 未找到命令

(1)报错

持续集成交付CICD:Jenkins部署_第189张图片

(2)原因分析

全局配置错误

(3)解决方法

修改全局配置

持续集成交付CICD:Jenkins部署_第190张图片

修改前:

持续集成交付CICD:Jenkins部署_第191张图片

修改后:

持续集成交付CICD:Jenkins部署_第192张图片

如果编译打包时提示:

[WARNING] Failed to create parent directories for tracking file,需要给你的maven本地仓库一个权限

[root@jenkins Pineline script]# chmod 777 /opt/repo

成功:

持续集成交付CICD:Jenkins部署_第193张图片

四、总结

gitlab命令:

gitlab-ctl start                       # 启动所有 gitlab 组件;
gitlab-ctl stop                        # 停止所有 gitlab 组件;
gitlab-ctl restart                     # 重启所有 gitlab 组件;
systemctl enable gitlab-runsvdir.service    #开机自启
gitlab-ctl status                      # 查看服务状态;
gitlab-ctl reconfigure                 # 重新配置更新
vim /etc/gitlab/gitlab.rb              # 修改默认的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace    # 检查gitlab;
gitlab-ctl tail                         # 查看日志;

 Gitlab用户在组里面有5种不同权限:

1)Guest:可以创建issue、发表评论,不能读写版本库

2)Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限

3)Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限

4)Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限

5)Owner:可以设置项目访问权限·Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限

Gitlab 组权限等级分三种:

1)Private 私有的,只有你自己或者组内的成员能访问

2)Internal 所有登录的用户

3)Public 公开的,所有人都可以访问

 Maven 项目文件说明:

 pom.xml 文件是 Maven 项目的配置文件,而 README.md 文件则是项目的说明文档。

linux命令行操作jenkins:

#启动jenkins:
service jenkins start

#重启jenkins:
service jenkins restart

#关闭/停止jenkins:
service jenkins stop

浏览器操作jenkins:

#浏览器进入jenkins
http://localhost:8888/

#关闭jenkins
http://localhost:8888/exit 

#重新启动jenkins
http://localhost:8888/restart

#重启并重新加载配置信息jenkins
http://localhost:8080/reload 

#浏览器进入jenkins
http://localhost:8888/

#浏览器进入jenkins
http://localhost:8888/

你可能感兴趣的:(ci/cd,jenkins,运维)