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 自动化交付环节。
在开始之前,请先完成以下准备工作:
Admin Area
中开启:
也可以选择手动 git clone
项目,新建 GitLab 项目 push 到其中。
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
default
项目中创建一个名为 local
的环境,自动将 Walrus 容器中内置的 K3s 或部署所在的 K8s 集群添加为该环境的连接器,本示例将使用该 K3s 集群进行演示。
这里我们将演示一个从 CI 到 CD 的示例。按照以下步骤操作,将 Walrus CLI 集成到 GitLab CI:
Admin Area > Settings > CI/CD > Variables
。
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 认证。
.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}
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
Admin Area > CI/CD > Runners
,检查 GitLab Runner 是否正常在线(参考 GitLab 官方文档安装 GitLab Runner: https://docs.gitlab.com/runner/install/ ),GitLab Runner 用于运行由 .gitlab-ci.yml
定义的 CI/CD 流水线:
2048 Project > Build > Pipelines
,选择 Run pipeline
运行流水线:
等待流水线运行完成,检查流水线的运行结果:
查看流水线的运行日志:
可以看到流水线已成功运行,GitLab CI 依次完成了 maven
构建、容器镜像构建上传、使用 Walrus CLI 部署应用到 K3s 集群的 CI/CD 步骤。
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 策略等等。
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/