Azure DevOps (十三) 通过Azure Devops部署一个Go的Web应用
前几篇文章中,我们分别实现通过azure来部署.NET和Springboot的应用,今天我们来研究一下如何部署一套Go的Web应用上去。
文章配套视频专栏:
https://space.bilibili.com/38649342/channel/seriesdetail?sid=2267536
视频正在努力更新。
首先我们要先创建一个go的web项目,我这里使用的是go这边比较知名的一个web框架:gin
首先我们使用goland创建一个go的基础项目,然后在项目目录下执行命令:
$ go get -u github.com/gin-gonic/gin
引入gin的依赖。
引入依赖之后,我们在main方法中创建一个用来接受http请求的action,并且绑定一个路由。
r := gin.Default() r.GET("/hello", func(context *gin.Context) { context.JSON(200, gin.H{ "message": "hello world", }) })
然后我们启动一下项目看一下socket的监听是否正确。
可以看到我们刚才绑定的路由已经在8080端口开始监听了,访问一下路由地址只要能正常返回一个简单的go的应用就创建成功了。
然后按照老规矩,我们还是首先得先把我们的代码上传到azure的仓库里去。
同步代码到仓库的过程,我们就不再赘述了,之前的时候已经写过很多次,这里我贴一下地址,需要的同学自行参考
Azure DevOps (一) 托管自己的Git仓库
Azure DevOps (十一) 通过Azure Devops部署一个.NET Core WebAPI
把代码同步到azure的代码仓库之后,接下来我们开始创建我们的编译流水线
老规矩,如果你的默认分支不是azure自带的main,那你需要在分支中创建一个空的yml文件,用于存放azure的流水线脚本。
当然,你也可以通过azure自动生成。
创建好之后,我们开始在里面添加我们想要的步骤,首先我们要通过 go build 命令进行go的编译,然后通过制品上传把编译好的可执行文件上传到仓库去
go的编译结果是直接可以运行的可执行文件,不需要再装sdk之类的东西,所以我们在编译的时候要选择编译环境是linux和一会要部署的环境保持一致。
在任务栏中搜索go,然后选怎go编译
然后编译过程选择go build,执行目录和go mod保持一致就可以,在我们的项目根目录下。
然后我们把编译好的可执行文件上传到制品仓库:
最后的全量脚本代码如下:
# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml trigger: - main pool: vmImage: ubuntu-latest steps: - script: echo Hello, world! displayName: 'Run a one-line script' - script: | echo Add other tasks to build, test, and deploy your project. echo See https://aka.ms/yaml displayName: 'Run a multi-line script' - task: Go@0 inputs: command: 'build' - script: pwd; ls; mkdir target; cp go_azure_app target; - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '/home/vsts/work/1/s/target' ArtifactName: 'drop' publishLocation: 'Container'
接下来我们需要创建部署流水线,go的部署流水线非常简单,我们只需要把编译好的制品直接传到服务器上就行了,也不需要装运行环境,
然后我们写一个简答的守护进程用来维护一下服务的状态即可。
创建一下部署流水线,挂载好我们编译流水线的结果,然后添加一个SFTP的上传任务和一个SSH的远程命令执行
这里我们有一点需要注意的是,go的可执行文件需要授予可执行权限,不然无法直接启动。
创建好之后,我们运行一下我们的流水线,并且访问我们的端口,成功得到响应结果。
到这里用azure部署go的 web应用就成功了,可能在过程上感觉相比之前简单了许多,那是因为经过前面十几篇文章的积累,很多细枝末节的东西我们都已经踩过来了。
到这篇文章为止,部署的操作我们也算研究的差不多了,接下来我们开始研究通过azure的流水线去玩一下更花的操作。
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十三)——istio+dapr构建多运行时服务网格之生产环境部署
- 同一个tomcat下部署多个项目,并通过不同端口号访问不同的项目
- 【Azure Redis 缓存】遇见Azure Redis不能创建成功的问题:至少一个资源部署操作失败,因为 Microsoft.Cache 资源提供程序未注册。
- 一个tomcat部署多个项目并通过不同的端口访问
- 在Eclipse中配置Web服务器,并开发部署一个简单的web应用
- 怎样用Docker实现DevOps?谈通过容器进行持续部署
- 通过ASP.NET Web API + JQuery创建一个简单的Web应用
- Jetty的配置、部署与API使用——(2)通过Jetty的Java API运行一个Jetty服务器
- docker - 从安装到部署一个web应用(go、java)
- WPF项目通过ClickOnce部署,访问资源时路径莫名的多了一个Data目录
- 一个tomcat上部署多个项目,并通过不同端口号访问不同的项目
- 一个Ip2long函数,通过调用go tool pprof分析,竟发现内存分配了3G
- 通过ASP.NET Web API + JQuery创建一个简单的Web应用
- Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
- 通过IIS6.0部署一个Silverlight网站
- 外部网络通过端口映射访问部署在虚拟机里的docker中的web应用
- docker - 从安装到部署一个web应用(go、java)
- 一个tomcat部署多个项目并通过不同的端口访问
- docker - 从安装到部署一个web应用(go、java)
- 大数据:通过Mesos、Docker和Go,使用300行代码创建一个分布式系统