作者|郑成

来源|尔达 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. python读取、写入txt文本内容

    转载:https://blog.csdn.net/qq_37828488/article/details/100024924 python常用的读取文件函数有三种read().readline().r ...

  2. cf2A Winner(implementation)

    题意: N个回合. 每个回合:name score[名为name的这个人得了score分(可负可正)]. 问最后谁的累积分数是最高的.设为M.如果有好几个都得了M,找出这几个人中哪个最早回合累积分数超 ...

  3. 第07课 OpenGL 光照和键盘(2)

    下一段代码绘制贴图立方体.我只对新增的代码进行注解.如果您对没有注解的代码有疑问,回头看看第六课. int DrawGLScene(GLvoid) // 从这里开始进行所有的绘制 { glClear( ...

  4. Ubuntu中python的mysql操作

    1.在已经安装了python和MySQL数据库的前提下使用pip3 install PyMySQL命令 2. 建立链接: (1)首先使用命令python 进入编程模式,再导入包: import pym ...

  5. RocketMQ源码详解 | Broker篇 · 其三:CommitLog、索引、消费队列

    概述 上一章中,已经介绍了 Broker 的文件系统的各个层次与部分细节,本章将继续了解在逻辑存储层的三个文件 CommitLog.IndexFile.ConsumerQueue 的一些细节.文章最后 ...

  6. hudi clustering 数据聚集(二)

    小文件合并解析 执行代码: import org.apache.hudi.QuickstartUtils._ import scala.collection.JavaConversions._ imp ...

  7. Python 流程控制-分支结构详解

    目录 Python 流程控制--分支结构 1.结构分类 顺序结构 分支结构 循环结构 2.分支结构详解 分支结构 定义格式: if 单支结构 if 双分支结构 if 多分支结构 Python 流程控制 ...

  8. XMLHttpRequest—>Promise

    XMLHttpRequest.open() 初始化 HTTP 请求参数 语法open(method, url, async, username, password) method 参数是用于请求的 H ...

  9. [luogu7476]苦涩

    维护线段树,在其每一个节点上维护一个set(可重),以及子树内所有set的最大值 考虑下传标记,如果将所有元素全部下传复杂度显然不正确,但注意到我们仅关心于其中的最大值,即仅需要将最大值下传即可 其有 ...

  10. 统计学习3:线性支持向量机(Pytorch实现)

    学习策略 软间隔最大化 上一章我们所定义的"线性可分支持向量机"要求训练数据是线性可分的.然而在实际中,训练数据往往包括异常值(outlier),故而常是线性不可分的.这就要求我们 ...