CICD 持续集成与持续交付

server/2024/10/21 17:56:05/

目录

一 CICD是什么

1.1 持续集成(Continuous Integration)

1.2 持续部署(Continuous Deployment)

1.3 持续交付(Continuous Delivery)

二 git工具使用

2.1 git简介

2.2 git 工作流程

三 部署git

3.1 安装git

3.2 初始化

四 git的使用方法

4.1 常用方法

4.2 git对于文件如何忽略

五 gitlab代码仓库

5.1 gitlab简介

5.2 gitlab 的部署实施

5.2.1 部署gitlab

5.2.2 配置gitlab

5.2.3 登陆gitlab

5.3 在gitlab中新建项目

六 jenkins

6.1 jenkins 简介

6.2 部署 jenkins

6.3 jenkins 与gitlab的整合


一 CICD是什么

CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery)

1.1 持续集成(Continuous Integration)


持续集成是一种软件开发实践,团队成员频繁地将他们的工作集成到共享的代码仓库中。其主要特点包括:

  1. 频繁提交代码:开发人员可以每天多次提交代码,确保代码库始终保持最新状态。
  2. 自动化构建:每次提交后,自动触发构建过程,包括编译、测试、静态分析等。
  3. 快速反馈:如果构建失败或测试不通过,能够快速地向开发人员提供反馈,以便及时修复问题。

1.2 持续部署(Continuous Deployment)


持续部署是在持续集成的基础上,将通过所有测试的代码自动部署到生产环境中。其特点如下:

  1. 自动化流程:从代码提交到生产环境的部署完全自动化,无需人工干预。
  2. 高频率部署:可以实现频繁的部署,使得新功能能够快速地提供给用户。
  3. 风险控制:需要有强大的测试和监控体系来确保部署的稳定性和可靠性。

1.3 持续交付(Continuous Delivery)


持续交付与持续部署类似,但不一定自动部署到生产环境,而是随时可以部署。其重点在于确保软件随时处于可发布状态。

CI/CD 的好处包括:

  1. 提高开发效率:减少手动操作和等待时间,加快开发周期。
  2. 尽早发现问题:通过频繁的集成和测试,问题能够在早期被发现和解决。
  3. 降低风险:减少了大规模部署时可能出现的问题,提高了软件的质量和稳定性。
  4. 增强团队协作:促进团队成员之间的沟通和协作,提高团队的整体效率。

常见的 CI/CD 工具包括 Jenkins、GitLab CI/CD、Travis CI 等。这些工具可以帮助团队实现自动化的构建、测试和部署流程。

二 git工具使用


2.1 git简介


Git 是一个分布式版本控制系统,被广泛用于软件开发中,以管理代码的版本和变更。 主要特点:

  • 分布式

        每个开发者都有完整的代码仓库副本,这使得开发者可以在离线状态下进行工作,并且在网络出现问题时也不会影响开发。

        即使中央服务器出现故障,开发者仍然可以在本地进行开发和查看项目历史。

  • 高效的分支管理

        Git 中的分支创建和切换非常快速和简单。开发人员可以轻松地创建新的分支来进行新功能的开发或修复 bug,而不会影响主分支。

        合并分支也相对容易,可以使用多种合并策略来满足不同的需求。

  • 快速的版本回退

        如果发现某个版本存在问题,可以快速回退到之前的版本。

        可以查看每个版本的详细变更记录,方便了解代码的演进过程。

  • 强大的提交管理

        每个提交都有一个唯一的标识符,可以方便地引用和查看特定的提交。

        提交可以包含详细的提交信息,描述本次提交的更改内容。

  • 支持协作开发

        开发者可以将自己的更改推送到远程仓库,供其他开发者拉取和合并。

        可以处理多个开发者同时对同一文件进行修改的情况,通过合并冲突解决机制来确保代码的完整性。

Git必看秘籍:Git

2.2 git 工作流程


Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。

  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

三 部署git

3.1 安装git


