云上持续交付实践系列2--- go篇

简介: 本文通过一个开源的web项目演示了如果在阿里云持续交付平台上编译并部署go语言项目。go 语言在阿里云持续交付平台上已经得到了很好的支持,本篇文章主要讲的编译过程的一些技巧和注意点,采用的项目是github 开源的go版本的代码托管服务gogs。

go 作为一门google 开发的语言最近是越来越火了,其具备清晰、并行、安全等优点。当下非常流行的docker就是用go 语言的编写的。阿里云持续交付平台最近推出了多语言编译的支持,其中就包括go。本文就拿github 上开源的纯go 语言项目gogits/gogs 来小尝牛刀。

项目介绍

gogs 是github 上开源的用go 编写的轻量级的git 服务器。相比于现有开源的gitlab, 它更加的灵活、轻量、跨平台,很适合小型的开发团队。项目主页的地址:https://gogs.io/

准备工作

阿里云持续交付平台目前还不支持直接从github 上下载代码,所以我们需要在阿里云Code(https://code.aliyun.com) 新建一个代码库,并讲github 上的代码push 上去。

配置工作流

关于在阿里云持续交付平台上如何新建项目、新建工作流、关联代码库等功能可以参考已有的一篇文章(https://yq.aliyun.com/articles/26414)针对go 语言以及这个项目,本文中的工作流结构如下图:
_2016_04_21_12_00_19

这个工作流配置了代码检出和部署两个节点关联我们在阿里云Code 上的代码库,其中代码检出包含了代码更新和编译两个任务。
其中编译任务选择了go1.6版本,编译命令如下:

    mkdir -p $GOPATH/src/github.com/gogits/gogs
    cp -rf $SOURCEPATH/* $GOPATH/src/github.com/gogits/gogs/
    mkdir -p $GOPATH/src/golang.org/x
    cd $GOPATH/src/golang.org/x
    git clone https://github.com/golang/crypto.git
    git clone https://github.com/golang/net.git
    git clone https://github.com/golang/text.git
    go get
    go build

关于编译命令

  • go语言的编译环境提供了两个环境变量可以在命令行中使用:
     GOPATH: /root/gopath
     SOURCEPATH: /root/source/{projectName}
  • 由于该项目中使用了golang.org 上面的一些依赖包,然而国内对于这些包的访问受限(你懂的)。
    我们可以通过使用github 上对应的包来替换掉。这个项目中需要使用到的主要是crypto、net 、text

三个包

关于产出物路径:

输出物路径是指相对于SOURCEPATH的需要打包的文件,所以在这条工作流的配置为:
    ../../gopath/src/github.com/gogits/gogs/gogs

关于部署命令:
_2016_04_21_2_11_57

在部署节点中,我们选择了手动部署,填写ip地址以及重启命令:

    cd /tmp/
    tar -xvf package.tgz
    cp -rf /tmp/gogs /home/git/go/src/github.com/gogits/gogs/
    nohup sh  /home/git/bin/restart.sh >> /tmp/log.log 2>&1 &

其中restart.sh 为重启脚本,其中的命令:

   ps -ef |grep gogs|awk '{print $2}'|xargs kill -9
  /home/git/go/src/github.com/gogits/gogs/gogs web

运行工作流

配置完工作流后,点击触发生成工作流实例并点击相应按钮完成部署后,
_2016_04_21_2_18_56

这时候我们就可以在部署机器上看到我们部署完成的页面了:
223

后话:

目前的每次编译下载依赖包速度较慢,后面平台会考虑加速的方案,同样会解决国外某些网络不通的结果。

目录
相关文章
|
1月前
|
负载均衡 算法 数据库连接
Go语言性能优化实践:案例分析与解决方案
【2月更文挑战第18天】本文将通过具体的案例分析,探讨Go语言性能优化的实践方法和解决方案。我们将分析几个典型的性能瓶颈问题,并详细介绍如何通过优化代码、调整并发模型、改进内存管理等方式来提升程序的性能。通过本文的学习,读者将能够掌握一些实用的Go语言性能优化技巧,为实际项目开发中的性能优化工作提供指导。
|
1月前
|
运维 网络协议 安全
长连接网关技术专题(十):百度基于Go的千万级统一长连接服务架构实践
本文将介绍百度基于golang实现的统一长连接服务,从统一长连接功能实现和性能优化等角度,描述了其在设计、开发和维护过程中面临的问题和挑战,并重点介绍了解决相关问题和挑战的方案和实践经验。
74 1
|
1月前
|
Java Go C++
Go语言中的面向对象编程实践
【2月更文挑战第10天】本文将深入探讨在Go语言中如何进行面向对象编程实践。我们将了解如何在Go中实现封装、继承和多态,以及如何利用结构体、接口和方法来构建健壮和可维护的对象导向程序。通过实际代码示例,我们将更好地理解Go的OOP特性,并学习如何有效地运用它们。
|
2月前
|
Go 开发者
Go语言中的错误处理与异常机制:实践与最佳策略
【2月更文挑战第7天】Go语言以其独特的错误处理机制而闻名,它鼓励显式错误检查而不是依赖于异常。本文将探讨错误处理与异常机制在Go语言中的实际应用,并分享一些最佳实践,帮助开发者编写更加健壮和易于维护的Go代码。
|
5月前
|
算法 测试技术 Go
【Go 编程实践】从零到一:创建、测试并发布自己的 Go 库
解释了为何需要开发自己的 Go 库,以及如何创建、测试和发布。文章以 Asiatz 库为例,详细阐述了创建目录、初始化项目、编写代码、测试、编写文档和发布等步骤,并强调了开发自己的 Go 库的优点,包括代码复用性、可维护性和可测试性。
231 0
【Go 编程实践】从零到一:创建、测试并发布自己的 Go 库
|
6月前
|
存储 Go 数据处理
Go 语言整洁架构实践
Go 语言整洁架构实践
50 0
|
6月前
|
安全 Go
Go语言函数实现接口的N个实践技巧
Go语言函数实现接口的N个实践技巧
38 0
|
1月前
|
Kubernetes Go 开发者
Go语言与Docker容器结合的实践应用与案例分析
【2月更文挑战第23天】本文通过分析实际案例,探讨了Go语言与Docker容器技术结合的实践应用。通过详细阐述Go语言在容器化环境中的开发优势,以及Docker容器技术在Go应用部署中的重要作用,本文旨在为读者提供Go语言与Docker容器结合的具体实现方法和实际应用场景。
|
1月前
|
安全 中间件 Go
Go语言Web服务性能优化与安全实践
【2月更文挑战第21天】本文将深入探讨Go语言在Web服务性能优化与安全实践方面的应用。通过介绍性能优化策略、并发编程模型以及安全加固措施,帮助读者理解并提升Go语言Web服务的性能表现与安全防护能力。
|
1月前
|
存储 算法 Go
泛型在Go语言中的引入与实践
【2月更文挑战第19天】Go语言1.18版本引入了对泛型的原生支持,这一特性使得开发者能够编写更加通用和灵活的代码。本文将深入探讨Go语言中泛型的引入背景、使用方法和实践案例,帮助读者了解并应用这一强大的编程工具。