Jenkins部署Golang

一、编译环境:

​ 1.安装go语言

​ 2.优化测试

二、部署环境:

​ 1.部署

第一步:编译环境(Jenkins)

1.安装golang语言

1.下载golang
[root@jenkins opt]# wget https://golang.google.cn/dl/go1.16.6.linux-amd64.tar.gz
[root@jenkins opt]# ll
总用量 689328
-rw-r--r--  1 root root 129049323 713 06:21 go1.16.6.linux-amd64.tar.gz

2.解压
[root@jenkins opt]# tar xf go1.16.6.linux-amd64.tar.gz -C /usr/local/

3.修改环境变量
[root@jenkins opt]# vim /etc/profile
export GO_HOME=/usr/local/go
export GO_ROOT=/usr/local/go
export GO_PATH=/opt/go
export GOPROXY=https://mirrors.aliyun.com/goproxy/
PATH=$PATH:$GO_HOME:$GO_ROOT:$GO_PATH:$GO_HOME/bin
export PATH
[root@jenkins opt]# source /etc/profile

[root@jenkins opt]# printenv |grep GO
GO_PATH=/opt/go
GOPROXY=https://mirrors.aliyun.com/goproxy/
GO_HOME=/usr/local/go
GO_ROOT=/usr/local/go
[root@jenkins opt]# 

2.测试

0.准备目录
[root@jenkins opt]# mkdir /opt/go
[root@jenkins opt]# cd !$
cd /opt/go
1. 创建一个go.mod文 件
[root@jenkins go]# go mod init jenkins-go
go: creating new go.mod: module jenkins-go
[root@jenkins go]# ll
总用量 4
-rw-r--r-- 1 root root 27 416 22:33 go.mod
2.下载go的框架
[root@jenkins go]# go get -u github.com/gin-gonic/gin 

3.修改main.go文件 ===生产中这个东西在代码里
[root@jenkins go]# vim main.go
package main
import "github.com/gin-gonic/gin"
func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run("0.0.0.0:8888") // listen and serve on 0.0.0.0:8080  #因8080端口被占用,修改默认访问端口8080,改为8888
}

4.运行go
[root@jenkins go]# go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on 0.0.0.0:8888
[GIN] 2021/07/30 - 05:58:26 | 404 |       5.682µs |        10.0.0.1 | GET      "/"
[GIN] 2021/07/30 - 05:58:26 | 404 |         889ns |        10.0.0.1 | GET      "/favicon.ico"
[GIN] 2021/07/30 - 06:00:47 | 404 |         709ns |        10.0.0.1 | GET      "/"
[GIN] 2021/07/30 - 06:00:48 | 404 |         745ns |        10.0.0.1 | GET      "/"


5.编译一下
[root@jenkins go]# go build main go
会生成一个二进制main二进制文件
[root@jenkins go]# ll
总用量 9452
-rw-r--r-- 1 root root     320 730 05:56 go.mod
-rw-r--r-- 1 root root    6295 730 05:56 go.sum
-rwxr-xr-x 1 root root 9660854 730 07:51 main
-rw-r--r-- 1 root root     303 730 05:57 main.go

