当前位置: 首页 > wzjs >正文

重庆企业品牌网站建设网络推广渠道和方式

重庆企业品牌网站建设,网络推广渠道和方式,中山市建设局网站,网站建设时间、人力及成本估算概述 Golang是一门性能优异的静态类型语言,但因其奇快的编译速度,结合DevOps, 使得它也非常适合快速开发和迭代。 本文讲述如何使用Golang, 进行持续集成与自动化测试和部署。主要使用了以下相关技术: dep: 进行包的依赖管理gin…

概述

在这里插入图片描述

Golang是一门性能优异的静态类型语言,但因其奇快的编译速度,结合DevOps, 使得它也非常适合快速开发和迭代。

本文讲述如何使用Golang, 进行持续集成与自动化测试和部署。主要使用了以下相关技术:

  • dep: 进行包的依赖管理
  • gin: 搭建 api 服务
  • gorm:ORM, 数据CRUD
  • mysql: 存储数据
  • testfixtures: 测试夹具,在自动化测试时,自动向数据库填充用于测试的数据
  • httpexpect: HTTP 测试包,用于API测试
  • GoDotEnv: 环境变量处理
  • go test: 使用test命令进行单元测试, 基准测试和 HTTP 测试
  • GitLabCI: DevOps 工具
  • golint: Golang 静态检查工具
  • migrate: 数据库迁移工具
  • Docker: 使用 zacksleo/golang 镜像, 该镜像默认安装了 curl,git,build-base,dep 和 golint
  • db2struct: 将数据库表结构一键生成为 struct(gorm的model)
  • apig: 基于 gorm 和 gin 一键生成 CRUD API

开发流程

  • 使用 apig 脚手架工具初始化项目结构和目录
  • 使用 dep 安装相关依赖
  • 使用 migrate 编写数据库迁移方法,并执行迁移创建数据表
  • 使用 db2struct 生成 models
  • 使用 apig 生成 crud 代码
  • 使用 httpexpect 编写 api 测试代码,并通过 testfixtures 实现数据的自动填充
  • 编写 GitLabCI 脚本进行持续集成

在上述过程中,如需连接数据库时,可通过 GoDotEnv 来实现环境变量的使用

相关CI脚本

# golang-devops-and-auto-deploy
image: zacksleo/golang
stages:- test- build- deployvariables:GOPATH: /rootbefore_script:- mkdir -p ~/src/github.com/zacksleo/projectname- cp -r . ~/src/github.com/zacksleo/projectname- cd ~/src/github.com/zacksleo/projectname
lint:stage: testscript:- golint -set_exit_status
unit-tests:stage: testservices:- mysql:5.6variables:MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: webMYSQL_USER: webMYSQL_PASSWORD: webscript:- dep ensure- cp tests/.env .env- migrate -database "mysql://web:web@tcp(mysql:3306)/web" -path "./db/migrations/" up- go test -tags=unit_tests $(go list ./... | grep -v /vendor/ ./tests/api) -v -coverprofile .testCoverage.txtcoverage: '/^coverage:\s(\d+(?:\.\d+)?%)/'
integration-tests:stage: testservices:- mysql:5.6variables:MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: webMYSQL_USER: webMYSQL_PASSWORD: webscript:- dep ensure- cp tests/.env .env- migrate -database "mysql://web:web@tcp(mysql:3306)/web" -path "./db/migrations/" up- go test -tags=integration $(go list ./tests/... | grep -v /vendor/) -v
build-bin:stage: testscript:- dep ensure- env GOOS=linux GOARCH=386 go build -o $CI_PROJECT_DIR/debugartifacts:expire_in: 60 minsuntracked: truename: "app"paths:- debugwhen: on_success
build-image:image: dockerstage: builddependencies:- build-binscript:- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG .- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG- docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_TAGonly:- tagstags:- go
deploy:image: zacksleo/nodestage: deploybefore_script:- eval $(ssh-agent -s)- echo "$SSH_PRIVATE_KEY" > ~/deploy.key- chmod 0600 ~/deploy.key- ssh-add ~/deploy.key- mkdir -p ~/.ssh- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'script:- cd deploy/production- rsync -rtvhze ssh . root@$DEPLOY_SERVER:/data/gitlab/projectname --stats- ssh root@$DEPLOY_SERVER "docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY"- ssh root@$DEPLOY_SERVER "cd /data/gitlab/projectname && echo -e '\nTAG=$CI_COMMIT_TAG' >> .env && docker-compose pull app && docker-compose stop app && docker-compose rm -f app && docker-compose up -d app"only:- tags