#在rhel9的系统中默认自带git

[root@gitlab ~]# dnf install git -y
 

#设定命令补全功能

[root@gitlab ~]# echo "source  /usr/share/bash-completion/completions/git" >> ~/.bashrc
[root@gitlab ~]# source  ~/.bashrc

3.2 初始化


获取 Git 仓库通常有两种方式:

  • 将尚未进行版本控制的本地目录转换为 Git 仓库。
  • 从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone

初始化版本库

[root@gitlab ~]# mkdir timinglee
[root@gitlab ~]# cd timinglee/
[root@gitlab timinglee]# ls
[root@gitlab timinglee]# git init 
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint:     git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint:     git branch -m <name>
Initialized empty Git repository in /root/timinglee/.git/


#中文翻译

[root@gitlab timinglee]# git init
提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
提示:配置使用初始分支名,并消除这条警告,请执行:
提示:
提示:  git config --global init.defaultBranch <名称>
提示:
提示:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
提示:可以通过以下命令重命名刚创建的分支:
提示:
提示:  git branch -m <name>
已初始化空的 Git 仓库于 /root/timinglee/.git/

[root@gitlab timinglee]# ls -a
.  ..  .git
[root@gitlab timinglee]# ls .git/
branches  description  hooks  objects
config    HEAD         info   refs

#设定用户信息

[root@gitlab timinglee]# git config --global user.name "timinglee"
[root@gitlab timinglee]# git config --global user.email "timinglee@timinglee.org"

#查看当前文件状态

[root@gitlab timinglee]# git status 
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)


#中文翻译

[root@gitlab timinglee]# git status
位于分支 master

尚无提交

无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)


[root@gitlab timinglee]# git status -s        #简化输出

注意:

.git目录是git跟踪管理版本库的,没事别瞎溜达

四 git的使用方法

4.1 常用方法


[root@gitlab timinglee]# echo timinglee > README.md
[root@gitlab timinglee]# git status 
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    README.md

nothing added to commit but untracked files present (use "git add" to track)
 

#中文翻译

[root@gitlab timinglee]# echo timnglee > README.md
[root@CICD-node1 timinglee]# git status
位于分支 master

尚无提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
        README.md

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

[root@gitlab timinglee]# git status -s
?? README.md        #??    新建文件未添加到版本库

[root@gitlab timinglee]# git add README.md 
[root@gitlab timinglee]# git status -s
A  README.md        #A 已添加到暂存区

#提交暂存区的数据

[root@gitlab timinglee]# git commit -m "add README.md"
[master (root-commit) e16d40e] add README.md
 1 file changed, 1 insertion(+)
 create mode 100644 README.md


[root@gitlab timinglee]# git status -s        #无任何显示,标识已经提交到版本库

#再次修改

[root@gitlab timinglee]# vim README.md 
timinglee
timinglee
[root@gitlab timinglee]# git status -s
 M README.md        #右M 表示文件在工作区被修改

#撤销修改

[root@gitlab timinglee]# git checkout -- README.md
[root@gitlab timinglee]# cat README.md 
timinglee

#从新修改

[root@gitlab timinglee]# echo timinglee >> README.md 

[root@gitlab timinglee]# git add README.md 
[root@gitlab timinglee]# git status -s
M  README.md        #左M表示文件已经在版本库中并被跟踪

#从暂存区撤销

[root@gitlab timinglee]# git restore --staged README.md
[root@gitlab timinglee]# git status -s
 M README.md

#从新提交

[root@gitlab timinglee]# git add README.md 
[root@gitlab timinglee]# git status -s
M  README.md


#更新

[root@gitlab timinglee]# git commit -m "update v1"
[master 6852c42] update v1
 1 file changed, 1 insertion(+)
[root@gitlab timinglee]# git status -s
[root@gitlab timinglee]# 


#更新文件

