持续集成交付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)

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

④ 设计步骤

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

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)针对交付进行了优化:多个阶段、手动部署、环境和变量。

(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)受保护的变量:子啊部署期间使用受每个环境保护的变量安全地存储和使用机密。
环境:定义多个环境。

(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 一起使用。

③ .gitlab-ci.yml

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

(5)  Gitlab CI/CD工作原理

1)将代码托管到git存储库中;2)在项目根创建ci文件 .gitlab-ci.yml,在文件中指定构建,测试和部署脚本;3)gitlab将检测到它并使用名为gitlab runner的工具运行脚本;4)脚本被分组为作业,它们共同组成了一个管道。

管道状态也会由GitLab显示:

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


3.Jenkins安装与部署

(1) 概念

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

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

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

(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测试服务器。

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.rpm2)第二个下载源
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 gitgit 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 userName: david
Username: david
Email: XXX@qq.com#项目上限
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 002admin: 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 源概述

 安装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.6MAVEN_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
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="123456" roles="tomcat,manager-script,manager-gui,admin-gui,admin-script"/>
</tomcat-users>
#开启终端访问,修改以下配置,默认不许允许远程访问,现在需要注释掉
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: git@192.168.48.8: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)环境配置

(2)修改主机

gitlab

jenkins

tomcat

分别配置主机hosts文件

(3)Gitlab安装

安装相关依赖

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



如果关闭防火墙就不需要做以上配置
关闭防火墙和增强机制
上传软件并安装

(4)修改Gitlab配置

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

设置gitlab占用内存大小

修改为82端口

④ 重载配置及启动gitlab

重新加载配置

重启服务

开机自启

监听端口


 

试着用IP 直接访问 IP:82


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

登录

进入主界面

(5)Gitlab用户管理

创建用户组组名: test,组描述:no    ,组权限: Private

创建成功

权限等级分三种:

1)Private 私有的,只有你自己或者组内的成员能访问2)Internal 所有登录的用户3)Public 公开的,所有人都可以访问

创建项目

项目名 : web test,权限: Private

创建成功

代码上传

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

将项目克隆到服务器

切换目录

将代码上传到工作区

提交代码申明
 将代码推送到Gitlab

查看

用户创建

点击New user

创建新用户

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


点下面的保存你修改,save change!

④ 添加用户到组添加用户,选择用户权限Owner

成功:

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

1)Guest:可以创建issue、发表评论,不能读写版本库2)Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限3)Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限4)Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限5)Owner:可以设置项目访问权限·Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限

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

设置新密码

查看所属组

2.Jenkins服务部署

(1)安装

上传

安装并查看java版本

安装jenkins

(2)  修改Jenkins配置文件

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

启动服务

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

输入密码

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

选择None(无)全部不安装

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

输入账户密码

实例配置

登录成功

(3)Jenkins添加汉化插件

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

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

选择不重启安装

重启勾选

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

需要在2.346.3版本及以上安装

 更新版本

插件已安装

(4)用户权限管理

① 安装插件

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

已安装

安全域

授权策略

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

点击进入

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

 添加角色

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

③ 创建用户

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


新建两个用户001与002

查看用户列表

④ 切换账户

没权限

⑤ 权限分配

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

⑥ 项目创建

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

切换账户进行访问

 

(5)  Jenkins凭证管理

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

① 安装Credentials Binding插件

路径:系统管理–>Manage Credentials

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

路径:系统管理–>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版本

(6) 配置Gitlab凭证

SSH免密登录:

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

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

查看版本

Gitlab点击Settings

将私钥复制到jenkins

生成后的凭证

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

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

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

点击立即构建

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

SUCCESS为成功

(7) Maven部署

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

① Maven 源概述

 安装Maven

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

刷新配置

查找Maven版本

③ Jenkins配置Maven

打开全局工具设置

③ 添加Maven

应用保存


打开系统设置

④  修改Maven的settings.xml

创建本地仓库目录

3.Tomcat服务部署

(1) JDK配置

关闭防火墙

上传安装包

解压,安装JDK

(2)  设置JDK环境变量

新建文件

刷新变量

使用java -version查看版本

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

mvn help:system

(3) 安装Tomcat

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

添加启动脚本

设置:

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

(4)设置终端访问

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


重启服务

查看服务状态

网页测试

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

登录成功

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插件

新建流水线项目

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

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

声明式脚本(Pipeline script)

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

(3)拉取代码

点击”流水线语法“查看

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

声明式脚本生成

官网pipeline语法说明

选择checkout拉取代码
 

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

应用、保存、再次构建

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

(4) 编译打包

流水线语法

将代码放入脚本中

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


查看控制台输出

查看Jenkins工作空间

ls /var/lib/jenkins/workspace/

(5) 发布

① Tomcat认证

安装插件

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

插件安装Deploy to container

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

将脚本内容复制到代码中

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

访问tomcat界面

三、问题

1.报错FirewallD is not running

(1)报错

(2)原因分析

防火墙未开启

