目录
  • 前沿
  • 一、在jenkins宿主机上配置go环境;
    • 1、安装go;
    • 2、配置环境变量
    • 3、验证环境是否可用
  • 二、jenkis上配置项目
    • 1、jks上新建项目
    • 2、“源码管理”菜单添加git信息
    • 3、“构建”-》增加构建步骤-》Execute shell
    • (1)编译go代码;
    • (2)打包成镜像并且推送到仓库;
    • (3)通过ansible在开发服务器上执行删除容器启动新容器脚本;
    • 4、如何使用jks的功能
      • 1)、从git上拉代码;
      • 2)、执行我的shell脚本;脚本的内容有:
    • 5、调试方法
    • 总结:

      前沿

      以前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上一键升级远端程序。但是这样不方便协同办公。

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。