前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【玩转 Cloud Studio】再小的个体也可以有自己的生产级流水线

【玩转 Cloud Studio】再小的个体也可以有自己的生产级流水线

原创
作者头像
云上小鸡
发布于 2023-05-16 12:44:11
发布于 2023-05-16 12:44:11
75210
代码可运行
举报
运行总次数:0
代码可运行

前言

多年前张小龙在阐述微信对于开放平台的一些理念和方向,提到:再小的个体也有自己的品牌;这个理念使得微信公众号在很长一段时间内保持了创作繁荣、内容繁荣、阅读繁荣;如今我在深度体验了Cloud Studio之后,不禁也发出这样的感慨:再小的个体也可以有自己的生产级流水线。使用Cloud Studio深度结合Coding,就算我们没有大厂的财力、物力、人力依然可以搭建出只有大厂才有的工作流体验的流水线,极大的提高了CI和CD的效率,同时也极大的提高了开发者的幸福度,将宝贵的精力放在创造和业务逻辑的开发上。下文假设我是一家小微企业或者开发个体户的技术选型的全过程。

一、场景模拟

  • 人设:我曾经是一名大厂的开发工程师;现在在创业阶段。
  • 境况:如今我不再单纯的负责码代码;不仅要负责写代码,还要负责基础设施维护,还要负责到处跑见客户。(总之:很苦逼)
  • 特点:我的时间比较碎片化,同时我的精力有限,我想偷懒也想提效。
  • 希望:我可以有大厂一样的基础设施,我希望我的大部分时间花在可以直接创造价值的事情上。

二、方案选型

按照以往经验,我们可能首选的方案是:买一台CVM机器,配置一下基础环境;然后再在本地装一个vscode或者其他的编码IDE;便开始愉快的编码了;接着编码完成以后rz到CVM,然后编译,然后部署,最后验证。这种方案看起来是最高效的,也是最直接的。但是我也不禁反思,这种方案是否符合我的要求。

首先,因为我在创业我的时间比较宝贵,我不想把时间花在重复的事情上;

其次,我没有固定的办公地点,甚至没有固定的办公电脑,我要随时随地修改代码以快速的响应客户的要求;

最后,我比较注重安全,我希望我的代码保存的平台是一个让人放心的。

最重要的是:我现在还在创业初期,我希望花最少的钱,满足我上面所有的要求;一句话总结:又穷但是要求又高。

基于我的要求,我又重新回顾了一下这个方案,我是否可以接受?答案是否定的。我的编写代码的热情会被重复的:rz、编译、部署,一点点磨灭掉,最后导致:客户的需求我不想写,停止思考陷入内耗。因为写完代码以后后面还有一堆的事情等着我干,想想都累更何况要做呢。我碎片化的时间也不可能被利用起来,因为一旦做某个东西,我都需要一块完整的时间走完所有的流程。我也不能随时随地的写上两行代码,因为我如果要写代码必须在我自己已经配置好基础环境的机器上。

所以,如果我选用这种方案的话,可能会有“出师未捷身先死”的遗憾。于是我想我在大厂的工作流是否能搬出来为我所用,于是Cloud Studio+Coding的开发模式,出现在我的眼前。不得不说云的出现,确实将“赋能”这个词诠释到了极致,而且毫无保留甚至更好的体验。

以下就是我尝试介绍使用Cloud Studio+Coding的开发模式,用最小的成本,搭建后台Go应用的工作流的详细过程。

三、如何搭建私有化仓库

我们都很清楚,单打独斗很难成大事,必须协作才能成就大事;所以我们第一步需要考虑的不是选择IDE编辑器,而是先把协同这件大事搞定,那么摆在我们面前的选择有很多,例如:Github、码云、Gitee等等,但是因为我们希望有大厂一样的体验,所以我们选择了大厂出品的Coding。相信这款产品可以持续维护。

3.1、开通Coding DevOps服务

这一步比较简单,打开腾讯云Coding产品介绍页;然后点击立即使用按钮(这是免费的哦,符合我们“穷”人设的要求),如下图所示:

3.2、创建代码仓库

这一步也比较简单,只需要按照页面指引创建代码仓库即可。