[root@gitlab timinglee]# echo xixi >> README.md 
[root@gitlab timinglee]# git add README.md 
[root@gitlab timinglee]# echo xixi >> README.md 
[root@gitlab timinglee]# git status -s
MM README.md        #MM表示有一部分在暂存区,还有一部分没有提交

#如果现在提交只能提交在暂存区中的部分

[root@gitlab timinglee]# git commit -m "update v2"
[master e4bba82] update v2
 1 file changed, 1 insertion(+)
[root@gitlab timinglee]# git status -s
 M README.md        #右M还在

#查看已暂存和未暂存的修改变化

[root@gitlab timinglee]# echo haha >> README.md 
[root@gitlab timinglee]# git diff
diff --git a/README.md b/README.md
index e002bfd..63d1257 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
 timinglee
 timinglee
 xixi
+xixi
+haha

#跳过使用暂存区,只能在提交过的在版本库中存在的文件使用如果文件状态是“??”不能用此方法

[root@gitlab timinglee]# git commit -a -m "update v3"
[master 6a4e902] update v3
 1 file changed, 2 insertions(+)


#撤销工作区中删除动作

[root@gitlab timinglee]# touch lee.txt
[root@gitlab timinglee]# git add lee.txt 
[root@gitlab timinglee]# git commit -m "add lee.txt"
[master c623e38] add lee.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 lee.txt
[root@gitlab timinglee]# git status -s
[root@gitlab timinglee]# rm -f lee.txt 
[root@gitlab timinglee]# git status -s
 D lee.txt        #右D表示文件在工作区被删除

[root@gitlab timinglee]# git checkout -- lee.txt
[root@gitlab timinglee]# ls
lee.txt  README.md


#从版本库中删除文件

[root@gitlab timinglee]# git rm lee.txt 
rm 'lee.txt'

[root@gitlab timinglee]# git status -s
D  lee.txt        #左D表示文件删除动作被提交到暂存区

[root@gitlab timinglee]# git commit -m "delete lee.txt"
[master 9bc9078] delete lee.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 lee.txt
[root@gitlab timinglee]# git status -s
[root@gitlab timinglee]# 

#恢复从版本库中被删除的文件

[root@gitlab timinglee]# git log         #查看操作日志
commit 9bc90784f6990b845e3d5186774a430a7acef6c8 (HEAD -> master)
Author: timinglee <timinglee@timinglee.org>
Date:   Sun Oct 20 22:39:07 2024 +0800

    delete lee.txt

commit c623e3833e8aac8fedd1dffc658618b3abdf18c2
Author: timinglee <timinglee@timinglee.org>
Date:   Sun Oct 20 22:35:08 2024 +0800

    add lee.txt

commit 6a4e9021fa6a4a287494fcaf33ff1d5364c21712
Author: timinglee <timinglee@timinglee.org>
Date:   Sun Oct 20 22:33:56 2024 +0800

    update v3

commit e4bba82b596de1dbb644618c7bf791cffd13c08a
Author: timinglee <timinglee@timinglee.org>
Date:   Sun Oct 20 22:30:32 2024 +0800

    update v2

commit 6852c420818792f2347d642da11b061b4283a8df
Author: timinglee <timinglee@timinglee.org>
Date:   Sun Oct 20 22:27:45 2024 +0800

    update v1

commit e16d40e888e096c3149357abcb3d70154876646a
Author: timinglee <timinglee@timinglee.org>
Date:   Sun Oct 20 22:17:19 2024 +0800


[root@gitlab timinglee]# git reflog         #查看提交动作
9bc9078 (HEAD -> master) HEAD@{0}: commit: delete lee.txt
c623e38 HEAD@{1}: commit: add lee.txt
6a4e902 HEAD@{2}: commit: update v3
e4bba82 HEAD@{3}: commit: update v2
6852c42 HEAD@{4}: commit: update v1
e16d40e HEAD@{5}: commit (initial): add README.md

#版本回退到删除之前

[root@gitlab timinglee]# git reset --hard c623e38
HEAD is now at c623e38 add lee.txt
[root@gitlab timinglee]# ls
lee.txt  README.md

