作者|郑成

来源|尔达 Erda 公众号

导读:最近在 Erda 上体验了一下构建并部署一个应用,深感其 DevOps 平台的强大与敏捷,不过为了大家能够快速上手,我尽量简化应用程序,用一个简单的返回 "Hello, World!"go web 应用来进行阐释。

Erda DOP

相信有很多和我一样的开发人员,在完成应用新功能后,不希望将很多注意力放在运维相关的任务上(如应用的打包,构建,部署等)。我希望平台能够屏蔽底下基础设施的复杂逻辑,让我像写代码一样“声明”应用的运行过程和结果,能够方便快速地构建部署我的应用,使我无需关心运维方面的任务。Erda DOP 便是以应用为中心,企业一站式的 DevOps 平台,下面让我们写一个 go web 应用,看它是如何帮助我们快速进行构建部署的。

部署前准备

  1. 在创建部署我们的 go 应用之前,我们需要加入或创建一个组织,并为组织添加相应的集群用于资源的管理和服务的部署运行。
  2. 在组织里创建项目,项目 (Project) 是研发运维的主要对象。
  3. 在我们刚刚创建的项目下新建应用,这个应用我认为相当于 Github Repo,用来存放我们的应用程序和构建部署所需的声明文件。

关于更多组织,项目和应用相关的知识可以点击介绍查看

现在假设我们已经在组织下新建了一个叫 base-project 的项目,并在项目中创建了名为 go-web 的应用,下文 git 地址将会涉及到这两个名字。

准备 go web 代码

示例代码只是一个 golang 的简单 web 服务,只需要能输出 Hello, World! 就可以了,现在新建一个文件夹并创建一个 main.go 文件,在其中写入:

package main

import (
"fmt"
"log"
"net/http"
) func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World!")
} func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}

初始化 go 应用的包管理:

go mod init github.com/erda/go-web

当然了,这只是我为简化应用程序写的代码,你也可以写入自己的 Go 代码(Erda 平台可以部署运行任意语言、任意框架开发的代码,并不局限于 Go / Java 等)。

然后我们先在本地初始化 git 仓库,并进行 commit:

git init
git add .
git commit -m "initialize"

推送示范代码到 Erda 平台

平台基于标准的 Git 协议内置实现了一个 git 代码仓库,用户不需要依赖外部仓库(比如:gitlab 等)就可以完成从源码开发到部署全流程。

平台远程仓库服务器地址查看入口位于:

DevOps 平台 -> 项目 -> 应用 -> 代码仓库 -> 代码浏览 -> 仓库地址

git remote add erda https://erda-org.erda.cloud/wb/base-project/go-web
git push -u erda --all
git push -u erda --tags

定义流水线

对于应用开发人员来说,我们已经完成了新功能的开发,并且推送了我们的代码到 Git 仓库,然后我们希望通过一些声明式的文件来定义如何构建我们的应用,以及我们的应用所需的资源、依赖的基础设施。Erda DOP 提供了两种声明式文件来达到一键部署的目的。

pipeline.yml 描述一个从代码编译构建到应用部署的流水线的配置文件,语法较为简单, 整体只有 stage / action 两级。stage 就是阶段,它用于控制串行和并行;action 则是实际的执行单位。

dice.yml 则是一个应用部署的描述文件,由服务基本信息和服务编排关系两部分组成,具体包含了微服务的 Docker 镜像、资源需求(CPU 和 Memory 等)、微服务之间的依赖关系、环境变量以及 AddOn 等信息,特别是 AddOn,可以让应用开发者完全不需要关心诸如 mysql 等的搭建过程,只需要“声明”应用依赖哪些 AddOn,平台就会自动拉起。(不过由于本次的例子相对简单,没有对 AddOn 进行展示,有兴趣的可以查看官方文档)

给该示范代码工程添加平台配置文件 pipeline.yml 和 dice.yml。

pipeline.yml

简单的完成部署,一般可以设置 4 个 stage 来组成 pipeline.yml,4 个 stage 按照书写顺序依次执行,分别是:

  1. 拉取 Git 源码
  2. 基于源码编译、构建,制作 Docker 镜像
  3. 生成版本产物
  4. 基于版本产物完成部署

4 个 stage 分别可用如下 Action 来执行:

  1. git-checkout
  2. golang
  3. release
  4. dice

该示例的完整 pipeline.yml:

version: "1.1"
stages:
- stage:
- git-checkout:
alias: git-checkout
- stage:
- golang:
alias: go-demo
params:
command: go build -o web-server main.go
context: ${git-checkout}
service: web-server
- stage:
- release:
alias: release
params:
dice_yml: ${git-checkout}/dice.yml
image:
go-demo: ${go-demo:OUTPUT:image}
- stage:
- dice:
alias: dice
params:
release_id: ${release:OUTPUT:releaseID}

dice.yml

dice.yml 来描述我们的应用所需的资源大小,副本数量等。

该示例的完整dice.yml:

version: "2.0"
services:
go-demo:
ports:
- port: 8080
expose: true
resources:
cpu: 0.2
mem: 512
deployments:
replicas: 1

提交文件

将新增的两个 yaml 文件提交至平台的代码仓:

git add .
git commit -m "add pipeline.yml and dice.yml"
git push erda

执行流水线

  1. 进入流水线,右上角点击新建流水线
  2. 流水线任务分析完成后,处于待执行状态,右上角点击 立即执行,开始执行构建。
  3. 流水线任务执行过程中,可以实时查看流水线各步骤的执行状态,并点击日志查看对应节点执行状况的日志信息。