(3)解决方法

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

systemctl start firewalld #开启防火墙

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

成功:

2.Gitlab报错502

(1)报错

(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 restart2.另外一个原因是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空间。

查看内存:

查看日志:

修改配置文件:

修改前:

 

修改后:

 检查:

成功:

3.Gitlab提交代码申明报错

(1) 报错

(2)原因分析

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

(3)解决方法

查看默认邮箱

申明默认邮箱

成功:

4.linux下安装新JDK

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

rpm -qa|grep java rpm -e --nodeps xxxxx

查询

删除

再次查询

5.jenkins插件scale安装失败

(1)报错

(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版本

关闭服务

覆盖

再次启动

成功,查看版本

提示信息

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

(1)报错

未发现任何任务

(2)原因分析

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

1)构建规则:可以使用正则表达式来匹配分支名称、标签或其他构建参数,以决定是否触发构建。
匹配所有分支:.*
匹配指定分支:master|develop2)文件路径筛选:可以使用正则表达式来匹配特定文件路径,以决定哪些文件需要进行构建或测试。
匹配所有文件:.*
匹配特定文件类型:.*\.java3)日志分析:可以使用正则表达式来匹配日志输出,从而提取关键信息或触发特定操作。
匹配特定关键字:ERROR|WARNING
提取日志中的变量值:VariableName: (\w+)

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

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

(3)解决方法

修改正在表达式

修改前

修改后

成功

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

(1)  报错

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

(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

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

cat /etc/passwd | grep gitlab

切换到对应用户

su - gitlab-psql

连接数据库,连接到gitlabhq_production库

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

查看帮助命令

 \h

查看数据库

\l 

找到gitlab数据库:gitlabhq_production

 \c gitlabhq_production

查看多表

\dt

查看索引

\di 

查看所有表空间

 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.sql2)导入整个库
psql -U testuser test < test.sql注意:这里的testuser是postgres用户,test是数据库名称,而且,testuser需要有test的权限

查看单表

\d Keys

打开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了。

