CICD持续集成与持续交付

目录

一、CICD是什么

1、持续集成

2、持续部署

3、持续交付

二、git工具使用

1、git简介

2、git工作流程

三、部署git

1、安装git

2、初始化

四、git的使用方法

1、常用方法

2、gitlab对于文件如何忽略

五、gitlab代码仓库

1、gitlab简介

2、gitlab的部署实施

(1)部署gitlab

(2)配置gitlab

(3)登录gitlab

3、在gitlab中新建项目

六、Jenkins

1、Jenkins简介

2、部署Jenkins

3、Jenkins与gitlab的整合

添加ssh密钥

上传公钥

上传私钥

 ssh首次连接主机取消签名认证

构建 


一、CICD是什么

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

1、持续集成

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

  1. 频繁提交代码:开发人员可以每天多次提交代码,确保代码库始终保持最新状态。

  2. 自动化构建:每次提交后,自动触发构建过程,包括编译、测试、静态分析等。

  3. 快速反馈:如果构建失败或测试不通过,能够快速地向开发人员提供反馈,以便及时修复问题。

2、持续部署

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

  1. 自动化流程:从代码提交到生产环境的部署完全自动化,无需人工干预。

  2. 高频率部署:可以实现频繁的部署,使得新功能能够快速地提供给用户。

  3. 风险控制:需要有强大的测试和监控体系来确保部署的稳定性和可靠性。

3、持续交付

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

CI/CD 的好处包括:

  1. 提高开发效率:减少手动操作和等待时间,加快开发周期。

  2. 尽早发现问题:通过频繁的集成和测试,问题能够在早期被发现和解决。

  3. 降低风险:减少了大规模部署时可能出现的问题,提高了软件的质量和稳定性。

  4. 增强团队协作:促进团队成员之间的沟通和协作,提高团队的整体效率。

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

二、git工具使用

1、git简介

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

  • 分布式

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

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

  • 高效的分支管理

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

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

  • 快速的版本回退

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

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

  • 强大的提交管理

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

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

  • 支持协作开发

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

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

Git必看秘籍:Git - Book

2、git工作流程

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

  • 已修改表示修改了文件,但还没保存到数据库中。

  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

  • 已提交表示数据已经安全地保存在本地数据库中。

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

三、部署git

1、安装git

[root@CICD-node1 ~]# dnf install git -y
#设定命令补全功能
[root@CICD-node1 ~]# echo "source  /usr/share/bash-completion/completions/git" >> ~/.bashrc
[root@CICD-node1 ~]# source  ~/.bashrc

2、初始化

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

  • 将尚未进行版本控制的本地目录转换为 Git 仓库。

  • 从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone

初始化版本库

[root@CICD-node1 ~]# mkdir zx 
[root@CICD-node1 ~]# cd zx/
[root@CICD-node1 zx]# 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/zx/.git/
[root@CICD-node1 zx]# ls -a
.  ..  .git
[root@CICD-node1 zx]# ls .git/
branches  config  description  HEAD  hooks  info  objects  refs
#设定用户信息
[root@CICD-node1 zx]# git config --global user.name "zx"
[root@CICD-node1 zx]# git config --global user.email "zx@zx.org"
[root@CICD-node1 zx]# git status 
On branch master

No commits yet

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

#简化输出
[root@CICD-node1 zx]# git status -s

四、git的使用方法

1、常用方法

# 添加到暂存区
[root@CICD-node1 zx]# echo zx > README.md
[root@CICD-node1 zx]# git status
On branch master                # 位于分支 master

No commits                      # 尚无提交   

Untracked files:                # 未跟踪的文件
  (use "git add <file>..." to include in what will be committed)        # (使用 "git add <文件>..." 以包含要提交的内容)
	README.md

nothing added to commit but untracked files present (use "git add" to track)    # 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
[root@CICD-node1 zx]# git status -s
?? README.md                    # ??	新建文件未添加到版本库

[root@CICD-node1 zx]# git add README.md 
[root@CICD-node1 zx]# git status -s
A  README.md                    # A 已添加到暂存区
#提交暂存区的数据
[root@CICD-node1 zx]# git commit -m "add README.md"
[master (root-commit) 9f57726] add README.md
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
[root@CICD-node1 zx]# git status -s        #无任何显示,标识已经提交到版本库
#再次修改
[root@CICD-node1 zx]# echo "zx" >> README.md 
[root@CICD-node1 zx]# git status -s
 M README.md                                       #右M 表示文件在工作区被修改
[root@CICD-node1 zx]# git checkout -- README.md    #撤销修改
[root@CICD-node1 zx]# cat README.md 
zx

