惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
Engineering at Meta
Engineering at Meta
I
InfoQ
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
H
Help Net Security
博客园 - 【当耐特】
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
腾讯CDC
雷峰网
雷峰网
Martin Fowler
Martin Fowler
The GitHub Blog
The GitHub Blog
D
Docker

Gitee 官方博客

花几千块报志愿之前,先把这 7 个问题问清楚 Gitee 618 年中盛典开启:企业版新购最高送一年,PocketClaw 首次限时折扣 Gitee 成为首批「供应链安全号」成员单位,携手共建国产工业软件生态 七大赛道 TOP 10 公布!Gitee 年度开源项目评选结果正式揭晓 GLM-Image 上线模力方舟:首个国产芯片训练的多模态图像生成模型 「开源技术」正式纳入国家职教体系,Gitee 已为开源教育落地做好准备 Gitee 软件工厂:以密级管理为底座,构建符合国家保密资质的安全研发体系 Claude Code 的代码安全困境:插件机制齐全,却绕不开模型幻觉 北京中关村学院入驻 Gitee:打造 AI for Science 教学新范式 Gitee 移动软件工厂:突破网络限制的开发新模式 从依赖到可控:开源基础设施的国家命题 模力方舟 MCP Server 上线:在 Cursor 里玩 AI 生图+语音 【国内首家】 Gitee Repo 通过信通院《可信制品管理能力分级要求》先进级(最高级)评估 Gitee Repo 助力关键领域 DevSecOps落地:构建安全可控的制品管理体系 会翻译、懂产品、还能画头像:Gitee 智能三连上线! Gitee Pipe:关键领域 DevSecOps 的核心引擎 时代命题下的民营科技担当:从备份战略看 Gitee 的国家定位 没人喜欢写 README?Gitee:现在你不用写了 关键领域软件工厂的安全中枢:Gitee Scan 全面升级供应链检测能力 Gitee MCP 现已支持远程访问:无需本地部署,AI 助手即插即用 Gitee 企业版效能度量全面升级:构建可衡量、可洞察、可优化的研发体系 高标准+安全可控:关键领域研发为什么选择 Gitee Code? 河南农担 x Gitee:以数字化赋能「三农」信贷服务新范式 Gitee Test:驱动软件工厂DevSecOps 落地,保障关键领域安全稳定 马建仓 AI 助手全流程升级:更聪明的研发搭子,更专业的协作助手 从公益初心到商业化探索,开源中国助推中国开源生态之路 以知识管理赋能 DevSecOps,Gitee Wiki 加速关键领域软件自主演进 Gitee 企业版测试管理全面升级:流程更顺畅,交付更可靠 Gitee 企业版 AI 队友邀测开启:程序员的贴身助理来了 Gitee 构件治理实践:CBB 分布式管理助力软件工厂建设
基于 Gitee Go 的 Golang 持续集成部署体验
Gitee · 2020-12-16 · via Gitee 官方博客

Gitee Go 快速体验入口:https://gitee.com/features/gitee-go

Gitee Go 是 Gitee 推出的 CI/CD 服务,通过自定义构建流程,可以实现从代码仓库到构建部署自动化。目前已支持 MavenGradlenpmPythonAntPHPGolang 等工具和语言的持续构建与集成能力。

本次实践将基于 Gitee Go 完成一个 Golang 应用的 自动化构建编译+部署,并通过外网访问预览效果。

实现思路

Gitee Go 提供了将项目持续集成并部署到指定主机环境中的能力,目前支持在任意可连通公网的 Linux 主机上进行部署,推荐主机环境使用 Ubuntu/CentOS。

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

环境准备

  • 实现 Gitee Go 持续部署集成需要一台可连通外网的 Linux 主机,推荐使用 Ubuntu/CentOS。
  • 用户部署目标机器需要自行集成运行环境。
  • 通过文章顶部开头链接(Gitee Go)获取可用的构建时长,以用于流水线使用。

Gitee Go 的持续集成主要通过 Agent 方式实现,故会在系统中安装 JDK 1.6+ 环境。

持续部署的流程

在持续部署过程中,通过持续集成编译并打包的制品工程,结合用户定义具体的部署脚本,可以轻松将用户的代码部署到指定的机器上。

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

一、开通 Gitee Go

在仓库中找到「DevOps」菜单中的「Gitee Go」功能,点击「同意并开通」,完成服务开通。

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

二、制品库配置

在 Gitee Go 中,制品库主要是用于存放和管理 CI 过程产生的构建物,包括但不仅限于:二进制构建物、测试报告、其他数据报告等。 在制品库中,允许存在多个制品,单个制品支持历史版本下载和自定义标记版本号。

通过 Gitee Go 流水线页面找到「制品库管理」功能,创建一个制品库并设定制品库的唯一标识。此处以创建一个名为 “编译制品",唯一标识为 “compiled-artifact” 的制品库为例。如下图。

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

三、添加部署机器

在 Gitee Go 中,“计算资源管理” 功能主要用于管理用户的计算资源,如集群、云主机等。 目前对主机资源的管理主要通过在宿主机安装 Agent 程序实现对机器的管理。

添加主机组

企业管理员通过访问 管理->功能设置->计算资源管理 进行设置管理。以下以创建名为 “后端服务”,唯一标识为 “backend-server” 的主机组为例。

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客
添加主机

在创建完主机组后,通过主机组 主机管理 选项添加一个新主机。 此处已准备了一台装有 Golang 的 Ubuntu 主机为例。相关信息如下:

  • 主机信息:Ubuntu 20.04.1 64bit LTS
  • Golang版本:1.13.8 linux/amd64
基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