至此,如果我们没有开源需求的话,私有仓库已经开通完成。接下来,就是我们的如何结合Cloud Studio开始我们的编码过程了。

四、如何结合Cloud Studio

第三部分,解决了我对协作以及代码安全的需求;接下来我需要解决随时随地写代码不受物理环境限制的需求。

4.1、将Git仓库与我们的Cloud Stuio打通

这一步也比较简单,只需要简单的配置一下即可完成;

第一步:在Coding中选中Cloud Stuio导航并打开,如下图所示:

第二步:选择新建工作空间并与Coding的Git仓库打通

按照上述指引新建完Cloud Stuio的工作空间之后,Cloud Studio会在我们的Git仓库上创建SSH密钥,我们所有的操作都是基于此做的,无需我们额外在做什么。不得不说,真的很方便。

4.2、 如何与Git进行交互

接下来还会有更关键的一步,我们写好的代码如何提交到Git仓库呢,这里的体验与我们在本地开发是一致的,如下图所示。

直接在终端的命令行输入一下命令就可以实现代码提交了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git add README.md
git commit -m "first commit"
git push -u origin master

拉取代码也是一样的操作。

五、如何使用Coding搭建流水线

至此,我们已经解决了代码安全与协作,以及充分利用碎片时间随时随地编写代码的需求。接下来可能就是我们的重头戏了,如何把我从繁琐重复的工作中解放出来。

5.1、什么是流水线

我们日常说的流水线是指的持续集成的过程;因为其执行过程就像工厂里的流水线一样,因此而得名,只不过这个流水线上的工人是我们实现制定好的脚本。这条流水线没有剥削、也没有旷工,只有兢兢业业的按照既定脚本完成任务。

5.2、一步一步搭建流水线

第一步:创建构建计划,如下图所示:

第二步:基础信息,选择好我们在Coding上的代码仓库,并使用静态配置的Jenkinsfile,如下图所示:

第三步:流程配置,这里我选择了图形化编辑器,这样即简单又直观。

1-1、我的流水线上第一步就是从代码仓库里面检出代码,这里比较简单

1-2、将代码检出以后,就要编译,这里有几个知识点:

1.构建环境的选择,因为我的后台代码是Go写的,所以我在选择构建环境的时候,选择的是golang 1.18的环境。如下图所示

2.做Go开发的同学都知道我们的依赖管理是靠go mod的,go mod对于私有仓库的拉取是有一定门槛的,所以我们需要简单几行代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git config --global url."https://${GO_GET_USER}:${GO_GET_PASSWORD}@e.coding.net/meshisland/go_module/".insteadOf "https://e.coding.net/meshisland/go_module/"
go env -w GOPRIVATE=e.coding.net

3.我们看到这里面有几个变量${GO_GET_USER}和${GO_GET_PASSWORD},这个就是我们的环境变量,可以在流水线的“变量与缓存”中设置。这个环境变量在一定程度上保证了我们配置的安全。

其中${GO_GET_USER}是我们私有仓库的用户名,${GO_GET_PASSWORD}是我们私有仓库的密码。

1-3、将编译好的文件推送到CVM,这个是我们下一个章节重点介绍的。

六、在没有TKE集群的情况下如何将编译包投放到轻量服务器

至此,我基本上解决了所有的诉求,但是最关键的一个问题我还没有解决,创业初期我很穷,对于所有的花费都要额外关注,目前我只有一台轻量服务器,我没有多余的机器可以搭建TKE集群。但是我又想在流水线上实现,自动把我的代码部署到这个机器上。应该怎么办?

6.1、使用SCP将代码推送到CVM上

这个应该是所有程序员想到的最简单直接的方式,废话不多说,直接贴上我的shell脚本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apt-get -y install sshpass
touch cmd_stuff
echo `date \'+%s\'` > cmd_stuff
sshpass -p "${CVM_PASSWORD}" scp  cmd_stuff ${CVM_USER}@${CVM_IP}:${CVM_REALEASE_DIR}
sleep 5
sshpass -p "${CVM_PASSWORD}" scp -r stuff/conf/ ${CVM_USER}@${CVM_IP}:${CVM_REALEASE_DIR}
sshpass -p "${CVM_PASSWORD}" scp stuff/main/back_end_stuff ${CVM_USER}@${CVM_IP}:${CVM_REALEASE_DIR}