#重新修改
[root@CICD-node1 zx]# echo "zxzx" >> README.md 
[root@CICD-node1 zx]# git add README.md 
[root@CICD-node1 zx]# git status -s
M  README.md                                        #左M表示文件已经在版本库中并被跟踪

#从暂存区撤销
[root@CICD-node1 zx]# git restore --staged README.md 
[root@CICD-node1 zx]# git status -s
 M README.md

#重新修改
[root@CICD-node1 zx]# git add README.md 
[root@CICD-node1 zx]# git status -s
M  README.md

#更新
[root@CICD-node1 zx]# git commit -m "update v1"
[master 57b4495] update v1
 1 file changed, 1 insertion(+)
[root@CICD-node1 zx]# git status -s

#更新文件
[root@CICD-node1 zx]# echo "hello" >> README.md 
[root@CICD-node1 zx]# git add README.md 
[root@CICD-node1 zx]# echo "hello" >> README.md 
[root@CICD-node1 zx]# git status -s
MM README.md                                # MM表示有一部分在暂存区,还有一部分没有提交
[root@CICD-node1 zx]# git commit -m "update v2"    #如果现在提交只能提交在暂存区中的部分
[master 6a871a2] update v2
 1 file changed, 1 insertion(+)
[root@CICD-node1 zx]# git status -s
 M README.md                                # 右M还在

#查看已暂存和未暂存的修改变化
[root@CICD-node1 zx]# echo "zzzz" >> README.md 
[root@CICD-node1 zx]# git diff
diff --git a/README.md b/README.md
index c145d45..1836c51 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
 zx
 zxzx
 hello
+hello
+zzzz
#跳过使用暂存区,只能在提交过的在版本库中存在的文件使用如果文件状态是“??”不能用此方法
[root@CICD-node1 zx]# git commit -a -m "update v3"
[master 5ed696e] update v3
 1 file changed, 2 insertions(+)

#撤销工作区中删除动作
[root@CICD-node1 zx]# touch zx.txt
[root@CICD-node1 zx]# git add zx.txt 
[root@CICD-node1 zx]# git commit -m "add zx.txt"
[master 3354b59] add zx.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 zx.txt
[root@CICD-node1 zx]# git status -s        #右D表示文件在工作区被删除
 D zx.txt
#从版本库中删除文件
[root@CICD-node1 zx]# git checkout -- zx.txt
[root@CICD-node1 zx]# ls
README.md  zx.txt
[root@CICD-node1 zx]# 
[root@CICD-node1 zx]# git rm zx.txt 
rm 'zx.txt'
[root@CICD-node1 zx]# git status -s
D  zx.txt                                  #左D表示文件删除动作被提交到暂存区    
[root@CICD-node1 zx]# git commit -m "delete zx.txt"
[master 41444d6] delete zx.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 zx.txt
[root@CICD-node1 zx]# git status -s

[root@CICD-node1 zx]# git log        #查看操作日志
commit 41444d6364aae2c205d0e18317648463f706ae51 (HEAD -> master)
Author: zx <zx@zx.org>
Date:   Sun Sep 22 08:20:28 2024 +0800

    delete zx.txt

commit 3354b5968f0fb32dae127cb0919dcdd4149d1488
Author: zx <zx@zx.org>
Date:   Sun Sep 22 08:19:16 2024 +0800

    add zx.txt

commit 5ed696ecf662832e94231d7dd54f2d214a495284
Author: zx <zx@zx.org>
Date:   Sun Sep 22 08:18:52 2024 +0800

    update v3

commit 6a871a24cc85e4511395feccfaa0c1e8a5c5bfb6
Author: zx <zx@zx.org>
Date:   Sun Sep 22 08:18:05 2024 +0800

    update v2

commit 57b4495cb69bb6625a681b2be877fad35680d324
Author: zx <zx@zx.org>
Date:   Sun Sep 22 08:17:07 2024 +0800

    update v1

commit 9f577262c63818ff3abf7bbca41f192163ec13b2
Author: zx <zx@zx.org>
Date:   Sun Sep 22 08:14:50 2024 +0800

    add README.md
[root@CICD-node1 zx]# 
[root@CICD-node1 zx]# git reflog             #查看提交动作
41444d6 (HEAD -> master) HEAD@{0}: commit: delete zx.txt
3354b59 HEAD@{1}: commit: add zx.txt
5ed696e HEAD@{2}: commit: update v3
6a871a2 HEAD@{3}: commit: update v2
57b4495 HEAD@{4}: commit: update v1
9f57726 HEAD@{5}: commit (initial): add README.md