通过选择 添加新主机,在弹出的界面中获取到 Agent 的安装脚本,复制到目标机器上执行。安装完成后,将看到 Agent started success! 的字样,表示 Agnet 安装并启动完成。回到主机添加界面,勾选对在线的主机,选择添加即可完成主机的添加。

添加主机

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

执行脚本,安装并启动 Agent 程序

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

回到 Web 端,勾选已在线的主机,点击「添加主机」,完成主机添加。

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客
基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

在主机组中选择「关联仓库」,在弹出窗口搜索并关联要使用部署功能的仓库。

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

四、流水线配置

在完成 制品库主机组主机后,此处以构建一个 Golang 版本的 HTTP Web Server 程序为例,在仓库中创建流水线。具体流水线业务内容如下:

通过流水线构建服务端程序,并部署到目标机器部署,程序通过 8080 端口提供 web 服务,访问时输出 “Hello, Gitee Go” 的内容。在部署启动成功后通过 curl 检测服务启动情况。

注:为保证流水线构建顺利完整,案例中将程序源码通过 Shell 输出到 CI 环境中,默认情况下 CI 的 Shell 起点就是 仓库的根(即自动完成 git clone xxxx && cd xxxx 的操作)

# ========================================================
# Golang 构建参考流水线样例
# 功能:构建一个简单的 Go 程序并编译不同操作系统下的可执行环境
# ========================================================
name: gitee-go-golang-example              # 定义一个唯一 ID 标识为 gitee-go-golang-example,名称为 “Golang-流水线示例” 的流水线
displayName: 'Golang-流水线示例'               
triggers:                                  # 流水线触发器配置
  push:                                    # 设置 master 分支 在产生代码 push 时精确触发(PRECISE)构建
    - matchType: PRECISE
      branch: master
commitMessage: ''                          # 通过匹配当前提交的 CommitMessage 决定是否执行流水线
stages:                                    # 构建阶段配置
  - stage:                                 # 定义一个 ID 标识为 golang-build-stage,名为 “Golang Stage” 的阶段
      name: golang-build-stage
      displayName: 'Golang Stage'
      failFast: false                      # 允许快速失败,即当 Stage 中有任务失败时,直接结束整个 Stage
      steps:                               # 构建步骤配置
        - step: golangbuild@1              # 采用 Golang 编译环境
          name: golang-build               # 定义一个 ID 标识为 golang-build ,名为 “Golang Step” 的阶段
          displayName: 'Golang Step'
          inputs:                          # 构建输入参数设定
            golangVersion: 1.13            # 指定 Golang 环境版本为 1.13
            goals: |                       # 示例脚本:创建并编译构建一个命令行输出 “Hello, Gitee Go” 的程序
              echo 'package main'                                                | tee -a main.go
              echo 'import ('                                                    | tee -a main.go
              echo '    "net/http"'                                              | tee -a main.go
              echo '    "fmt"'                                                   | tee -a main.go
              echo '    "log"'                                                   | tee -a main.go
              echo ')'                                                           | tee -a main.go
              echo 'func myHandler(w http.ResponseWriter, r *http.Request) {'    | tee -a main.go
              echo '    fmt.Fprintf(w, "“Hello, Gitee Go!\n")'                   | tee -a main.go
              echo '}'                                                           | tee -a main.go
              echo 'func main(){'                                                | tee -a main.go
              echo '    http.HandleFunc("/", myHandler)'                         | tee -a main.go
              echo '    log.Fatal(http.ListenAndServe(":8080", nil))'            | tee -a main.go
              echo '}'                                                           | tee -a main.go
              mkdir output
              GOOS=linux GOARCH=amd64 go build -o output/server.amd64 main.go
            uploadArtifact: true                              # 开启上传构建物选项
            uploadArtifactOptions:                            # 构建物参数
              artifactPath: 'output'                           # 要打包的构建物所在目录
              artifactRepository: 'compiled-artifact'         # 制品库名称
              artifactName: 'server'
        - step: agent-deploy@1                                # 定义通过 SA 部署插件
          name: deploy                                        # Step 唯一标识
          dependsOn: golang-build
          displayName: '部署发布'                              # Step 显示名称
          inputs:                                             # Step 入参
            hostGroupID: 'backend-server'                     # 指定部署主机组ID
            minComplicating: 0                                # 允许的最小并发部署数量
            maxComplicating: 2                                # 允许的最大并发部署数量
            deployArtifact:                                   # 上传的制品项
              - name: 'php-index'                             # 上传部署的制品名(仅作为显示,无具体作用,允许重复)
                source: build@golang-build-stage/golang-build # 部署制品文件引用自上游流水线 Stage/Step 的制品
                artifactRepository: 'compiled-artifact'       # 当制品引用自流水线,此参数可忽略
                artifactName: 'server'                        # 当制品引用自流水线,此参数可忽略
                target: /data                                 # 目标机器制品上传目录
                isForce: true                                 # 当目标存在时是否强制覆盖,默认为 true,可选
            script: |                                         # 部署脚本,到目标机器制品上传目录解压并启动构建程序,并通过curl检测
              cd /data
              ls
              tar -zxf server.tar.gz
              cd output
              chmod +x ./server.amd64
              nohup ./server.amd64 & 
              echo "Deploy Success"
              curl 127.0.0.1:8080

五、触发构建部署效果

通过向仓库提交代码即可触发流水线构建,流水线的构建效果如下:

构建环节

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

部署环节

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客

通过浏览器访问对应目标机器服务效果,如果顺利的话可以看到主机的 8080 端口可以访问并得到一个「Hello there!」的内容

基于 Gitee Go 的 Golang 持续集成部署体验-Gitee 官方博客