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

作者:stefan1240 时间:2024-05-22 10:12:22 

前沿

以前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

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

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

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

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

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 不会用的自己百度查下,这个是用来执行远程服务器的命令,运维同学肯定很熟悉。

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

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

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命令,遇到啥问题可先在这个目录下调试好。

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

总结:

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

来源:https://blog.csdn.net/stefan1240/article/details/125899130

标签:jenkins,golang,自动发布
0
投稿

猜你喜欢

  • MDB格式网站文件如何解压

    2008-07-02 12:48:00
  • ASP在线生成电话图片程序

    2007-10-06 23:06:00
  • 看看那些名牌LOGO的成长史

    2009-03-24 20:37:00
  • python pandas dataframe 去重函数的具体使用

    2023-10-15 00:56:36
  • 总结几个非常实用的Python库

    2023-02-28 11:39:54
  • python中的__slots__使用示例

    2022-05-09 17:50:56
  • 使用python实现时间序列白噪声检验方式

    2023-11-13 23:06:53
  • 深入透析样式表滤镜(下)

    2011-06-14 09:49:19
  • Python中schedule模块定时任务的使用方法(2)

    2023-09-01 09:59:59
  • python flask实现分页的示例代码

    2021-04-01 09:55:23
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    2024-01-14 17:25:04
  • Debugging JavaScript:throw与console

    2008-08-29 17:03:00
  • python 矩阵增加一行或一列的实例

    2023-02-16 20:19:29
  • Python数据分析之真实IP请求Pandas详解

    2023-12-31 16:56:19
  • Python实现多张图片合成文字的效果

    2021-02-16 17:12:12
  • Linux/UNIX和Window平台上安装Mysql

    2024-01-24 00:00:15
  • 30分钟快速实现小程序语音识别功能

    2024-04-28 09:46:27
  • 浅谈Python2获取中文文件名的编码问题

    2021-08-11 08:18:45
  • 简单仿LightBox效果

    2008-09-19 21:35:00
  • Windows7 64位安装最新版本MySQL服务器的图文教程

    2024-01-28 18:39:24
  • asp之家 网络编程 m.aspxhome.com