退出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.rbpostgresql['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",}]}

###修改完配置文件,刷新使其生效
[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

创建连接

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

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

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

(1) 报错

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

(2)原因分析

Jenkins版本版本升级

(3)解决方法

Gitlab添加令牌

安装GitLab插件

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

GitLab配置

成功:

10. jenkins登录报错

(1) 报错

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

(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   

成功:

11.tomcat账户密码登录报错

(1)报错

(2)原因分析

配置文件错误

(3)修改配置文件

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

 

重启

成功:

12.jenkins添加Git项目时报错

(1)报错

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

(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") 并保存。

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

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

(1)报错

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

No ECDSA host key is known for

(2)原因分析

配置错误

(3)修改配置

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

成功:

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

(1) 报错

(2)原因分析

Shell Script编写错误

(3)解决方法

修改Shell Script

修改前:

修改后:

成功

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

(1)报错

(2)原因分析

全局配置错误

(3)解决方法

修改全局配置

修改前:

修改后:

如果编译打包时提示:

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

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

成功:

四、总结

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十六、代码校验(1)

本章概要 测试 单元测试JUnit测试覆盖率的幻觉 你永远不能保证你的代码是正确的&#xff0c;你只能证明它是错的。 让我们先暂停编程语言特性的学习&#xff0c;看看一些代码基础知识。特别是能让你的代码更加健壮的知识。 测试 如果没有测试过&#xff0c;它就是不能工作的…

计算机毕业设计选什么题目好?springboot智慧养老中心管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Response Status Code 301、302

目录 Information Django redirect Influence Information HTTP状态码301、302和304分别表示以下情况&#xff1a; codeinformation301&#xff08;Moved Permanently&#xff09; 永久重定向。当请求的资源已经被永久地移动到了一个新的URI时&#xff0c;服务器会返回这个…

VUEX的基础使用存值及异步

目录 什么是VUEX 有什么作用 安装 取值 异步 什么是VUEX VUEX 是一个用于状态管理的状态容器模式&#xff08;state management pattern&#xff09;库&#xff0c;用于 Vue.js 应用程序。它允许你在应用程序中集中管理和共享状态&#xff0c;并提供了一组用于更改状态的规则…

[安洵杯 2019]easy_web - RCE(关键字绕过)+md5强碰撞+逆向思维

[安洵杯 2019]easy_web 1 解题流程1.1 阶段一1.2 阶段二2 思考总结1 解题流程 1.1 阶段一 1、F12发现提示md5 is funny ~;还有img标签中,有伪协议和base64编码 2、url地址是index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=   这就有意思了,这里的img明显是编码后的…

C++ 命名空间-----namespace(超详细解析,小白必看系列)

目录 一、前言 &#x1f34e;什么是C 二、关键字 三、命名空间&#xff08;重点&#xff09; &#x1f350;C语言--命名冲突 &#x1f349;C--命名空间的定义 &#x1f353;C--命名空间的使用 四、C输入&输出 五、共勉 一、前言 既博主学过C语言后又一新的语言&a…

大厂设计师力推的14款平面图设计工具!

从事设计行业的工人或多或少会接触到平面图。例如&#xff0c;在建造新房、办公室、酒店等任何类型的建筑时&#xff0c;都需要使用平面图来保证项目的准确性。因此&#xff0c;掌握绘制平面图软件的技巧也非常重要。在保证效率的同时&#xff0c;结果的准确性也非常高。在本文…

seata分布式事务理论概述

分布式事务产生的原因&#xff1a; 数据库分库分表 应用的SOA化。就是业务的服务化(面向服务架构) 分布式事务的解决方案&#xff1a; 1、两阶段提交协议2PC 这里的两阶段提交和redolog binlog的两阶段提交不是一个东西&#xff0c;redo log和bin log的两阶段提交保证的是…

Vue2 Watch的语法

Watch语法 一、监听普通数据类型&#xff08;1&#xff09;把要监听的msg值看作方法名&#xff0c;来进行监听。&#xff08;2&#xff09;把要监听的msg值看作对象&#xff0c;利用hanler方法来进行监听 二、监听对象&#xff1a;&#xff08;1&#xff09;监听对象需要用到深…

Python算法练习 10.11

leetcode 394 字符串解码 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没…

c语言练习85:通讯录的实现(基于顺序表实现)

通讯录的实现(基于顺序表实现&#xff09; 基于动态顺序表实现通讯录 C语⾔基础要求&#xff1a;结构体、动态内存管理、顺序表、⽂件操作 1、功能要求 1&#xff09;⾄少能够存储100个⼈的通讯信息 2&#xff09;能够保存⽤⼾信息&#xff1a;名字、性别、年龄、电话、地址…

飞凌嵌入式受邀参加「NXP创新技术论坛」

2023年10月10日&#xff0c;「NXP创新技术论坛」在深圳湾万丽酒店举行&#xff0c;飞凌嵌入式作为NXP金牌合作伙伴受邀参加此次论坛&#xff0c;与众多智能工业行业的伙伴深入交流市场趋势与行业洞察&#xff0c;共同促进未来市场的发展。 本次论坛&#xff0c;飞凌嵌入式展示了…

ansible 调研

参考&#xff1a;自动化运维工具——ansible详解&#xff08;一&#xff09; - 珂儿吖 - 博客园 (cnblogs.com) ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xf…

使用Plotly模拟远古博弈游戏_掷骰子

不乏投资大师、量化基金经理从着迷博弈游戏开始迈出步伐...... 开始学习使用python包Plotly模拟掷骰子。 安装Plotly 终端输入命令&#xff1a;python3 -m pip install --user plotly 创建骰子类 掷骰子 分析结果 绘制直方图 投掷一个骰子点数的分布 投掷两个骰子1000次的点数…

【QT】Ubuntu 编译安装 QT 5.12.7 源码

直接通过源码来编译安装 QT&#xff0c;难度太大&#xff0c;耗时较长&#xff0c;一般不是特别推荐使用源码安装。 目录 1、下载 QT 源码包 2、搭建安装环境(下载依赖库) 3、编译QT源码的脚本 1、下载 QT 源码包 QT5.12.7源码下载地址: download | QT 5.12.7 选择任意一…

spring boot+ vue+ mysql开发的一套厘米级高精度定位系统源码

UWB室内高精度定位系统源码&#xff0c;自主版权演示 UWB技术最核心的能力就是精准的定位与测距&#xff0c;当然它还具备通信功能。不过&#xff0c;目前主流通信技术已经相当成熟&#xff0c;无需UWB兼顾去做通信传输。而且&#xff0c;如果使用UWB通信功能&#xff0c;反而会…

多媒体播放软件 Infuse mac中文特点介绍

Infuse mac是一款多媒体播放器应用&#xff0c;它支持播放多种格式的视频文件、音频文件和图片文件&#xff0c;并且可以通过AIrPlay将媒体内容投放到其他设备上。Infuse还支持在线视频流媒体播放和本地网络共享&#xff0c;用户可以通过它来访问家庭网络上的媒体文件。 Infuse…

什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Linux是什么,其特点是啥

与大家熟知的 Windows 操作系统软件一样&#xff0c;Linux 也是一个操作系统软件&#xff0c;其 logo 是一只企鹅。与 Windows 不同之处在于&#xff0c;Linux 是一套开放源代码程序的、可以自由传播的类 Unix 操作系统软件。Linux&#xff0c;全称GNU/Linux&#xff0c;是一种…

JAXB 使用记录 bean转xml xml转bean 数组 继承

JAXB 使用记录 部分内容引自 https://blog.csdn.net/gengzhy/article/details/127564536 基础介绍 JAXBContext类&#xff1a;是应用的入口&#xff0c;用于管理XML/Java绑定信息 Marshaller接口&#xff1a;将Java对象序列化为XML数据 Unmarshaller接口&#xff1a;将XML数…