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 项目(github.com/seal-demo/2… )import 到该项目。假如没有敞开 GitHub 类型的 Import Project 权限,参阅下图暗示,在 Admin Area 中敞开:

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

也能够选择手动 git clone 项目,新建 GitLab 项目 push 到其间。

  1. 经过 docker run 装置 Walrus,额外露出 30000~30100 端口,给本文中布置到内置 K3s 集群的工作负载的 NodePort 端口运用,参阅:seal-io.github.io/docs/deploy…

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 实用教程|Walrus + Gitlab,打通CI/CD 主动化交给!

装备 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 认证。

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

  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: docs.gitlab.com/runner/inst… ),GitLab Runner 用于运转由 .gitlab-ci.yml 界说的 CI/CD 流水线:

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

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

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

等候流水线运转完结,检查流水线的运转结果:

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

检查流水线的运转日志:

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

能够看到流水线已成功运转,GitLab CI 依次完结了 maven 构建、容器镜像构建上传、运用 Walrus CLI 布置运用到 K3s 集群的 CI/CD 步骤。

  1. 流水线成功运转后,你能够拜访 Walrus ,检查所布置的 game2048 运用。

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

经过主动识别的 endpoints 加上 /2048 路径,拜访2048游戏。完好拜访 URL 参阅:http://domain:port/2048。

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

到此,咱们已经完结将 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 主页:

github.com/seal-io/wal…

Walrus 在线文档:

seal-io.github.io/docs/zh/