其中${CVM_PASSWORD} 是我们CVM机器的密码,安全起见这里务必配置到流水线的环境变量上;{CVM_USER}是指的CVM的机器的用户名,${CVM_IP}指的是我们CVM的IP,{CVM_REALEASE_DIR}是指的我们的工程部署在机器上的目录。以上环境变量都是在流水线的“变量与缓存”模块配置的。

6.2、通过CVM的脚本实现自动更新服务

经过6.1的工作,我们已经将编译好的文件推送到我们的机器上了,接下来我不想每次发布都登录到机器上重启我的进程。这样也挺烦的,我就像一键按下去,就等着看效果就好了。于是我想了一个办法,也就是6.1中的一个创建的一个文件,并把当前时间写到这个文件,并推送到CVM。即:这个命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
touch cmd_stuff
echo `date \'+%s\'` > cmd_stuff

同时我机器上也有另外一个常驻进程,在持续检测cmd_stuff这个文件是否有更新,如果有更新的话,则杀死指定的进程,并重启一个进程,以实现服务的自动重启。

常驻进程的shell脚本如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function whether_changed(){
    local file_path=${1}
    local check_time=${2}
    while [[ true ]]; do
        file_old_stat="`stat ${file_path}|grep Change`"
        sleep ${check_time}
        file_new_stat="`stat ${file_path}|grep Change`"
        if [[ `echo ${file_old_stat}` == `echo ${file_new_stat}` ]]; then
           continue
        else
            echo "#### Start Restart Server ####"
            pkill -9 back_end_stuff
            sleep 10
            nohup ./back_end_stuff -d > output 2>&1 &
        fi
    done
}
whether_changed $1 $2

七、总结与附件

最终,我只买了一个轻量级服务器,成本每个月50块钱,便实现了有大厂才有的工作流程,并且满足了我对创业幸福感所有的要求。Cloud Studio+Coding的工作流,真的把大厂的工作流赋能给了一个小个体,再小的个体也可以有自己的生产级流水线。最后附上我流水线完整的Jenkinsfile文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([
          $class: 'GitSCM',
          branches: [[name: GIT_BUILD_REF]],
          userRemoteConfigs: [[
            url: GIT_REPO_URL,
            credentialsId: CREDENTIALS_ID
          ]]])
        }
      }

      stage('自定义构建过程') {
        agent {
          docker {
            reuseNode 'true'
            registryUrl 'https://coding-public-docker.pkg.coding.net'
            image 'public/docker/golang:1.18-2022'
            args ''
          }

        }
        steps {
          sh '''git config --global url."https://${GO_GET_USER}:${GO_GET_PASSWORD}@e.coding.net/meshisland/go_module/".insteadOf "https://e.coding.net/meshisland/go_module/"
go env -w GOPRIVATE=e.coding.net
go mod tidy
cd stuff/main
go build -o back_end_stuff main.go
cd ../../
'''
        }
      }

      stage('推送CVM') {
        steps {
          sh '''apt-get -y install sshpass
touch cmd_stuff
echo `date \'+%s\'` > cmd_stuff
sshpass -p "${CVM_PASSWORD}" scp  cmd_stuff ${CVM_USER}@${CVM_IP}:${CVM_REALEASE_DIR}
sleep 5
sshpass -p "${CVM_PASSWORD}" scp -r stuff/conf/ ${CVM_USER}@${CVM_IP}:${CVM_REALEASE_DIR}
sshpass -p "${CVM_PASSWORD}" scp stuff/main/back_end_stuff ${CVM_USER}@${CVM_IP}:${CVM_REALEASE_DIR}

'''
        }
      }

    }
  }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