#版本回退到之前
[root@CICD-node1 zx]# git reset --hard 9f57726
HEAD is now at 9f57726 add README.md
[root@CICD-node1 zx]# ls
README.md

2、gitlab对于文件如何忽略

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

[root@CICD-node1 zx]# mkdir dir1/
[root@CICD-node1 zx]# touch dir1/.file1
[root@CICD-node1 zx]# touch .file1
[root@CICD-node1 zx]# git status -s
?? .file1
?? dir1/
[root@CICD-node1 zx]# echo .file1 > .gitignore
[root@CICD-node1 zx]# git status -s
?? .gitignore
[root@CICD-node1 zx]# echo ".*" > .gitignore 
[root@CICD-node1 zx]# git status -s

五、gitlab代码仓库

1、gitlab简介

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

  • GitLab 具有很多功能,比如代码托管、持续集成和持续部署(CI/CD)、问题跟踪、合并请求管理等。它可以帮助开发团队更好地协作开发软件项目,提高开发效率和代码质量。

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

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

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

2、gitlab的部署实施

(1)部署gitlab

部署gitlab需要内存大于4G

[root@CICD-node1 ~]# yum install -y curl openssh-server perl
[root@CICD-node1 ~]# yum install -y policycoreutils-python-utils.noarch
[root@CICD-node1 ~]# dnf install gitlab-ce-17.1.6-ce.0.el9.x86_64.rpm -y

(2)配置gitlab

[root@CICD-node1 ~]# cd /etc/gitlab/
[root@CICD-node1 gitlab]# ls
gitlab.rb
[root@CICD-node1 gitlab]# vim gitlab.rb     # 修改external_url 'http://172.25.254.150'
[root@CICD-node1 gitlab]# gitlab-ctl reconfigure

(3)登录gitlab

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

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

#查看原始密码
[root@CICD-node1 gitlab]# cat /etc/gitlab/initial_root_password
……
Password: 1uZff3U3X4I41SRhDP6RAdxhLCz93F4cphpHh0pori4=
……

3、在gitlab中新建项目

生成并上传公钥到gitlab中  