4.2 git对于文件如何忽略


在做软件开发时对源码编译会产生一些临时文件,我们在提交时需要忽略这些临时文件

[root@gitlab timinglee]# mkdir dir1/
[root@gitlab timinglee]# touch dir1/.file2
[root@gitlab timinglee]# git status -s
?? dir1/


[root@gitlab timinglee]# echo .file1 > .gitignore
[root@gitlab timinglee]# git status -s
?? .gitignore
?? dir1/
[root@gitlab timinglee]# echo ".*" > .gitignore 
[root@gitlab timinglee]# git status -s
[root@gitlab timinglee]# 

五 gitlab代码仓库

5.1 gitlab简介


  • GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。
  • GitLab 具有很多功能,比如代码托管、持续集成和持续部署(CI/CD)、问题跟踪、合并请求管理等。它可以帮助开发团队更好地协作开发软件项目,提高开发效率和代码质量。

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

中文站点: GitLab下载安装_GitLab安装和配置_GitLab最新中文官网免费版下载-极狐GitLab

官方包地址:gitlab/gitlab-ce - Packages · packages.gitlab.com

5.2 gitlab 的部署实施


5.2.1 部署gitlab


部署gitlab需要内存大于4G

[root@gitlab ~]# yum install -y curl policycoreutils-python-utils openssh-server perl

[root@gitlab ~]# dnf install gitlab-ce-17.1.6-ce.0.el9.x86_64.rpm -y

5.2.2 配置gitlab


#修改配置文件

[root@gitlab ~]# cd /etc/gitlab/
[root@gitlab gitlab]# ls
gitlab.rb
[root@gitlab gitlab]# vim gitlab.rb
32 external_url 'http://192.168.10.110'

#修改配置文件后需利用gitlab-crt来生效,

[root@gitlab gitlab]# gitlab-ctl reconfigure

#执行命令成功后会把所有组件全部启动起来

5.2.3 登陆gitlab


用户名默认为 root 。如果在安装过程中指定了初始密码,则用初始密码登录,如果未指定密码,则系统会随机生成一个密码并存储在 /etc/gitlab/initial_root_password 文件中, 查看随机密码并使用 root 用户名登录。

注意:出于安全原因,24 小时后,/etc/gitlab/initial_root_password 会被第一次 gitlab-ctl reconfigure 自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码。

#查看原始密码

[root@gitlab gitlab]# cat /etc/gitlab/initial_root_password 
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: jQa+dFkMdVLPJJOT0XyXYn33SbvsH+tB2mouMSh2wJE=        #密码

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.

登陆

设置语言

设置密码

5.3 在gitlab中新建项目


#生成sshd密钥