root@jenkins go]# mkdir target
[[root@jenkins go]# ll
总用量 9452
-rw-r--r-- 1 root root     320 730 05:56 go.mod
-rw-r--r-- 1 root root    6295 730 05:56 go.sum
-rwxr-xr-x 1 root root 9660854 730 07:51 main
-rw-r--r-- 1 root root     303 730 05:57 main.go
drwxr-xr-x 2 root root       6 730 07:51 target
[root@jenkins go]# rm -rf main
[root@jenkins go]# cd target/
[root@jenkins target]# go build ../main.go
[root@jenkins target]# ll
总用量 9436
-rwxr-xr-x 1 root root 9660854 730 08:05 main

在这里插入图片描述

测试访问一下:

在这里插入图片描述

二、部署环境:

只需运行构建的二进制文件

1.准备源代码到远程仓库

在这里插入图片描述

1.将源代码文件传到远程仓库
1.下载自己的远程仓库到本地[root@web ~]# git@10.0.0.60:technology-department/jenkins-golang.git
正克隆到 'jenkins-golang'...
Username for 'http://192.168.12.40': root
Password for 'http://root@192.168.12.40': 
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

2.由于我没有go语言的gin框架,所以去gitee随便找的
[root@web ~]# git clone https://gitee.com/lyric/gin-admin.git
正克隆到 'gin-admin'...
remote: Enumerating objects: 12202, done.
remote: Counting objects: 100% (12202/12202), done.
remote: Compressing objects: 100% (6700/6700), done.
remote: Total 12202 (delta 6620), reused 9935 (delta 4587), pack-reused 0
接收对象中: 100% (12202/12202), 20.97 MiB | 3.80 MiB/s, done.
处理 delta 中: 100% (6620/6620), done.
[root@web ~]# ll
drwxr-xr-x  9 root root      209 730 09:00 gin-admin
drwxr-xr-x  3 root root       35 730 06:11 jenkins-golang
[root@web ~]# mv gin-admin/ gin
[root@web ~]# ll
drwxr-xr-x  9 root root      209 730 09:00 gin
drwxr-xr-x  3 root root       35 730 06:11 jenkins-golang

3.将源代码移动到本地仓库
[root@web ~]# mv gin /root/jenkins-golang/
[root@web ~]# cd /root/jenkins-golang/
[root@web jenkins-golang]# ll
总用量 4
drwxr-xr-x 3 root root 70 419 04:18 gin
-rw-r--r-- 1 root root 23 419 04:13 README.md
[root@web jenkins-golang]# git add gin/

4.提交源代码到远程仓库
[root@web jenkins-golang]# git add gin/
[root@web jenkins-golang]# git commit -m 'init' .
[root@web jenkins-golang]# git push -u origin master
Username for 'http://10.0.0.60': root
Password for 'http://root@10.0.0.60': 
Counting objects: 159, done.
Compressing objects: 100% (141/141), done.
Writing objects: 100% (158/158), 103.90 KiB | 0 bytes/s, done.
Total 158 (delta 24), reused 0 (delta 0)
remote: Resolving deltas: 100% (24/24), done.
To http://10.0.0.60/technology-department/jenkins-golang.git
   fafa706..00efd28  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

在这里插入图片描述

2.Jenkins部署

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

构建脚本

#!/bin/bash
git checkout $GIT_TAG

export GOPROXY=https://mirrors.aliyun.com/goproxy/
/usr/local/go/bin/go mod init jenkins-go
/usr/local/go/bin/go get -u github.com/gin-gonic/gin

rm -rf target && mkdir target
cd target
/usr/local/go/bin/go build ../main.go

选择标签进行构建

在这里插入图片描述

在Jenkins服务器上测试构建

在这里插入图片描述

构建后脚本

#!/bin/bash
chmod +x /nfs/v9/target/main
kubectl get pods -n golang | awk '{print $1}' | grep -v "NAME" | xargs -I {} kubectl delete pod -n golang {}
/nfs/v9/target/main &>/dev/null &

构建后部署

在这里插入图片描述
在这里插入图片描述

#1.编写配置清单上传远程仓库
# 用一个容器将 main 启动起来就行了
kind: Namespace
apiVersion: v1
metadata:
  name: golang
---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: golang
  name: golang-deployment
spec:
  selector:
    matchLabels:
      app: golang
      deploy: main
  template:
    metadata:
      labels:
        app: golang
        deploy: main
    spec:
      nodeName: gdx1
      containers:
        - name: golang
          image: centos:7
          command:
            - "/bin/bash"
            - "-c"
            - "/opt/target/main"
          command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]
          livenessProbe:
            exec:
              command:
                - "/bin/bash"
                - "-c"
                - "cat /opt/target/main"
            periodSeconds: 2
          readinessProbe:
            tcpSocket:
              port: 38080
            initialDelaySeconds: 30
            periodSeconds: 2
          volumeMounts:
            - mountPath: /opt
              name: golang-data
      volumes:
        - name: golang-data
          nfs:
            path: /nfs/v9
            server: 172.16.1.11
---
kind: Service
apiVersion: v1
metadata:
  name: golang-deployment-svc
  namespace: golang
spec:
  ports:
    - port: 38080
      targetPort: 38080
  selector:
    app: golang
    deploy: main
  clusterIP: None
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  namespace: golang
  name: golang-ingress
spec:
  rules:
    - host: www.golang.cluster.local.com
      http:
        paths:
          - backend:
              serviceName: golang-deployment-svc
              servicePort: 38080
            path: /

3.测试访问
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins是一个开源的持续集成工具,而Docker是一个容器化平台,我们可以利用Jenkins和Docker来部署Golang项目。 首先,我们需要在Jenkins中安装Docker插件,以便在构建过程中使用Docker容器。Docker插件允许我们在构建任务中创建、启动和停止Docker容器。 接下来,我们可以配置Jenkins的构建任务。在构建任务中,我们可以指定源代码仓库的地址,以及一些其他的构建步骤,例如代码编译、单元测试等。 在构建步骤中,我们可以使用Docker插件创建一个Docker容器来运行我们的Golang项目。可以使用Dockerfile来定义容器的环境和依赖项。Dockerfile是一个包含一系列命令的文件,用于构建Docker镜像,其中包括构建、安装Golang项目所需的环境和依赖项。 一旦Docker容器创建完成,我们可以在容器中执行一些命令来编译和运行我们的Golang项目。可以使用Docker命令来执行这些命令,例如docker exec命令可以在容器中执行某个命令。 最后,我们可以配置Jenkins任务的后续步骤,例如将构建结果发布到某个服务器或云平台上。 通过Jenkins和Docker的集成,我们可以轻松地实现Golang项目的持续集成和部署Jenkins可以自动触发构建任务,使用Docker容器来创建项目的运行环境,从而简化了部署的流程。这种方式还可以确保每次构建的环境完全一致,提高了应用程序的可移植性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值