珠联璧合:GitLab 10.0版本与Kubernetes的巧妙集成

图片描述
自从GitLab发布以开发者为中心的集成应用开发平台9.0版以来的六个月中,已累计下载达二百万次,之后该公司一直忙于对VMWare、Sony和Ticketmaster等客户公司近1000名用户做问卷调查,以了解开发人员发行最具企业价值的GitLab版本所需的功能。

现阶段的结果是:GitLab发布了具有世界各地开发人员所需求的具有新功能和性能的10.0版本。

GitLab官方发布:GitLab10.0版本提供了能够充分体现DevOps优势的功能,特别是基于CI / CD和Kubernetes的应用程序开发。该行业越来越多地采用云原生功能和利用Kubernetes的开源容器编排软件市场,这导致行业对自动化流程的需求越来越多。 而GitLab 10.0版本可以满足企业和团队对自动化流程这一需求。

云原生通过扩展的Kubernetes功能,在GitLab 10.0中得到提升。通过这种最新的集成,将应用部署到Kubernetes是一个无缝的过程,无论服务器运行在哪里,都可以利用GitLab CI快速配置、部署和利用集群。 作为Kubernetes和云原生软件开发工具的使命的一部分,GitLab还与Cloud Native Computing Foundation(CNCF)合作,在今年上半年,被CNCF认可为速度最快的十大开源项目之一,GitLab 10.0版本进一步提高了致力于帮助企业获得云原生应用开发公司的全部优势。

最新版本的GitLabs Auto DevOps与Kubernetes同时提供能简单有效的改进和增强CI/CD功能的方式,以实现安全、灵活连续传输管道的自动化。
图片描述
其他新功能包括:

Auto DevOps:此功能默认情况下自动配置软件开发生命周期,提供开箱即用的模板,以自动启用和配置构建测试代码质量,查看应用程序部署和监控

New UI:更新版本的用户界面提供了更简洁的导航,以及新的测试和监控功能。生产功能用于减少增强子组、部署板和普罗米修斯的生产周期时间,将文件存储在对象库中的能力,以及对于Slack以及JIRA增强集成的支持。

**Expanded Kubernetes capabilities:**GitLab CI / CD通过提供快速方式配置、部署和监视Kubernetes内的应用程序,无论GitLab是安装在群集内还是外部,都可以部署到Kubernetes。

Issue Boards:团队发布委员会允许更多的协作,在一个视图中,让多个项目中的团队能够在单个组中的所有项目中管理问题。 列表、标签和里程碑都在组级别的管理平台上进行管理,从而允许用户在宏观层面关注组抽象化。

10.0版本功能的目的在于在使开发人员的生活变得更轻松,同时加快工作流程,并让强大的技术更容易被使用。 在Auto DevOps的例子中,开发人员可能会同时进行多个项目,如果必须对每一个项目都设置工具是毫无意义的。在默认情况下,Auto DevOps进一步启用功能,完全删除配置步骤,并且不需要点击。

Auto DevOps的新功能使得资深开发人员可以节省时间,也留出更多的时间给他们上手。因为全行业有三分之二的团队都在自主使用GitLab,所以这些优势将会广泛的被发挥。通过为企业开发人员提供开发优质代码所需的工具,从而达到开发速度更快的目的。

关于Ghostcloud

Ghostcloud(中文名:精灵云)坐落于成都天府软件园,是成都高新区重点扶持企业,国内首批从事容器虚拟化研发的企业,是西南地区唯一一家基于Docker的云计算服务商,为企业级行业客户提供针对互联网化、私有云管理平台、大数据业务基础架构的平台服务。

Ghostcloud因容器技术而生,以最新容器技术Docker为基础,为适应不同行业客户需求,全自主研发了一套调度引擎框架Newben,且全方位适配Kubernetes主流开源调度引擎,也是国内率先实现双调度引擎的企业,是一流的企业级容器云服务专家。Ghostcloud推出了企业级容器云PaaS/CaaS平台,命名为EcOS(EnterpriseContainer Operation System)。Ghostcloud将EcOS平台与微服务/DevOps相融合,运用至企业IT系统的全生命周期的开发、测试、运维及发布流程中,致力于为多个领域企业向“互联网+”转型提供针对互联网化、私有云管理平台、大数据业务基础架构的平台服务,帮助企业级客户降低成本、提升效率、简化运维及产品部署,并提升系统的可靠性和安全性。

【Devops实践】Git+Gitlab+Jenkins pipeline(maven+Sonarqube+harbor) +k8s 整合CICD 1.git 提交代码 2.gitlab 存储代码 3.Jenkins pipeline 整合(maven编译代码->Sonarqube代码质量检测->经过代码质量检测后代码构建的容器镜像存到harbor镜像仓库),将写好的yaml文件传送到K8s master中执行 4.k8s apply -f yaml文件部署deployment 阅读详情

相关推荐

基于gitlab+docker+k8s打造自动化构建部署流程

工程自动化构建部署 前言 ​ 随着需求越来越多,以及相关代码分支权限的流程规范化,团队内部的项目上线部署复杂度提升,基于现有的环境和市场上主流的软件,打造了一套基于gitlab+docker+harbor+kubernetes的自动化构建部署流程(CI/CD),目前团队内部流程基本走通,整理了一份相关文档分享出来。写的糙的地方,轻喷。 概念 GitLab CI/CD ​ GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。与之对应的有GitHub和

Steven的专栏 3万+

GitLabCI+K8s:SpringBoot自动化部署指南

本文介绍了如何利用GitLab CI/CD流水线在Kubernetes集群上自动化构建、测试和部署SpringBoot应用。主要内容包括:1) GitLab容器注册表的配置方法,包括HTTPS证书设置;2) SpringBoot项目创建指南;3) 环境准备清单,需要Kubernetes集群、GitLab实例及CI Runner等组件。通过整合GitLab CI/CD和Kubernetes,开发者可以实现持续集成和交付,提升代码质量和发布效率。文章详细说明了从环境搭建到应用部署的全流程配置。

油墨香^-^的博客 793

Gitlab CICD 与Kubernetes实践·部署GitLab

上一篇,简单的从????Gitlab CI/CD方法论中探索实践中大致了解Gitlab在CI/CD功能的基本介绍,现在我们通过在K8s集群内安装Gitlab、Gitlab Runner来...

Marionxue 1010

基于Gitlab+jekins+Harbor+Kuboard的CI/CD实践

基于Gitlab+jekins+Harbor+Kuboard的CI/CD实践

zhilianxian2212的博客 898

云原生(三十七) | Kubernetes篇之Gitlab入门和安装

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

Lansonli(蓝深李)的博客 1391

K8S部署GitLab(详细完整版)

在k8s中部署gitlab,然后使用gitlab来实现代码打包到打镜像再到使用镜像自动生成容器服务的过程gitlab部署主要有三个部分,用到了reids、postgresql、gitlab,将三个应用配置好之后启动即可安装gitlab。

感谢阅读 6475

gitlab-ci集成kubernetes自动化部署

1、从Kubernetes获取ServiceAccount token Service Account 是 Kubernetes 用于集群内运行的程序,进行服务发现时调用 API 的帐号,帐号的 token 会直接挂载到 Pod 中,可以供程序直接使用,ServiceAccount给运行在Pod中的进程提供一个身份 如果kubernetes开启了ServiceAccount,那么会在每个nam...

SoftwareMan 4193

零代码进行单细胞数据全流程分析教程

我开发的本地电脑无限使用无限分析作图的生信零代码一键分析电脑软件神器OmicsTools 软件在github上的zihaoxingstudy1/OmicsTools仓库 中,大家可以下载安装OmicsTools进行各种生信分析和可视化作图。

qq_40073899的博客 3634

gitlab新建项目,项目添加kubernetes集群配置

gitlab新建项目,项目添加kubernetes集群配置

yhl18931306541的博客 973

ABAP OO - ALV_TREE例程

项目上比较少有用到ALV_TREE的报表功能,刚好项目上有写了一次,也查阅大量的范例,整合了一写法,给自己做一下笔记。 程序包含功能按钮,按钮下拉,F4帮助,读取选中行,字段双击触发事件,字段前置图标,更新节点,获取节点数据,获取全部子节点,递归算法,DMS模块:创建文档功能,创建文档链接,SNRO创建流水号,缓存数据,下次用户加载进来继续操作。 *&---------------------------------------------------------------------* *&a

大步甩起来 4992

微信小程序如何集成EasyRTC实现零插件音视频通话?5步搞定完整接入流程

本文详细介绍了如何在微信小程序中集成EasyRTC SDK,实现零插件的实时音视频通话功能。通过5个关键步骤,包括环境配置、SDK初始化、核心功能实现、性能优化和问题排查,帮助开发者快速完成WebRTC技术在小程序中的落地应用,解决微信小程序原生不支持实时音视频通信的技术难题。

weixin_28340315的博客 144

kubernetes部署gitlab

【代码】kubernetes部署gitlab

gyfghh的博客 386

从Android到鸿蒙:UI框架迁移的实战指南与最佳实践

本文为Android开发者提供了将应用UI框架迁移至鸿蒙系统的实战指南。文章深入对比了Android命令式编程与鸿蒙ArkUI声明式编程的核心差异,详细讲解了从环境配置、布局迁移(如RecyclerView转List)、逻辑处理到多设备适配与性能优化的全流程最佳实践,帮助开发者高效完成迁移工作。

weixin_29208077的博客 435

gitab+pipeline+jenkins+kuboard+ack进行CI CD配置

pipeline文本内容。

云深海阔专栏 647

Vitis HLS 学习指南与实践教程

Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F

weixin_44707118的博客 1401

