3

Azure DevOps (十三) 通过Azure Devops部署一个Go的Web应用 - Tassdar

 2 years ago
source link: https://www.cnblogs.com/Tassdar/p/16262326.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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的依赖。

1417396-20220512134722326-986276375.png

引入依赖之后,我们在main方法中创建一个用来接受http请求的action,并且绑定一个路由。

    r := gin.Default()
    r.GET("/hello", func(context *gin.Context) {
        context.JSON(200, gin.H{
            "message": "hello world",
        })
    })

然后我们启动一下项目看一下socket的监听是否正确。

1417396-20220512135735972-331020204.png

 可以看到我们刚才绑定的路由已经在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编译

1417396-20220512140946041-1509145489.png

然后编译过程选择go build,执行目录和go mod保持一致就可以,在我们的项目根目录下。

1417396-20220512141131187-1815444676.png

然后我们把编译好的可执行文件上传到制品仓库:

最后的全量脚本代码如下:

# 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的远程命令执行

1417396-20220512142035650-1588710008.png

 这里我们有一点需要注意的是,go的可执行文件需要授予可执行权限,不然无法直接启动。

1417396-20220512142053248-485190737.png

 创建好之后,我们运行一下我们的流水线,并且访问我们的端口,成功得到响应结果。

 到这里用azure部署go的 web应用就成功了,可能在过程上感觉相比之前简单了许多,那是因为经过前面十几篇文章的积累,很多细枝末节的东西我们都已经踩过来了。

到这篇文章为止,部署的操作我们也算研究的差不多了,接下来我们开始研究通过azure的流水线去玩一下更花的操作。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK