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 中开启:

也可以选择手动 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 秘钥”。
  • 点击添加密钥 ,为密钥命名,并设置过期时间。
  • 配置密钥后,复制生成的密钥保存下来。如果后续秘钥遗失,可以重新生成进行替换。

配置 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 认证。

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

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

stages:
- compile
- build
- deploy variables:
CI_PROJECT_DIR: ./
CI_IMAGE_NAME: sealdemo/game2048
CD_WALRUS_PROJECT: default
CD_WALRUS_PROJECT_ENV: local compile:
stage: compile
image: maven:3-openjdk-8
artifacts:
paths:
- target/
script:
- mvn clean package build:
dependencies:
- compile
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
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.json
script:
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/Dockerfile"
--destination "${CI_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}" deploy:
stage: deploy
image: alpine
before_script:
- wget -O walrus --no-check-certificate "${CD_WALRUS_SERVER}/cli?arch=amd64&os=linux"
- chmod +x ./walrus
script:
- ./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: game2048
type: containerservice
attributes:
containers:
- profile: run
image: ${CI_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}
ports:
- schema: http
external: 8080
internal: 8080
protocol: tcp
resources:
cpu: 0.25
memory: 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 流水线:

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

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

查看流水线的运行日志:

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

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

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

到此,我们已经完成将 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/

Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!的更多相关文章

  1. [转] gitlab 的 CI/CD 配置管理

    [From] http://blog.51cto.com/flyfish225/2156602 gitlab 的 CI/CD 配置管理 (二) 标签(空格分隔):运维系列 一:gitlab CI/CD ...

  2. Kubernetes+Jenkins+Nexus+Gitlab进行CI/CD集成

    前面已经完成了 二进制部署Kubernetes集群,下面进行CI/CD集成. 一.流程说明 应用构建和发布流程说明: 1.用户向Gitlab提交代码,代码中必须包含Dockerfile: 2.将代码提 ...

  3. 使用Gitlab的CI/CD功能自动化推送docker镜像到Nexus仓库出现的问题

    在服务器中可以直接使用命令行登录,推送docker镜像等 但是在使用Gitlab的CI/CD功能中,gitlab-ci.yml文件执行过程中出现如下错误: 原因分析: 服务器上之前使用命令行登陆过Ne ...

  4. 持续集成指南:GitLab 的 CI/CD 工具配置与使用

    前言 写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试.编译.发布这些重复性很高的工作 ...

  5. Jenkins CI&CD 自动化发布项目实战(下篇)

    Jenkins CI&CD 自动化发布项目实战(下篇) 作者 刘畅 时间 2020-12-04 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...

  6. Jenkins CI&CD 自动化发布项目实战(上篇)

    Jenkins CI&CD 自动化发布项目实战(上篇) 作者 刘畅 时间 2020-11-28 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...

  7. Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(二)

    一.说明 1.1 说明 前面介绍采用 Jenkinsfile + KubernetesPod.yaml 方式进行部署项目(Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-s ...

  8. Gitlab的CI/CD初尝试

    初衷:今天公司的前端和测试人员吵起来了.原因是测试埋怨前端人员把Bug的状态更改为已解决,结果代码根本没提交,而前端人员埋怨测试测的太频繁了,需要打几个环境的包不方便.又要改东西又要频繁打包费时间.凡 ...

  9. 一种使用gitlab的CI/CD功能实现Nginx配置更新的方法

    至于nginx的docker制作,前面已介绍过. 现在使用gitlab在线编辑的方式,可实现Nginx的自定义配置并更新. .gitlab-ci.yml内容如下: variables: project ...

  10. Docker 集成 Jenkins Gitlab 实现 CI/CD

    首先介绍下环境部分,文章中共涉及到三台服务器,分别用 Gitlab,Jenkins,Deploy 三个名称代替,部署在内网环境,同时因为政策原因,服务器无法直接连通外网.下载 Jenkins 插件时需 ...

随机推荐

  1. ABAP RSA方式调用工行银企直联API

    目录 一.研究背景 二.   RSA简介 RSA是非对称加密的一种. 对称加密算法: 在加密和解密时使用的是同一个秘钥:如图所示: 非对称加密算法: 需要一对密钥来加密解密,这两个密钥是公开密钥(pu ...

  2. Printer Queue,UVa 12100 (自定义标记法 + 优先队列)

    题目描述: 我们需要用打印机打印任务.每个任务都有1~9间的优先级,优先级越高,任务越急. 打印机的运作方式:从打印队列里取出一个任务j,如果队列里有比j更急的任务,则直接把j放到打印队列尾部,否则打 ...

  3. 共享内存原理与VCS监控采集实战

    作者:cluo 一.前言 共享内存广泛用于Redis,Kafka,RabbitMQ 等高性能组件中,本文主要提供一个共享内存在广告埋点数据采集的实战场景. 二.共享内存原理 1.原理 在Linux中, ...

  4. 运行vue项目时报错“ValidationError: Progress Plugin Invalid Options”

    https://blog.csdn.net/M_Nobody/article/details/123135041?spm=1001.2101.3001.6650.1&utm_medium=di ...

  5. Nginx Location 深入剖析及动静分离简易配置

    本文为博主原创,未经允许不得转载: 1. location 使用分析 location 是 Nginx 配置 中的一个指令,用于访问的 URL 匹配,而在这个 location 中所配置的每个指令将会 ...

  6. pycharm等编辑器快捷键大赏

    1.序论 平时打代码的时候用鼠标在写代码的时候还行,代码一长就GG,快捷键便是我们的好选择 2.应用场景 1.问题一--选中一段指定区域 我想选中一段区域(我们一般用鼠标拖动),或者某一个标识符(光标 ...

  7. 【译】Visual Studio 2013 退役 :旧版本 Visual Studio 的支持提醒

    新年到了,也是提醒我们 Visual Studio 支持生命周期中即将到来的日期的好时机.对 Visual Studio 2013 的支持将于今年4月9日结束.如果您使用的是旧版本的Visual St ...

  8. [SpringMVC] - 解决Jackson中文乱码 : springmvc-servlet.xml

    <!-- 指定响应体返回类型和编码 , 解决乱码????的问题 --> <mvc:annotation-driven> <mvc:message-converters r ...

  9. Linux-远程连接-ssh

  10. Oracle 高低水位线的学习

    Oracle 高低水位线的学习 背景 最近产品的一些脚本会大量的给一些流程表里面插入数据 因为只是一个流程相关没有时序查询的需求 所以数据量挺大, 但是按照石时间戳删除非常麻烦. 自己执行过多次del ...