当前位置: 首页 > Linux

分享从Go案例开发到持续集成的全过程

时间:2023-04-06 04:55:49 Linux

分享一个用Go写的非常简单的Demo案例,为什么要分享呢?涉及到几个小知识点。如何使用Go在Gomod中导入包。通过Go简单演示分层构建演示如何编写脚本化的Jenkinfile进行自动化构建。1.Gomod的使用方法我们准备一个apis模块,在这个模块中实现一个打印字符串的函数Says(strstring):somkdirapiscat<./apis.gopackageapisimport"fmt"funcSays(strstring){fmt.Printf("hello,%s",name)}然后我们初始化gomodgoenv-wGO111MODULE="auto"gomodinitcode.kubemaster.top/DevOpsTeam/apis#此时查看mod文件的内容:catgo.modmodulecode.kubemaster.top/DevOpsTeam/apisgo1.14然后在工作区生成一个go.mod文件,然后我们就可以初始化提交到代码仓库了。代码仓库地址为https://code.kubemaster.top/DevOpsTeam/apis.git。2.如何导入包连接现在是时候写一个demo了。demo依赖apis模块实现功能。demo的文件名为main.go:packagemainimport"code.kubemaster.top/DevOpsTeam/apis"funcmain(){apis.Says("CloudNativeEcosystem\n")}这里有一点需要注意:当程序调用的模块与模块的文件名不一致时,需要通过别名导入,否则可以直接导入:#其实模块名是apis,但是这里的文件名是api,所以需要通过别名来解决importm_api"code.kubemaster.top/DevOpsTeam/api"。当需要运行构建main.go时:goget-insecurecode.kubemaster.top/DevOpsTeam/apisgorunmain.go到这里基本清楚了gomod的基本使用,然后我们将代码提交到代码仓库:https://code.kubemaster.top/DevOpsTeam/goci.git3。如何构建Go程序使用Docker构建镜像。首先,准备一个Dockerfile。仔细想想,用Go编写的程序会直接编译成指定编译架构的二进制文件,所以我们可以先在Go环境中通过分层构建的方式构建,然后将构建好的二进制文件复制到tiny镜像中,以减少图像的大小,如下Dockerfile示例:FROMgolang:1.14asbuilderWORKDIR/go/src/code.kubemaster.top/DevOpsTeam/demos/ARGARCH="amd64"ARGOS="linux"COPYmain.go。运行goget-insecurecode.kubemaster.top/DevOpsTeam/apis&&\CGO_ENABLED=0GOOS=linuxgobuild-a-installsuffixcgo-omain.FROMalpine:latestWORKDIR/root/COPY--from=builder/go/src/code.kubemaster.top/DevOpsTeam/demos/.CMD["./main"]镜像编译后,镜像体积为7.69M。Dockerfile准备好后,我们将Dockerfile提交到goci代码仓库。接下来我们可以配置Jenkinsfile,这样我们就可以继续构建了4.通过Jenkinsfile实现持续构建这里简单的通过脚本化的管道实现服务的持续构建,很简单,但是也是一个完整的基础框架:pipeline{agentanyenvironment{registry="registry-vpc.cn-beijing.aliyuncs.com/kubemaster/gocodecitestdemo"registryCredential='854bfe2f-7923-48a5-9156-7be54cc38a88'}stages{stage('CloningGit'){steps{git'https://code.kubemaster.top/DevOpsTeam/goci.git'}}stage('Buildingimage'){steps{script{dockerImage=docker.buildregistry+":$BUILD_NUMBER"}}}stage('测试镜像'){steps{sh"dockerrun--rm$registry:$BUILD_NUMBER"}}stage('部署镜像'){steps{script{docker.withRegistry('https://registry-vpc.cn-beijing.aliyuncs.com',registryCredential){dockerImage.push()}}}}stage('删除未使用的docker镜像'){steps{sh"dockerrmi$registry:$BUILD_NUMBER"}}}}准备好Jenkinsfile后提交到goci代码仓库,然后我们就可以在jenkins上进行配置了:首先准备Jenkins作业配置的xml配置文件goci.xml:<选项/>false<存储库名称>2https://code.kubemaster.top/DevOpsTeam/goci.git73a21ee2-2cdb-4658-8f99-309a3b77f2d4<名称>*/masterfalseJenkinsfiletruefalse然后,我们可以创建一个构建作业并执行触发构建:#Getjenkins-crumbcrumb=$(curl-u"admin:admin"-s'http://jenkins.kubemaster.top/crumbIssuer/api/xml?xpath=concat(//crumbRequestFi字段,“:”,//crumb)')#createjobcurl-XPOST"http://admin:admin@jenkins.kubemaster.top/createItem?name=goci"--data-binary"@goci.xml"-H"Content-Type:text/xml"-H${jenkins_crumb}#执行jobcurl-XPOST-uadmin:admin-H${jenkins_crumb}http://jenkins.kubemaster.top/job/goci/build在至此,就基本结束了。基本上在实践中完成了Demo的编写、容器化构建、相关环节的持续构建。看一下构建结果:构建视图:构建完成日志:本文由博客OpenWrite赞助,群发、多发等操作工具平台发布