[root@gitlab ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/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:AShjVR88aurM8P6ameZJ/yIZyczhijhkqtT8kXSeXaU root@gitlab.com
The key's randomart image is:
+---[RSA 3072]----+
|   ..oo..        |
|  + .  oo.       |
| . o   .o.   .   |
|    . o  .  o    |
|   = * .S  E     |
| o+ X + o .      |
|=o X.= o .       |
|* ..X*o          |
|o. +O=oo.        |
+----[SHA256]-----+


[root@gitlab ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDcngjDHLzqELSAUQqYz9VUFoia+wVCgS+Sy1e/XyyK3t2m6Jf3r+r8kxnpvKdzIlsCSZ4X4nX9DAkKj9cPUGTIOiP/oSF/b8PGIYTs2YZdD5+RBeZ0Sf1HKKSKH/7BFvpDQ2Y6g2dzBWaIfkSEaIIJxdb5VSifAiIfhXnHYiJ/cm7iO8poO54z5Vr/VIfcxFtil7gQB5L/lm9DnkUmA0OCeRfSxUgpBF49ElexFAOHzYiXaex5CAVg6Ub0PItqRQdCEf+pJ+4i9iDec2reC0rw+n/U/MTW+LZ0L2Yst+z6MgfatbQaJyjUX4m0w9bBjhTV1VP/+oVAsTuyOe6wibNwijffuqLhxcHKm89dKUjHMqoJ8wn7+Ma0eYojJWx3umk3vDVipstWs0sgYLWPANtm5ehno8uHzPiNiiqqQi/VP0mOabkCY8VVE6lKfc86nwg80U0aZPpF1NpX7aZJegnvolgxY/g7qGwuVcwOsHHf9qXC1jy0gSrGIxh0cY1mCR8= root@gitlab.com
 

上传公钥到gitlab中

下载项目

[root@gitlab ~]# git clone git@192.168.10.110:root/timinglee.git
Cloning into 'timinglee'...
The authenticity of host '192.168.10.110 (192.168.10.110)' can't be established.
ED25519 key fingerprint is SHA256:aPQhrNl0dlmH+S91HwLx/iUxFtRBR8KY1GIdXwaLi40.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.110' (ED25519) to the list of known hosts.
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
Receiving objects: 100% (3/3), 2.81 KiB | 2.81 MiB/s, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)

[root@gitlab ~]# ls -R
.:
anaconda-ks.cfg  Downloads                             Public
a.sh             gitlab-ce-17.1.6-ce.0.el9.x86_64.rpm  Templates
b.sh             hadoop-2.10.2.tar.gz                  timinglee
c.sh             hadoop-3.4.0.tar.gz                   Videos
Desktop          Music
Documents        Pictures

./Desktop:

./Documents:

./Downloads:

./Music:

./Pictures:

./Public:

./Templates:

./timinglee:
README.md

./Videos:

[root@gitlab ~]# cd timinglee/
[root@gitlab timinglee]# ls
README.md
[root@gitlab timinglee]# git remote -v
origin    git@192.168.10.110:root/timinglee.git (fetch)
origin    git@192.168.10.110:root/timinglee.git (push)

#文件提交

[root@gitlab timinglee]# echo timinglee > timinglee
[root@gitlab timinglee]# git add timinglee 
[root@gitlab timinglee]# git commit -m "add timinglee"
[main a6f5ce0] add timinglee
 1 file changed, 1 insertion(+)
 create mode 100644 timinglee
[root@gitlab timinglee]# git push origin main 
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 274 bytes | 274.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To 192.168.10.110:root/timinglee.git
   4207c3b..a6f5ce0  main -> main

#中文翻译

[root@gitlab timinglee]# git push -u origin main
枚举对象中: 4, 完成.
对象计数中: 100% (4/4), 完成.
使用 4 个线程进行压缩
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 274 字节 | 274.00 KiB/s, 完成.
总共 3(差异 0),复用 0(差异 0),包复用 0
To 172.25.254.80:root/timinglee.git
   2a97cba..6c08cbb  main -> main
分支 'main' 设置为跟踪 'origin/main'。

六 jenkins

6.1 jenkins 简介


  • Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
  • Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行

CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。

CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中

6.2 部署 jenkins


软件下载:https://www.jenkins.io/download/

jenkins需要部署在新的虚拟机中

注意: jenkins需要部署在新的虚拟机中,建议最少4G内存,4核心cpu

#安装依赖包

[root@jenkins ~]# yum install fontconfig java-17-openjdk git -y

#安装jenkins

[root@jenkins ~]# yum install jenkins-2.462.2-1.1.noarch.rpm -y


#启动jenkins

[root@jenkins ~]# systemctl enable --now jenkins.service 
Created symlink /etc/systemd/system/multi-user.target.wants/jenkins.service → /usr/lib/systemd/system/jenkins.service.
[root@jenkins ~]# 

#查看原始密码

[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword 7554ab1f02e949c58d2f33c56f2a67e2

部署插件(访问你所使用的主机IP+8080端口)

#安装推荐插件完成后自动跳到创建第一个管理员用户,底下是网络不好时操作

[root@jenkins ~]# systemctl stop jenkins.service

[root@jenkins ~]# rm -rf /var/lib/jenkins/*
[root@jenkins ~]# systemctl start jenkins.service

[root@jenkins ~]# cd /var/lib/jenkins/
[root@jenkins jenkins]# ls
config.xml                        plugins
hudson.model.UpdateCenter.xml     secret.key
hudson.plugins.git.GitTool.xml    secret.key.not-so-secret
identity.key.enc                  secrets
jenkins.telemetry.Correlator.xml  updates
jobs                              userContent
logs                              users
nodeMonitors.xml
[root@jenkins jenkins]# rm -rf plugins/
[root@jenkins jenkins]# tar zxf /root/plugins.tar.gz

[root@jenkins jenkins]# ll
total 40
-rw-r--r--  1 jenkins jenkins 1660 Oct 21 00:11 config.xml
-rw-r--r--  1 jenkins jenkins  156 Oct 21 00:10 hudson.model.UpdateCenter.xml
-rw-r--r--  1 jenkins jenkins  370 Oct 21 00:22 hudson.plugins.git.GitTool.xml
-rw-------  1 jenkins jenkins 1680 Oct 21 00:22 identity.key.enc
-rw-r--r--  1 jenkins jenkins  171 Oct 21 00:10 jenkins.telemetry.Correlator.xml
drwxr-xr-x  2 jenkins jenkins    6 Oct 21 00:10 jobs
drwxr-xr-x  2 jenkins jenkins   32 Oct 21 00:22 logs
-rw-r--r--  1 jenkins jenkins 1037 Oct 21 00:10 nodeMonitors.xml
drwxr-xr-x 93 jenkins jenkins 8192 Oct 21 00:22 plugins
-rw-r--r--  1 jenkins jenkins   64 Oct 21 00:10 secret.key
-rw-r--r--  1 jenkins jenkins    0 Oct 21 00:10 secret.key.not-so-secret
drwx------  2 jenkins jenkins  164 Oct 21 00:22 secrets
drwxr-xr-x  2 jenkins jenkins  149 Oct 21 00:22 updates
drwxr-xr-x  2 jenkins jenkins   24 Oct 21 00:10 userContent
drwxr-xr-x  3 jenkins jenkins   56 Oct 21 00:10 users
[root@jenkins jenkins]# cd plugins/
[root@jenkins plugins]# ls
ant
antisamy-markup-formatter
antisamy-markup-formatter.jpi
ant.jpi
apache-httpcomponents-client-4-api
apache-httpcomponents-client-4-api.jpi
asm-api
asm-api.jpi
bootstrap5-api
bootstrap5-api.jpi
bouncycastle-api
bouncycastle-api.jpi
branch-api
branch-api.jpi
build-timeout
build-timeout.jpi
caffeine-api
caffeine-api.jpi
checks-api
checks-api.jpi
cloudbees-folder
cloudbees-folder.jpi
commons-lang3-api
commons-lang3-api.jpi
commons-text-api
commons-text-api.jpi
credentials
credentials-binding
credentials-binding.jpi
credentials.jpi
dark-theme
dark-theme.jpi
display-url-api
display-url-api.jpi
durable-task
durable-task.jpi
echarts-api
echarts-api.jpi
eddsa-api
eddsa-api.jpi
email-ext
email-ext.jpi
font-awesome-api
font-awesome-api.jpi
git
git-client
git-client.jpi
github
github-api
github-api.jpi
github-branch-source
github-branch-source.jpi
github.jpi
git.jpi
gradle
gradle.jpi
gson-api
gson-api.jpi
instance-identity
instance-identity.jpi
ionicons-api
ionicons-api.jpi
jackson2-api
jackson2-api.jpi
jakarta-activation-api
jakarta-activation-api.jpi
jakarta-mail-api
jakarta-mail-api.jpi
javax-activation-api
javax-activation-api.jpi
javax-mail-api
javax-mail-api.jpi
jaxb
jaxb.jpi
jjwt-api
jjwt-api.jpi
joda-time-api
joda-time-api.jpi
jquery3-api
jquery3-api.jpi
json-api
json-api.jpi
json-path-api
json-path-api.jpi
junit
junit.jpi
ldap
ldap.jpi
localization-support
localization-support.jpi
localization-zh-cn
localization-zh-cn.jpi
mailer
mailer.jpi
matrix-auth
matrix-auth.jpi
matrix-project
matrix-project.jpi
metrics
metrics.jpi
mina-sshd-api-common
mina-sshd-api-common.jpi
mina-sshd-api-core
mina-sshd-api-core.jpi
okhttp-api
okhttp-api.jpi
pam-auth
pam-auth.jpi
pipeline-build-step
pipeline-build-step.jpi
pipeline-github-lib
pipeline-github-lib.jpi
pipeline-graph-analysis
pipeline-graph-analysis.jpi
pipeline-graph-view
pipeline-graph-view.jpi
pipeline-groovy-lib
pipeline-groovy-lib.jpi
pipeline-input-step
pipeline-input-step.jpi
pipeline-milestone-step
pipeline-milestone-step.jpi
pipeline-model-api
pipeline-model-api.jpi
pipeline-model-definition
pipeline-model-definition.jpi
pipeline-model-extensions
pipeline-model-extensions.jpi
pipeline-stage-step
pipeline-stage-step.jpi
pipeline-stage-tags-metadata
pipeline-stage-tags-metadata.jpi
plain-credentials
plain-credentials.jpi
plugin-util-api
plugin-util-api.jpi
resource-disposer
resource-disposer.jpi
scm-api
scm-api.jpi
script-security
script-security.jpi
snakeyaml-api
snakeyaml-api.jpi
ssh-credentials
ssh-credentials.jpi
ssh-slaves
ssh-slaves.jpi
structs
structs.jpi
theme-manager
theme-manager.jpi
timestamper
timestamper.jpi
token-macro
token-macro.jpi
trilead-api
trilead-api.jpi
variant
variant.jpi
workflow-aggregator
workflow-aggregator.jpi
workflow-api
workflow-api.jpi
workflow-basic-steps
workflow-basic-steps.jpi
workflow-cps
workflow-cps.jpi
workflow-durable-task-step
workflow-durable-task-step.jpi
workflow-job
workflow-job.jpi
workflow-multibranch
workflow-multibranch.jpi
workflow-scm-step
workflow-scm-step.jpi
workflow-step-api
workflow-step-api.jpi
workflow-support
workflow-support.jpi
ws-cleanup
ws-cleanup.jpi
[root@jenkins plugins]# systemctl restart jenkins.service 

#重新查看原始密码
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword

注意:建议修改admin的密码,在admin的设置中修改即可

6.3 jenkins 与gitlab的整合


这个错误的原因是因为本机没有gitlab上的sshkey

[root@jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/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:n6I0byHIA5uD0FeBBnmAqDRMfFIDIO+o4dOEAirh0bI root@jenkins.com
The key's randomart image is:
+---[RSA 3072]----+
|O+=* ...         |
|+Bo.= .          |
|=+=+ .           |
|*+B .            |
|BE.B .  S        |
|*.* + . .. .     |
|.o o .o...o      |
|  .  . +..       |
|      ...        |
+----[SHA256]-----+


[root@jenkins ~]# cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6q/G++x0OECdUy7Rb88iVbw4y+kgRw/IU97kjfDz2rl145wA93XfTCda/ixdfx7t6ATKeCZIQ9PbxnLUVNTLywmcTyONQ9Ljz97GFQcTzNURPCjderYehACPrmq/ALN6+1xqOBcwpQrkkdVaSKErrWb2B5vL6U0nwap0VVWU3SRw8G8Xi7youiyG9MiKPk29dLhC1h/BywE5k/LQdfxkKgqejPJuVebQLJzrc3aTdUPA35f5JRhJ1ZG/uM4hwZHCMywRHI6kRny+pAR7qlzuefA8l3el7VzWzr7fFq1dMHa5u9nt3QX7/bly0/evNV/Rbv+MCsyXlUDMQKc4wX9AnGIoEmBs4uO+F2sxGcJWCF1RC0t7kPU+GSlf6pvm4jGPpgh013hiMKR/5AfkV80zaf3KlSfRw3Ly8QuuyqfrsOQQTcBsAsrM+D8hVXQUoyCfImUspAbhOcHs/pMsTaFuUtgQAwvHt8UmsplbNdS9vugkY2wmuAO/rHwaBmiGC6ps= root@jenkins.com
 

把此密钥添加到gitlab上即可

添加密钥凭据

添加完成后报错依然存在,因为ssh首次连接主机是需要签名认证,需要手动输入yes

还有两太主机之间一定要做好解析

[root@jenkins ~]# vim /etc/ssh/ssh_config
Host *
    StrictHostKeyChecking no


http://www.ppmy.cn/server/133684.html

相关文章

linux 系统怎么使用

Linux系统的使用涉及多个方面&#xff0c;包括文件管理、目录操作、用户管理、进程管理、网络配置等。以下是对Linux系统基础使用的详细介绍&#xff1a; 一、文件管理 查看文件和目录 ls&#xff1a;列出当前目录的内容。ls -l&#xff1a;以长格式列出当前目录的内容&#x…

vulnhub靶场之JOY

一.环境搭建 1.靶场描述 Does penetration testing spark joy? If it does, this machine is for you. This machine is full of services, full of fun, but how many ways are there to align the stars? Perhaps, just like the child in all of us, we may find joy in …

Vue3中ref和reactive的对比

1. ref 定义 用途: 用于创建基本数据类型或单一值的响应式引用。语法: const myRef ref(initialValue); 特性 返回一个包含 .value 属性的 Proxy 对象。适用于基本数据类型&#xff08;如数字、字符串、布尔值等&#xff09;和单一值。 import { ref } from vue;const co…

MySQL创建和管理表

1. 基础知识 存储数据是处理数据的第一步&#xff0c;只有正确地把数据存储起来&#xff0c;才能进行有效的处理和分析。 在 MySQL 中&#xff0c;一个完整的数据存储过程总共有 4 步&#xff0c;分别是创建数据库、确认字段、创建数据表、插入数据。 从系统架构的层次上看…

手机、固话号码想要认证,需要显示企业名称该怎么设置?

在现如今激烈竞争的商业环境中&#xff0c;依然有越来越多的企业意识到品牌的力量与价值&#xff0c;作为吸引客户关注、打造客户第一印象的关键环节。如何让企业外呼号码展示品牌与企业名称就变得格外关键。 那么手机、固话号码申请号码品牌认证究竟是什么&#xff1f;申请的…

Mac通过键盘选取内容

问题&#xff1a; 我们在使用键盘的时候经常懒得动手去拿鼠标了&#xff0c;并且熟练使用键盘可以提高我们的工作效率&#xff0c;比如在我们需要复制内容的时候&#xff0c;可以仅仅通过键盘来选取想要的内容&#xff1b; 解决&#xff1a; 将鼠标光标移动到想要选取的内容…

CICD持续集成交付与持续交付

一 CICD是什么 CI/CD 是指持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;或持续交付&#xff08;Continuous Delivery&#xff09; 1.1 持续集成&#xff08;Continuous Integration&#xff09; 持续集成…

MySQL去除空白字符(如非标准空格、制表符等)

在 MySQL 中&#xff0c;需要去除 site_name 字段的空格&#xff0c;可以使用 TRIM() 函数。这个函数可以去掉字符串开头和结尾的空格。以下是一个示例查询&#xff0c;演示如何选择去除空格后的 site_name&#xff1a; SELECT TRIM(site_name) AS site_name FROM site_info;如…