[root@CICD-node1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
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:H4R3eiuRlJTsjxnZLPk/86KLO30XhPp5OJj4q/IHBzE root@CICD-node1.zx.org
The key's randomart image is:
+---[RSA 3072]----+
|         ...     |
|         Eo.     |
|        ..B=. .  |
|         =*+o. . |
|        S *Bo .  |
|         oo*o. . |
|          *.=.o .|
|       . ..*.=*..|
|        oo*=++o*.|
+----[SHA256]-----+
[root@CICD-node1 ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2ixQrELvAqqY0jxQxEf1nSonzNPoJvzkEBXA1wyd79ZENToc0+7yFpiMpQU0sSFIZTinNW+ZZ3duYeTIk2yLpNXk1Lh6l8nimbceJYwdWVX+oAnkYpJb5i6ljdlRi/BB8jBk8UWgU/LUK0fjFk3M1x9UVJ978qwv1IsAI3O75Cd5VriVJQjSzL2y/56gMTMr2Yw7faipUeczXP1qlL/aEQ01eThtvy9Weoioj4lTqkXMzO7KRCAS9cEwG3rAqODFSW+SE7zw/QtYySSWT2IvlEB/ErqQVqTN5Mtsr0zGVlpOcYapCd021GUSn0GRSaZ4eNThK1Bmc1vpqQRrtKfH5qMWi9/+UVSBYxKwQ1eiAhw9jufJvZ7rMWvs/gWx/UGyoGQoI0ebbAvb1Ja7EgGkfWKomnrssvU9vQ4CJfrWtRPozLHpjHM+M8r4SOiXqWcIUTDsShdEotH3/vWnTRdDRB5IJx4w5LCE4/vGsktfR3xZMaBF5EytcSZniwqUN8Uk= root@CICD-node1.zx.org

下载项目  

[root@CICD-node1 ~]# rm -rf zx/
[root@CICD-node1 ~]# ls
anaconda-ks.cfg  Documents  gitlab-ce-17.1.6-ce.0.el9.x86_64.rpm  Pictures  Templates  zuoyedir
Desktop          Downloads  Music                                 Public    Videos

[root@CICD-node1 ~]# git clone git@172.25.254.150:root/zx.git
Cloning into 'zx'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (3/3), done.
[root@CICD-node1 ~]# 
[root@CICD-node1 ~]# ls -R
.:
anaconda-ks.cfg  Documents  gitlab-ce-17.1.6-ce.0.el9.x86_64.rpm  Pictures  Templates  zuoyedir
Desktop          Downloads  Music                                 Public    Videos     zx

./Desktop:

./Documents:

./Downloads:

./Music:

./Pictures:

./Public:

./Templates:

./Videos:

./zuoyedir:
zuoyedir

./zuoyedir/zuoyedir:

./zx:
README.md
[root@CICD-node1 ~]# cd zx/
[root@CICD-node1 zx]# ls
README.md
[root@CICD-node1 zx]# git remote -v
origin	git@172.25.254.150:root/zx.git (fetch)
origin	git@172.25.254.150:root/zx.git (push)
[root@CICD-node1 zx]# echo zx > zx
[root@CICD-node1 zx]# git add zx
[root@CICD-node1 zx]# git commit -m "add zx"
[main ae5f020] add zx
 1 file changed, 1 insertion(+)
 create mode 100644 zx
[root@CICD-node1 zx]# git push -u origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 253 bytes | 126.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To 172.25.254.150:root/zx.git
   681c466..ae5f020  main -> main
branch 'main' set up to track 'origin/main'.

六、Jenkins

1、Jenkins简介

  • Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

  • Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行

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

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

2、部署Jenkins

软件下载:Download and deploy

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

[root@CICD-node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.150	CICD-node1.zx.org
172.25.254.160  jenkins.zx.org

[root@jenkins ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.160	jenkins.zx.org
172.25.254.150	CICD-node1.zx.org
#安装依赖包
[root@jenkins ~]# yum install fontconfig java-17-openjdk git -y

#安装jenkins
[root@jenkins ~]# dnf install jenkins-2.462.2-1.1.noarch.rpm -y

#启动jenkins
[root@jenkins ~]# systemctl enable --now jenkins.service

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

# 当插件加载下载失败(因网络环境问题)
[root@jenkins ~]# systemctl stop jenkins.service 
[root@jenkins ~]# rm -rf /var/lib/jenkins/*
[root@jenkins ~]# systemctl start jenkins.service 
# 若出现超时的错误,则增加超时时长
[root@jenkins ~]# vim /usr/lib/systemd/system/jenkins.service        # TimeoutStartSec=600
[root@jenkins ~]# systemctl daemon-reload
[root@jenkins ~]# systemctl start jenkins.service 

[root@jenkins ~]# cd /var/lib/jenkins/
[root@jenkins jenkins]# rm -rf plugins/
[root@jenkins jenkins]# tar zxf /root/plugins.tar.gz 
[root@jenkins plugins]# cat /var/lib/jenkins/secrets/initialAdminPassword
ae5e27439d254a58b289a8961d400074
[root@jenkins ~]# systemctl restart jenkins.service 

更改密码(admin)


 

3、Jenkins与gitlab的整合

添加ssh密钥

上传公钥
[root@jenkins jenkins]# cd
[root@jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
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:UL/va/TFHH57ASgghxHwBCgppmQH9rI+ub6c9VKgrR4 root@jenkins.zx.org
The key's randomart image is:
+---[RSA 3072]----+
| +ooo++ .        |
|==..oo + .       |
|B... .+ . . .    |
|. o.   . . o . . |
| .o .   S o   oo.|
|.... .     ..  o=|
| E...      ... .+|
|..*..      .. ...|
|oB. ..     .o.  .|
+----[SHA256]-----+
[root@jenkins ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDEGl6+UHeYahTBMWATLhHiGEJy8MMoXdb6KF8crvJ/j3w5UcTemEot38ijX9QX7khSLeYdIsNtmxvxORtXrT7kzOXxe8op/cZR9k3ZGHICmLwlYXSF1lx/XhEWL5/f8O3+zcPDWCIOBs7SWeg0FHari/GlIARaJf+hdzMuGeE/+04J59In0UoCc0f3sp0NH3Oepi1XT57tpQL8Fiv4QKgt72/a4WJzNbJO/0vq9ynbobkGyo3I6E3/DO1kqsTiBkxhdA7zn4+hyfP+SRMc+F4Sdpj1uD9icxNNKTHeBoJMDdkr/hXyWqFiuUzZAFsjQrGJk86qRM+lxmoYY0hoYaIN1k85wfIHCwF5lds1ZwjFAFWmw1vtp/lChHMUqux0UwtZVghHUL2MX5frta3VxN386PL9Fn1LYnvPuQzClpS8Jn7T4sTHZ+gcEkdQ7GRCG3DWXnKnaRWSbINGTH0bHyWETs6ontkBBEDFHdRmXLFmrmYvoRAog41ZbxTjzGnbyg0= root@jenkins.zx.org

 

上传私钥
# 私钥
[root@jenkins ~]# cd .ssh/
[root@jenkins .ssh]# cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

 ssh首次连接主机取消签名认证

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

构建 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值