jenkins配置golang 代码工程自动发布的实现方法

 更新时间:2022年07月26日 14:32:45   作者:stefan1240  
这篇文章主要介绍了jenkins配置golang 代码工程自动发布,jks是个很好的工具,使用方法也很多,我只用了它简单的功能,对jenkins配置golang相关知识感兴趣的朋友一起看看吧

前沿

以前go工程都是在我mac上打包成镜像然后再推到我的docker hub上去,每次更新都要经过打包->推送到dockert仓库->目前服务重新拉取容器;最近项目代码量很大,频繁更新,终于忍不住了,决定把jks得用起来,这样可以解放下双手。注:我们jks直接安装在内网硬件服务器上(centos7.9)。

一、在jenkins宿主机上配置go环境;

1、安装go;

#1.下载golang
wget https://golang.google.cn/dl/go1.16.3.linux-amd64.tar.gz
#2.安装
tar -xf go1.16.3.linux-amd64.tar.gz -C /usr/local/

2、配置环境变量

1、vi /etc/profile

GO111MODULE=on
GO_PATH=/data/go
GOPROXY=https://mirrors.aliyun.com/goproxy/
GO_HOME=/usr/local/go
GO_ROOT=/usr/local/go

让配置文件立即生效:soruce /etc/profile

打印环境变量:printenv |grep GO
GO_PATH=/data/go
GOPROXY=https://mirrors.aliyun.com/goproxy/
GO_HOME=/usr/local/go
GO_ROOT=/usr/local/go

3、验证环境是否可用

自己建个go工程,写个hello world 看是否能够go run main.go

二、jenkis上配置项目

配置步骤:

1、jks上新建项目

新建Item-> Freestyle project

2、“源码管理”菜单添加git信息

3、“构建”-》增加构建步骤-》Execute shell

执行我的shell脚本;脚本的内容有:

(1)编译go代码;

我的环境变量都没有在jks上配置,因此我需要用/usr/local/go/bin/go来执行命令(GO_ROOT 是 /usr/local/go)。

此外,我build go代码的时候,在前面加了“CGO_ENABLED=0”。这个是用来解决容器找不到我的可执行程序的问题(会报错:“/bin/sh: xxxnot found”)

(2)打包成镜像并且推送到仓库;

(3)通过ansible在开发服务器上执行删除容器启动新容器脚本;

ansible 不会用的自己百度查下,这个是用来执行远程服务器的命令,运维同学肯定很熟悉。

我需要远程服务器,删除当前容器,并且重新拉去镜像并运行。

git checkout $GIT_TAG
echo "-------------build go project-------------------------"
export GOPROXY=https://mirrors.aliyun.com/goproxy/
/usr/local/go/bin/go mod tidy
CGO_ENABLED=0 /usr/local/go/bin/go build -o gw_micro_service main.go
#push docker image to docker hub
echo "-------------push docker image to docker hub-------------------------"
docker build -t gw_micro_service .
docker tag gw_micro_service harbor.zaitugongda.com:5000/stefan/gw_micro_service:latest
docker push harbor.zaitugongda.com:5000/stefan/gw_micro_service:latest
if [ $? -eq 0 ]
then
    echo "push ok"
else
    echo "push faild"
fi
echo "-------------remote servcie restart docker-------------------------"
ip='47.106.89.198'
ansible $ip -m shell -a "bash /data/gw_micro_service/rebuildDocker.sh"

4、如何使用jks的功能

jks非常灵活,我这里使用的jks并没有安装什么插件(docker 和go插件),只是用到jks的两个功能:

1)、从git上拉代码;

2)、执行我的shell脚本;脚本的内容有:

(1)编译go代码;

(2)打包成镜像并且推送到仓库;

(3)通过ansible在开发服务器上执行删除容器启动新容器脚本;

其它:

如果你只想生成可执行程序并且在远端允许(不想要docker),那么你只要在脚本里面写入:

(1)编译代码;

(2)通过ansbile推送可执行程序到你目标服务器

(3)ansible 执行远端的脚本(你可以在里面写重启的相关命令)。

5、调试方法

我配置jks的时候遇到两个问题:

1、在jks拉取代码后,打包的可执行程序在centos 下能够运行,但是打包到镜像后,执行报错(“/bin/sh: xxxnot found”),通过百度,在编译时语句前面加了CGO_ENABLED=0。

2、打包成镜像的shell命令报错

jks拉取的代码存放在:/var/lib/jenkins/workspace 目录下。如果碰到问题了,我们可以自己在这个目录下手动调试。举例:

我构建了一个jks 工程“gw_micro_service”。你可以在这个目录下手动执行jks上的那个shell命令,遇到啥问题可先在这个目录下调试好。

总结:

jks是个很好的工具,使用方法也很多,我只用了它简单的功能;其实这些我也可以写个脚本,在我mac上一键升级远端程序。但是这样不方便协同办公。

到此这篇关于jenkins配置golang 代码工程自动发布的文章就介绍到这了,更多相关jenkins配置golang内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang 编写Tcp服务器的解决方案

    Golang 编写Tcp服务器的解决方案

    Golang 作为广泛用于服务端和云计算领域的编程语言,tcp socket 是其中至关重要的功能,这篇文章给大家介绍Golang 开发 Tcp 服务器及拆包粘包、优雅关闭的解决方案,感兴趣的朋友一起看看吧
    2022-10-10
  • Golang内存管理之内存分配器详解

    Golang内存管理之内存分配器详解

    Go内存分配器的设计思想来源于TCMalloc,全称是Thread-Caching Malloc,核心思想是把内存分为多级管理,下面就来和大家深入聊聊Go语言内存分配器的使用吧
    2023-06-06
  • Go基本数据类型的具体使用

    Go基本数据类型的具体使用

    本文主要介绍了Go的基本数据类型,包括布尔类型、整数类型、浮点数类型、复数类型、字符串类型,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Go语言中map使用和并发安全详解

    Go语言中map使用和并发安全详解

    golang 自带的map不是并发安全的,并发读写会报错,所以下面这篇文章主要给大家介绍了关于Go语言中map使用和并发安全的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Go Asynq异步任务处理的实现

    Go Asynq异步任务处理的实现

    Asynq是一个新兴的异步任务处理解决方案,它提供了轻量级的、易于使用的API,本文主要介绍了Go Asynq异步任务处理的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-06-06
  • vscode如何debug调试golang代码

    vscode如何debug调试golang代码

    古话说工欲善其事必先利其器,Go语言程序的开发者而言,当下最火的IDE应该非微软的Visual Studio Code莫属,本文主要介绍了vscode如何debug调试golang代码,感兴趣的可以了解一下
    2024-03-03
  • Golang实现EasyCache缓存库实例探究

    Golang实现EasyCache缓存库实例探究

    这篇文章主要为大家介绍了Golang实现EasyCache缓存库实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Golang依赖注入工具digo的使用详解

    Golang依赖注入工具digo的使用详解

    这篇文章主要为大家详细介绍了Golang中依赖注入工具digo的使用,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • 浅析Golang中Gin框架存在的必要性

    浅析Golang中Gin框架存在的必要性

    在Go语言中,net/http 包提供了一个强大且灵活的标准HTTP库,那为什么还出现了像 Gin 这样的,方便我们构建Web应用程序的第三方库,下面就来和大家简单分析一下
    2023-08-08
  • Golang切片和数组拷贝详解(浅拷贝和深拷贝)

    Golang切片和数组拷贝详解(浅拷贝和深拷贝)

    这篇文章主要为大家详细介绍一下Golang切片拷贝和数组拷贝,文中有详细的代码示例供大家参考,需要的可以参考一下
    2023-04-04

最新评论