您好,您参加的【玩转Cloud Studio】第二季获奖名单出来啦:https://cloud.tencent.com/developer/article/2269353,文末可查看名单~恭喜您获奖哦,请您联系腾讯云开发者社区助理(微信号:yun_assistant)填写收货信息,完成兑奖。
您好,您参加的【玩转Cloud Studio】第二季获奖名单出来啦:https://cloud.tencent.com/developer/article/2269353,文末可查看名单~恭喜您获奖哦,请您联系腾讯云开发者社区助理(微信号:yun_assistant)填写收货信息,完成兑奖。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
使用 Jenkins Pipeline 流水线部署 Kubernetes 应用
要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式。Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
我是阳明
2021/06/25
5.3K0
使用 Jenkins Pipeline 流水线部署 Kubernetes 应用
史诗级整理 Jenkins 流水线详解
jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。
我的小碗汤
2023/03/19
8K0
史诗级整理 Jenkins 流水线详解
使用 Jenkins 构建 CI/CD 之多分支流水线指北
由于公司的 Jenkins 配置没有部署成功的通知,在我学了几天的 Jenkins 后终于是对公司的 Jenkins 配置下手了,结果我刚装完 dingtalk 插件自动重启后,发现之前主管配置的构建项目数据都丢失了,正好给了我练手的机会,于是就有了以下从0到1的辛酸历程。
DevOps时代
2021/04/20
2.3K0
使用 Jenkins 构建 CI/CD 之多分支流水线指北
基于GitLabCI的Python交付流水线实现
首先,我们需要在github中找一个Python项目,如果具有编码能力也可以写一个简单web app。以下项目是一个Flask项目,简单的web应用。这个项目之前使用的是Jenkins完成的持续交付,现在改造成GitlabCI完成。
DevOps云学堂
2020/06/15
1.2K0
结合k8s和pipeline的流水线,并通过k8s接口完成镜像升级
现在这家单位的CICD比较的混乱,然后突发奇想,想改造下,于是就用pipeline做了一个简单的流水线,下面是关于它的一些介绍
dogfei
2021/01/27
7670
创建 Tekton 流水线
前面我们创建的两个任务 test 和 build-and-push 都已经完成了,我们还可以创建一个流水线来将这两个任务组织起来,形成一个流水线,这里就是我们要使用的 Pipeline 这个 CRD 对象。
我是阳明
2021/06/25
7120
创建 Tekton 流水线
3种创建Jenkins流水线的方法 - Classic UI, BlueOcean, Git
Jenkins是一个DevOps工具,可以用来自动构建、测试和交付软件代码。如果你是Jenkins的新手,本教程将帮助你理解如何使用以下方法之一创建Jenkins流水线(Pipeline):
用户1516716
2021/04/13
4.1K0
3种创建Jenkins流水线的方法 - Classic UI, BlueOcean, Git
GitLab平台太单调? 配置Pipeline流水线,装上这个流水线“瀑布灯”!
在上一篇文章中,我们介绍了如何使用Docker搭建自己的GitLab代码托管平台。
Mintimate
2023/10/01
3.2K0
GitLab平台太单调? 配置Pipeline流水线,装上这个流水线“瀑布灯”!
CI/CD流水线实战
不知道为什么,现在什么技术都想学,因为我觉得我遇到了技术的壁垒,大的项目接触不到,做的项目一个字辣*。所以,整个人心浮气躁,我已经得通过每天的骑行和长跑缓解这种浮躁了。一个周末,我再次宅在了家里,学习了一下CICD。
shigen
2023/08/15
4610
CI/CD流水线实战
如何搭建 Vue.js 开源项目的 CI/CD 流水线
本文旨在探讨如何为开源的 Vue.js 项目构建 CI/CD 流水线,以实现自动化的构建、测试和发布流程。通过使用 GitHub Actions 和 Jenkins 等工具,可以显著提高开发效率,减少手动操作带来的错误。文章将详细介绍流水线的设计和实现,并提供可运行的示例代码模块。
Swift社区
2025/01/11
2310
如何搭建 Vue.js 开源项目的 CI/CD 流水线
使用 Tekton 创建 CI/CD 流水线(2/2)
在前面文章中,我们在 Kubernetes 集群中安装了 Tekton,通过 Tekton 克隆 GitHub 代码仓库并执行了应用测试命令。接着前面的内容,本文我们将创建一个新的 Task 来构建一个 Docker 镜像并将其推送到 Docker Hub,最后,我们将这些任务组合成一个流水线。
我是阳明
2020/06/15
9740
云实验室(22) - kubesphere的springboot流水线
docker仓库 : dockerhub / 私有镜像仓库 前端代码仓库 : git / gitlab / gitee ...
惊羽-布壳儿
2022/06/15
9230
云实验室(22) - kubesphere的springboot流水线
KitOps将DevOps流水线转变为MLOps流水线
机器学习 和 DevOps 实践的结合催生了 MLOps,这是一个专门领域,专注于在生产环境中自动化 ML 模型的开发、部署和管理。然而,实现流线型 MLOps 工作流的主要障碍在于 DevOps 和机器学习流水线之间的传统分离。
云云众生s
2024/06/24
1650
KitOps将DevOps流水线转变为MLOps流水线
使用 Argo CD 进行 GitOps 流水线改造
Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署工具。Argo CD 可在 Git 存储库更改时自动同步和部署应用程序。
我是阳明
2023/09/25
1.9K0
使用 Argo CD 进行 GitOps 流水线改造
jenkins使用流水线部署go程序
章工运维
2023/07/09
4280
jenkins使用流水线部署go程序
使用 KinD 加速 CI/CD 流水线
现在安装 Kubernetes 集群已经变得越来越简单了,出现了很多方案,各种方案都有自己适合的使用场景。虽然我们也可以很快速在云环境下面启动一个 Kubernetes 集群,但是对于开发人员通常更喜欢能够快速上手的东西,Kubernetes in Docker(KinD)这个工具就可以通过创建容器来作为 Kubernetes 的节点,只需要在机器上安装 Docker 就可以使用,它允许我们在很短的时间内就启动一个多节点的集群,而不依赖任何其他工具或云服务商,这就使得它不仅对本地开发非常有用,而且对 CI/CD 也很有帮助。
我是阳明
2020/10/26
7800
使用 KinD 加速 CI/CD 流水线
使用 Kubernetes 和 Jenkins 创建一个 CI/CD 流水线
CI/CD 同 DevOps、Agile、Scrum、Kanban、自动化以及其他术语一样,是一个一起被经常提及的专用术语。有时候,它被当做工作流的一部分,但是并没有搞清楚这是什么或者为什么它会被采用。对于年轻的 DevOps 工程师来说,使用 CI/CD 理所当然已经成为了常态,可能他们并没有看到“传统”的软件发布流程而因此不欣赏 CI/CD。
DevOps持续交付
2020/03/17
1.8K3
使用 Kubernetes 和 Jenkins 创建一个 CI/CD 流水线
如何使用 Jenkins 的脚本化流水线(Pipeline)
在这篇简单的教程中,你将会学习到 Jenkins 的流水线即代码,以及如何开发流水线脚本的指导。 Jenkins 是一个开源持续集成服务器,它可以提供持续执行自动化构建和测试的能力。Jenkins 可以控制和监控多种任务,包括:拉取代码、静态代码分析、构建工程、执行单元测试、自动化或者性能测试,最后部署应用。这些任务通常是一个持续部署流水线。 流水线(Pipeline)是 Jenkins 的一套插件。流水线可以认为是执行任务的一系列阶段,它可以持续地发布你的应用。“持续”的概念是相对于你的应用环境来说的
DevOps时代
2018/04/17
8.9K0
如何使用 Jenkins 的脚本化流水线(Pipeline)
献给流水线开发者的一份FAQ文档
来说说今天很多同学在做流水线的时候遇到的一些问题,我把问题整理下来分享给更多的人。能少踩坑就少踩一点点。
DevOps云学堂
2020/04/22
6310
献给流水线开发者的一份FAQ文档
八、pipeline流水线构建项目
JENKINS 2.0的精髓是PIPELINE AS CODE,是帮助JENKINS实现CI到CD转变的重要角色。什么是PIPELINE,简单来说,就是一套运行于JENKINS上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。 PIPELINE的实现方式是一套GROOVY DSL,任何发布流程都可以表述为一段GROOVY脚本,并且 JENKINS支持从代码库直接读取脚本,从而实现了PIPELINE AS CODE的理念。
jackxiao
2021/11/16
6750
推荐阅读
相关推荐
使用 Jenkins Pipeline 流水线部署 Kubernetes 应用
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档