集成测试

// +build integrationpackage apiimport ("log""os""testing""github.com/gin-gonic/gin""github.com/jinzhu/gorm""github.com/joho/godotenv""gitlab.com/moguyun/api/debug/db""gitlab.com/moguyun/api/debug/server"testfixtures "gopkg.in/testfixtures.v2"
)var (fixtures *testfixtures.Contexts        *gin.Engine
)// PrepareTestDatabase for test
func PrepareTestDatabase(db *gorm.DB) {var fixtures *testfixtures.Contextvar err errortestfixtures.SkipDatabaseNameCheck(true)fixtures, err = testfixtures.NewFolder(db.DB(), &testfixtures.MySQL{}, "../fixtures")if err != nil {log.Fatal(err)}if err = fixtures.Load(); err != nil {log.Fatal(err)}
}// TestMain setup database
func TestMain(m *testing.M) {// Open connection with the test database.godotenv.Load("../.env")database := db.Connect()s = server.Setup(database)PrepareTestDatabase(database)os.Exit(m.Run())
}func TestToken(t *testing.T) {t.Run("CreateToken", TestCreateToken)
}func TestCustomer(t *testing.T) {t.Run("GetCustomers", TestGetCustomers)t.Run("GetCustomer", TestGetCustomer)t.Run("CreateCustomer", TestCreateCustomer)t.Run("UpdateCustomer", TestUpdateCustomer)t.Run("DeleteCustomer", TestDeleteCustomer)
}

注意事项

在测试中,如果需要区分单元测试和集成测试,可以使用 build tags 实现,如在文件头部中添加 // +build integration, 运行测试使用 - go test -tags=integration $(go list ./tests/... | grep -v /vendor/) -v 可以只执行集成测试

参考文档

  • Go Test
  • How to write benchmarks in Go
  • Go 性能调优之 —— 基准测试
  • Go语言圣经(中文版)
  • 使用tags区隔单元测试和集成测试
http://www.dtcms.com/wzjs/413617.html

相关文章:

  • 云南做网站公司中国搜索引擎排名2021
  • 网站备案流程是什么品牌营销策略分析论文
  • 如何用api做网站网络推广公司是干嘛的
  • 小公司如何做网站搜索引擎优化的主要手段
  • 网上超市怎么做优化设计四年级上册数学答案
  • 企业类网站模板东莞seo代理
  • 汽修厂做网站有什么好处自己搭建一个网站
  • 沈阳网站制作软文推广代表平台
  • 文安做网站谷歌seo优化技巧
  • 聊城网站建设品牌营销公司
  • 图书馆门户网站建设有哪些公司sem优化软件哪家好
  • 网站开发进度源码网站搭建
  • 后湖做网站产品推广宣传方案
  • 网站开发公司广州百度指数工具
  • 济南营销型网站建设贵吗福州百度快速优化排名
  • 中国诚信建设网站建一个自己的网站
  • 佛山做企业网站网站seo技术
  • 禁止粘贴的网站重庆公司seo
  • 没有网页快照对网站有什么影响站长工具seo综合查询全面解析
  • wordpress多重筛选并排序郑州整站网站优化
  • 个人做网站设计优化关键词排名工具
  • 单位网站怎么制作百度一下你就知道官页
  • 宁波建设银行网站首页网站推广seo方法
  • 电商网站开发工作室游戏推广赚佣金平台
  • wordpress切换语言 语言包seo关键词快速排名软件
  • 触摸屏网站如何做网站查询信息
  • 独立站快速建站微信营销的特点
  • 四平市住房和城乡建设局网站深圳网络营销渠道
  • 企业官网cmsseo范畴有哪些
  • 环影视界免费版wordpress主题seo网址超级外链工具