[Dify实战] 用 Dify 打造高效的新员工 7 天成长计划-带绑定资源

本文介绍了如何利用Dify平台为新员工制定智能成长计划,解决融入难、节奏乱、成长慢等问题。方案通过输入岗位信息自动生成7天结构化计划,包含每日任务和评估要点,并支持进度跟踪与报告输出。关键点在于设计清晰的Prompt模板,合理分配学习节奏,形成闭环反馈机制。该方案能显著提升新员工培养效率,实现人才培养的数字化升级。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 570

[kubernetes]-kubernetes安装kuboard并配置gitlab登陆

起因: 安装了kuboard 好奇他的gitlab登陆功能,如果gitlab是ldap登陆 那收费的ldap登陆不是等于就有了嘛。 实践过程中 请教了大佬邵欢庆,大佬态度格外好,远程排错,可惜笔记本授权不太会,大佬向日葵连过来没法操作 只能看不能动。 安装过程如下 说明: 我这里的2个域名dex.ihaozhuo.com和test-gitlab.ihaozhuo.com都是自己定义的 外网解析不到,所以需要在coredns和/etc/hosts里添加,apiserver的配置文件也要加上 hostAlia

爷来辣的博客 2107

“详规一张图”——上海土地利用数据

本文围绕城市规划与土地管理中空间数据的重要性,介绍了基于地理信息系统(GIS)技术对上海市用地数据进行获取与处理的具体方法。文章以上海市为例,详细阐述了如何通过构建以10米为间隔的网格点覆盖全市范围,并采用GET请求方式从“上海用地规划官网:详细规划‘一张图’公众版”平台获取地块信息的过程。通过对API接口参数的设置,包括坐标系、几何类型和返回格式等,实现了对每个网格点对应地块的属性信息(如规划用地类型、容积率、地块编号等)及几何形状信息的提取。

weixin_45812624的博客 2198

gitlabCI集成kubernetes

gitlabCI集成kubernetes 整体环境介绍: 本次作为演示准备2个节点,节点1部署gitlab和harbor,节点2部署一个kubernetes master节点。 示例代码地址:https://github.com/willzhang/gitlab-go-demo 安装gitlab 参考:https://docs.gitlab.com/omnibus/docker/ 节点1安装docker curl -fsSL https://get.docker.com -o get-docker.sh

IT 1752

还在用 RaiDrive/Rclone 挂载网盘?教您使用Windows 原生 WebDAV 丝滑直连 AList/Openlist,让你的网盘秒变本地硬盘!

网盘文件分散管理?😩 别再依赖第三方工具了!本文教你如何在 Windows 下,利用原生 WebDAV 功能,将 Openlist 网盘直接映射为本地硬盘!💻 操作简单,告别繁琐,让你的云端文件像本地文件一样丝滑!🚀 轻松实现高效管理,快来体验吧!

XiaoqiangClub的博客 2978

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Kubernetes部署GitLab

1.下载相应文件#mkdirgitlab&&cdgitlab #vimurl.txt https://raw.githubusercontent.com/zhijiansd/ansible-k8s/master/addons/gitlab/gitlab-ns.yaml https://raw.githubusercont...

weixin_33795743的博客 1364

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

GitLab 在 Kubernetes 上的部署教程

GitLab 在 Kubernetes 上的部署教程 项目的目录结构及介绍 Kubernetes-container-service-GitLab-sample/ ├── kubernetes/ │ ├── local-volumes.yaml │ ├── postgres.yaml │ ├── redis.yaml │ ├── gitlab-postgres-svc.yaml ├...

gitblog_00520的博客 745

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

GitLab 连接 Kubernetes姿势一

API URL 是你的集群的apiserver的地址, 通过输入kubectl cluster-info获取,Kubernetes master 地址就是需要的 [root@m50 mnt]# kubectl cluster-info Kubernetes control plane is running at https://192.168.10.50:6443 CoreDNS is running at https://192.168.10.50:6443/api/v1/namespaces/kub.

weixin_42562106的博客 1867

k8s搭建gitlab

Gitlab官方提供了 Helm 的方式在 Kubernetes 集群中来快速安装,但是在使用的过程中发现 Helm 提供的 Chart 包中有很多其他额外的配置,所以我们这里使用自定义的方式来安装,也就是自己来定义一些资源清单文件。 Gitlab主要涉及到3个应用:Redis、Postgresql、Gitlab 核心程序,实际上我们只要将这3个应用分别启动起来,然后加上对应的配置就可以很方便的安装 Gitlab 了,我们这里选择使用的镜像不是官方的,而是 Gitlab 容器化中使用非常多的一个第三方镜像

zhangjunli的博客 1万+
上一篇: Ghostcloud成为全球首批获CNCF认证的Kubernetes服务提供商
下一篇: 珠联璧合:GitLab 10.0版本与Kubernetes的巧妙集成
ghostcloud精灵云
博客等级 码龄11年 81粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值