查看应用部署结果

通过流水线构建源码,并成功完成部署动作后,可在部署中心看到已经成功部署的应用实例。

点击 master进入应用管理,可以进一步进行配置域名、服务实例扩缩容等操作。

查看实例 IP 地址并复制到浏览器,加上我们应用服务的端口 8080 可以看到已经成功打印出“Hello,World!”。

最后

本文中使用的示例代码直接托管在了 Github上,可直接 clone 下来使用。

以上只是通过构建部署一个 go web 应用体验了一下 Erda - DOP 的几个核心功能,Erda 还有微服务治理、多云管理平台等其它强大的功能,且 Erda 现已开源并发布 1.0 版本,通过下方链接即可下载并快速开始。

超好玩:使用 Erda 构建部署应用是什么体验?的更多相关文章

  1. 超好玩!10款神奇的字符图案 & 词汇云生成工具

    在这里,我们推荐10款惊人的字符图案生成工具.词云可以定义为词频的图形表示,而字符图案发生器是一个把数据,如文字和标签在以视觉和吸引人的方式展示的简单的工具.这些生成工具具有不同的功能,其中包括不同的 ...

  2. 使用jekins自动构建部署java maven项目(jdk1.7+tomcat7.0+jenkins2.19.3)

    1.下载jenkins 地址:https://jenkins.io/index.html 本人下载了2.19.3版本的war包:jenkins.war 2.安装jenkins 拷贝jenkins.wa ...

  3. Jenkins详细安装与构建部署使用教程(转)

    Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布 ...

  4. Ant + Jenkies +Tomcat 自动构建部署Web项目

    前言:博主资历尚浅,很多东西都还在刚起步学习的阶段,这几天开发任务比较轻,就在自己window系统下,模拟部署远程服务器,利用Jenkies + Ant + Tomcat 搭建了一个自动发布部署的环境 ...

  5. Jenkins具体安装与构建部署使用教程

    Jenkins是一个开源软件项目.旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. Jenkins是基于Java开发的一种持续集成工具,用于监控持续反复的工作,功能包含:1.持续的软件版本号 ...

  6. dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器

    # dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器 #环境centos 7.4 docker 18.03.0-ce # nuxus,创建maven本地源(可 ...

  7. Cocos Creator—最佳构建部署实践

    这篇文章主要是我们团队在使用Cocos Creator过程中的一些关于部署方面的实践总结,标题党了一回,严格来说,应该是<快看漫画游戏研发团队使用Cocos Creator构建部署最佳实践> ...

  8. 使用Docker+Jenkins自动构建部署

    环境 Windows 10 Docker Version 18.06.1-ce-win73 (19507) 运行jenkins 运行jenkins 容器 docker run -d --name ln ...

  9. Jenkins详细安装与构建部署使用教程

    版权声明:本文为博主林炳文Evankaka原创文章,转载请注明出处http://blog.csdn.net/evankaka   目录(?)[+]   Jenkins是一个开源软件项目,旨在提供一个开 ...

随机推荐

  1. Java设计模式——模板设计模式

    模板设计模式 1.模板模式简介 模板模式(Template ):模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑 ...

  2. python网站(持续更新)

    python官网: https://www.python.org/ python文档:中文 https://docs.python.org/zh-cn/3/ pypi网站: https://pypi. ...

  3. jQuery常用验证

    1.文本框不能为为空 if ($("#RushStartTime").val() == "") { alert("请输入该产品.."); $ ...

  4. Win10自动备份oracle数据库

    1.环境 操作系统:win10 数据库: 2.创建backup.bat文件 [ @echo offset name=%date:~0,4%%date:~5,2%%date:~8,2%set backu ...

  5. 阿里云ECI如何6秒扩容3000容器实例?

    引言 根据最新CNCF报告,有超过90%的用户在生产环境使用容器,并且有超过80%的用户通过Kubernetes管理容器.是不是我们的生产环境上了K8s就完美解决了应用部署的问题?IT界有句俗语,没有 ...

  6. Labview一个循环中放两个事件结构会导致前面板锁定的问题

    建议在同一个循环中,只放置一个事件结构.此时,当一个事件发生时,事件结构将对事件进行处理,然后继续循环,事件结构再等待下一个事件发生. 如在同一个循环中放置两个事件结构,只有在两个事件结构都处理了事件 ...

  7. Edge屏蔽CSDN (必应)

    国内的中文论坛都一样的烂(博客园除外),CSDN和微博只是烂的方式不一样.当你想找解决方法的时候却发现搜索出来的结果是同一篇文章被n个人投了n遍,查询内容不仅不能解决问题,还浪费了大量时间.这几天偶尔 ...

  8. C++ 指针的引用和指向引用的指针

    指向引用的指针 简单使用指针的一个例子就是: int a = 1; int *p = &a; 预先强调: 没有指向引用的指针 原因: 因为引用 不是对象,没有地址. 但是指向引用的指针是什么形 ...

  9. OPA-Gatekeeper实验:对特定用户的更新时间窗口做限制

    实验目的 OPA-Gatekeeper可以在Kubernetes 中,通过策略来实现一些额外的管理.安全方面的限制,例如:限制特定用户在 Namespace 中的行为权限 本次实验将在test命名空间 ...

  10. restTemplate的问题-feign的项目

    restTemplate的问题  1.场景描述 在使用feign的项目中,偶然的使用到了restTemplate 在普通方法调用是可以访问的,一旦使用了restTemplate,出现报错 比如: 百度 ...