Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!

Walrus file 是 Walrus 0.5 版本推出的新功能,用户可以通过一个非常简洁的 YAML 描述应用或基础设施资源的部署配置,然后通过 Walrus CLI 执行 walrus apply或在 Walrus UI 上进行import,将 Walrus file 提交给 Walrus server,由 Walrus server 完成对应用或基础设施资源的部署/配置/管理,并在多个环境之间快速复用。

 

本教程将演示如何将 Walrus CLI 与 GitLab CI 进行集成,并通过 Walrus file 发布应用,以打通更多的 CI/CD 自动化交付环节。

 

前提条件

在开始之前,请先完成以下准备工作:

 

  1. 在 GitLab 上新建一个项目,将我们的 demo 项目(https://github.com/seal-demo/2048 )import 到该项目。如果没有开启 GitHub 类型的 Import Project 权限,参考下图示意,在 Admin Area 中开启:

 

image.png

 

也可以选择手动 git clone 项目,新建 GitLab 项目 push 到其中。

 

  1. 通过 docker run 安装 Walrus,额外暴露 30000~30100 端口,给本文中部署到内置 K3s 集群的工作负载的 NodePort 端口使用,参考:https://seal-io.github.io/docs/deploy/standalone

 


sudo docker run -d --privileged --restart=always --name walrus \-p 80:80 -p 443:443 -p 30000-30100:30000-30100 \sealio/walrus

 

  1. 访问 Walrus,在 Walus 最新的 0.5 版本,会自动在 default 项目中创建一个名为 local 的环境,自动将 Walrus 容器中内置的 K3s 或部署所在的 K8s 集群添加为该环境的连接器,本示例将使用该 K3s 集群进行演示。

 

  1. 在 Walrus 上创建一个 API 密钥,用于后面 Walrus CLI 与 Walrus Server 之间进行通信的认证。操作步骤如下:

 

  • 导航到 “账号 > 用户信息 > API 秘钥”。
  • 点击添加密钥 ,为密钥命名,并设置过期时间。
  • 配置密钥后,复制生成的密钥保存下来。如果后续秘钥遗失,可以重新生成进行替换。

 

image.png

 

配置 Walrus CLI 与 GitLab CI 集成

这里我们将演示一个从 CI 到 CD 的示例。按照以下步骤操作,将 Walrus CLI 集成到 GitLab CI:

 

  1. 访问 GitLab,导航到 Admin Area > Settings > CI/CD > Variables

 

  1. 添加以下 variables,配置 GitLab CI 执行需要的敏感信息:
  • CI_REGISTRY_USERNAME :CI 构建容器镜像推送到 Docker Hub 的用户名,参考 docker login
  • CI_REGISTRY_PASSWORD:CI 构建容器镜像推送到 Docker Hub 的密码,参考 docker login
  • CD_WALRUS_SERVER:Walrus 的访问 URL,格式为https://domain:port
  • CD_WALRUS_TOKEN:Walrus 的 API 密钥,用于 CLI 认证。

 

image.png

 

  1. 在 GitLab 项目中创建 .gitlab-ci.yml 文件(默认已存在于示例项目中),此文件将定义你的 CI/CD 工作流。

 

以下是用于部署示例项目 Game 2048.gitlab-ci.yml 文件示例,你可以按需进行复制和修改。例如,将镜像 sealdemo/game2048 修改为自己定义的镜像名称。

 

stages:- compile- build- deployvariables:CI_PROJECT_DIR: ./CI_IMAGE_NAME: sealdemo/game2048CD_WALRUS_PROJECT: defaultCD_WALRUS_PROJECT_ENV: localcompile:stage: compileimage: maven:3-openjdk-8artifacts:paths:- target/script:- mvn clean packagebuild:dependencies:- compilestage: buildimage:name: gcr.io/kaniko-project/executor:debugentrypoint: [""]artifacts:paths:- target/before_script:- mkdir -p /kaniko/.docker- echo "{\"auths\":{\"https://index.docker.io/v1/\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USERNAME}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.jsonscript:- /kaniko/executor--context "${CI_PROJECT_DIR}"--dockerfile "${CI_PROJECT_DIR}/Dockerfile"--destination "${CI_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}"deploy:stage: deployimage: alpinebefore_script:- wget -O walrus --no-check-certificate "${CD_WALRUS_SERVER}/cli?arch=amd64&os=linux"- chmod +x ./walrusscript:- ./walrus login --insecure --server ${CD_WALRUS_SERVER} --token ${CD_WALRUS_TOKEN}- ./walrus apply -f ./walrus-file.yaml -p ${CD_WALRUS_PROJECT} -e ${CD_WALRUS_PROJECT_ENV}

 

  1. 查看 Walrus 用于部署应用的 walrus-file.yaml 的内容(默认已存在于示例项目中),Walrus 使用一个非常简洁的 YAML 结构描述应用的部署配置,称为 Walrus file,你可以按需修改:

 

version: v1
resources:
- name: game2048type: containerserviceattributes:containers:- profile: runimage: ${CI_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}ports:- schema: httpexternal: 8080internal: 8080protocol: tcpresources:cpu: 0.25memory: 512

 

  1. 访问 GitLab,导航到 Admin Area > CI/CD > Runners ,检查 GitLab Runner 是否正常在线(参考 GitLab 官方文档安装 GitLab Runner: https://docs.gitlab.com/runner/install/ ),GitLab Runner 用于运行由 .gitlab-ci.yml 定义的 CI/CD 流水线:

 

image.png

 

  1. 导航到 2048 Project > Build > Pipelines,选择 Run pipeline 运行流水线:

 

image.png

 

等待流水线运行完成,检查流水线的运行结果:

 

image.png

 

查看流水线的运行日志:

 

image.png

 

可以看到流水线已成功运行,GitLab CI 依次完成了 maven 构建、容器镜像构建上传、使用 Walrus CLI 部署应用到 K3s 集群的 CI/CD 步骤。

 

  1. 流水线成功运行后,你可以访问 Walrus ,查看所部署的 game2048 应用。

 

image.png

 

通过自动识别的 endpoints 加上 /2048 路径,访问2048游戏。完整访问 URL 参考:http://domain:port/2048。

 

image.png

 

到此,我们已经完成将 Walrus CLI 与 GitLab CI 集成的教程演示,并通过 Walrus v0.5 版本最新的 Walrus file 能力,在开发人员将应用代码提交到 GitLab 时,利用 GitLab CI 和 Walrus,更友好地完成应用的自动化部署。

 

Walrus 通过 XaC(一切即代码)可以统一管理从底层基础设施资源置备到上层应用发布的应用生命周期,本文只演示了其中一个场景片段,有兴趣的朋友欢迎利用 Walrus 探索更多的应用场景,例如置备 Kubernetes 集群、创建云 RDS 数据库、配置 LB 策略等等

 

100%开源,轻松上手

Seal 团队秉持着一以贯之的开源理念和开箱即用的产品设计思路,Walrus 基于 Apache 2.0 许可完全开源,并且仅需一行命令您就可以在已安装 Docker 的电脑上部署 Walrus:

 

sudo docker run -d --privileged --restart=always -p 80:80 -p 443:443 -p 30000-30100:30000-30100 --name walrus sealio/walrus:v0.5.0

 

如果您喜欢这个项目,欢迎在 Github 上为我们点亮 🌟

 

Walrus GitHub 主页:
https://github.com/seal-io/walrus
Walrus 在线文档:
https://seal-io.github.io/docs/zh/

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

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

相关文章

【Python笔记-设计模式】单例模式

一、说明 单例是一种创建型设计模式,能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 (一) 解决问题 维护共享资源(数据库或文件)的访问权限,避免多个实例覆盖同一变量,引发程序崩溃。 …

多线程c++

目录 1.join和detach区别 2.lock_guard和unique_lock 3.原子操作 4.条件变量condition_variable 5.future 和 promise 1.join和detach区别 ①不使用join和detach #include <iostream> #include <thread> #include <windows.h>using namespace std;v…

docker由浅入深

一、什么是docker docker 顾名思义就是轮船的意思&#xff0c;轮船我们知道是通过集装箱运载货物的东西&#xff0c;那么docker其实也是类似的东西&#xff0c;只是装载的是虚拟的运行程序罢了。其中集装箱在docker里面被称为container&#xff08;后面以容器称之&#xff09;…

彻底解决 MAC Android Studio gradle async 时出现 “connect timed out“ 问题

最近在编译一个比较老的项目&#xff0c;git clone 之后使用 async 之后出现一下现象&#xff1a; 首先确定是我网络本身是没有问题的&#xff0c;尝试几次重新 async 之后还是出现问题&#xff0c;网上找了一些方法解决了本问题&#xff0c;以此来记录一下问题是如何解决的。 …

Python(19)Excel表格操作Ⅰ

目录 导包 读取EXCEL文件 1、获取worksheet名称 2、设定当前工作表 3、输出目标单元格数据 4、工作表.rows&#xff08;行&#xff09; 5、工作表.columns&#xff08;列&#xff09; 小结 导包 要想使用 python 操作 Excel 文件&#xff0c;应当导入 openpyxl 包。在…

上位机图像处理和嵌入式模块部署(视频处理vs图像处理)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 从目前发展的情况来看&#xff0c;视频处理会慢慢变成一种主流趋势。这里面的原因很多&#xff0c;比如说现在嵌入式soc的算力越来越强、获取图像的…

【环境配置】安装了pytorch但是报错torch.cuda.is_availabel()=Flase

解决思路&#xff1a;import torch正常&#xff0c;说明torch包安装正常&#xff0c;但是不能和gpu正常互动&#xff0c;猜测还是pytroch和cuda的配合问题 1.查看torch包所需的cuda版本 我的torch是2.0.1&#xff0c;在现在是比较新的包&#xff0c;需要12以上的cuda支持&…

鸿蒙首批原生应用!无感验证已完美适配鸿蒙系统

顶象无感验证已成功适配鸿蒙系统&#xff0c;成为首批鸿蒙原生应用&#xff0c;助力鸿蒙生态的快速发展。 作为全场景分布式操作系统&#xff0c;鸿蒙系统旨在打破不同设备之间的界限&#xff0c;实现极速发现、极速连接、硬件互助、资源共享。迄今生态设备数已突破8亿台&…

.net core 6 集成 elasticsearch 并 使用分词器

1、nuget包安装NEST、安装elasticsearch、kibana、ik分词器、拼音分词器 2、创建操作对象 //索引库 static string indexName "testparticper"; //es 操作对象 ElasticClient elasticClient new ElasticClient(new ConnectionSettings(new Uri("http://192.…

redis面试

0.思维导图 1. redis的数据类型♥♥♥ redis有五种数据类型&#xff0c;包括string,list,set,hash,zset;string就类似于java中的字符串&#xff0c;list就类似于Java中的列表&#xff0c;可以存放重复的元素&#xff0c;set就类似于java中的hashset&#xff0c;不能存放重复的…

索引文件的建立与查询示例(五)

隔了好几天没顾上更新内容&#xff0c;在此继续吧。还是得多动头脑&#xff0c;否则忙于日常事务&#xff0c;脑子不够灵活。在代码的世界里还是能有一些灵感。上次说到在内存中实现链表建立以及打印出链表的操作。这节我们试着将链表存入文件&#xff0c;并从文件中进行读取。…

关于maven项目构建的解释

在Idea中使用模块化构建项目 项目介绍&#xff1a; sky-server依赖sky-pojo和sky-common&#xff0c;继承sky-take-outsky-pojo继承sky-take-outsky-common继承sky-take-out 由于Idea编译器自动识别引入的模块&#xff0c;所以在Idea中可以运行项目。 在Idea中使用maven打包…

Java多线程--同步机制解决线程安全问题方式二:同步方法

文章目录 一、同步方法&#xff08;1&#xff09;同步方法--案例11、案例12、案例1之同步监视器 &#xff08;2&#xff09;同步方法--案例21、案例2之同步监视器的问题2、案例2的补充说明 二、代码及重要说明&#xff08;1&#xff09;代码&#xff08;2&#xff09;重要说明 …

用GPT写PHP框架

参考https://www.askchat.ai?r237422 写一个mvc框架 上面是简单的案例&#xff0c;完整的PHP框架&#xff0c;其核心通常包含以下几个关键组件&#xff1a; 1. 路由&#xff08;Routing&#xff09;&#xff1a;路由组件负责解析请求的URL&#xff0c;并将其映射到相应的控制…

Springboot项目启动后浏览器不能直接访问接口,而postman可以访问?

在云服务器上部署springboot后端时&#xff0c;项目启动后浏览器不能直接访问接口,而postman可以访问。这是当时困扰了我大半天的小问题&#xff0c;在我打开防火墙和阿里云安全组之后还是没解决。然后在网上搜了很多很多资料&#xff0c;以为是浏览器访问权限或者是https什么证…

【乳腺肿瘤诊断分类及预测】基于LVQNN学习向量量化神经网络

课题名称&#xff1a;基于LVQ神经网络的乳腺肿瘤诊断&#xff08;类型分类&#xff09; 版本日期&#xff1a;2023-03-10 运行方式: 直接运行0501_LVQ0501.m 文件即可 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 威斯康辛大学医学院…

H.264与H.265的主要差异

H.265仍然采用混合编解码&#xff0c;编解码结构域H.264基本一致&#xff0c; H.265与H.264的主要不同 编码块划分结构&#xff1a;采用CU (CodingUnit)、PU(PredictionUnit)和TU(TransformUnit)的递归结构。 并行工具&#xff1a;增加了Tile以及WPP等并行工具集以提高编码速…

优化器刺客之limit 1--Order by col limit n 代价预估优化探索

一、现象 order by 排序加了limit后更慢了&#xff1f; test# explain analyze select userid from dba_users where username like %aaaaaaaaaaaaaaaaaa% order by userid ;QUERY PLAN --------------…

第4章 python深度学习——(波斯美女)

第4章 机器学习基础 本章包括以下内容&#xff1a; 除分类和回归之外的机器学习形式 评估机器学习模型的规范流程 为深度学习准备数据 特征工程 解决过拟合 处理机器学习问题的通用工作流程 学完第 3 章的三个实例&#xff0c;你应该已经知道如何用神经网络解决分类问题和回归…

调试小结:PHY初始化前后Link Status是否能正确反应网线插上、拔下状态

1 说明 为了验证是否需要初始化PHY才能检测到网线插上、拔下&#xff0c;这里我们对比初始化PHY&#xff08;LAN8720&#xff09;前后&#xff0c;插拔网线PHY寄存器1的bit2的是否按照预期变化来进行测试。 我们查看的PHY寄存器是1的bit2&#xff0c;定义如下&#xff1a; 2…