linux12Devops -->08jenkins部署Golang

Jenkins部署Golang

编译环境:
1.安装go语言

 2.优化测试
部署环境:
  1.部署
第一步:编译环境(Jenkins)
1.安装golang语言
#1.下载golang
[root@jenkins opt]# wget https://golang.google.cn/dl/go1.16.7.linux-amd64.tar.gz

#2.安装
[root@jenkins opt]# tar -xf go1.16.7.linux-amd64.tar.gz -C /usr/local/

#3.添加软连接
[root@jenkins /usr/local]# ln -s /usr/local/go /usr/local/golang
#4.添加环境变量
[root@jenkins opt]# vim /etc/profile.d/go.sh
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
2.测试

在这里插入图片描述

在这里插入图片描述

# 1.创建目录
[root@jenkins opt]# mkdir /opt/go
[root@jenkins go]# go mod init jenkins-go  #创建一个go.mod文件
total 4
-rw-r--r-- 1 root root 27 Aug 16 20:40 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
#方式二
[root@jenkins /opt/go]# go build main.go 
[root@jenkins /opt/go]# ll
total 14556
-rw-r--r-- 1 root root      631 Aug 16 20:43 go.mod
-rw-r--r-- 1 root root     8914 Aug 16 20:46 go.sum
-rwxr-xr-x 1 root root 14883140 Aug 16 20:53 main
-rw-r--r-- 1 root root      235 Aug 16 20:48 main.go
[root@jenkins /opt/go]# ./main 
[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

在这里插入图片描述

第二步:部署环境(web)
1.准备源代码到远程仓库

在这里插入图片描述

#1.将源代码文件传到远程仓库
#下载远程仓库到本地
[root@k8s-m-01 go]# git clone git@192.168.15.101:root/jenkins-go.git

#将源代码移动到本地仓库
[root@k8s-m-01 go]# mv gin/ jenkins-go/
[root@k8s-m-01 go]# cd jenkins-go/
[root@k8s-m-01 jenkins-go]# ll
total 4
drwxr-xr-x 3 root root 88 Aug 16 21:07 gin
-rw-r--r-- 1 root root 24 Aug 16 21:09 README.md
[root@k8s-m-01 jenkins-golang]# git add gin/
#提交源代码到远程仓库
[root@k8s-m-01 jenkins-golang]# git commit -m 'init' .
[master d0dfdb5] init
 3 files changed, 149 insertions(+)
 create mode 100644 gin/README.en.md
 create mode 100644 gin/README.md
 create mode 100644 gin/main.go
[root@k8s-m-01 jenkins-go]# git push -u origin master 
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 2.41 KiB | 0 bytes/s, done.
Total 7 (delta 0), reused 0 (delta 0)
To git@192.168.15.101:root/jenkins-go.git
   349e7be..e4ce76a  master -> master
Branch master set up to track remote branch master from origin.
#推送完成并创建标签

在这里插入图片描述

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 ../gin/main.go

选择标签进行构建

在这里插入图片描述

在Jenkins服务器上测试构建
在这里插入图片描述

#go 保存的路径
[root@jenkins /usr/local/go/pkg/linux_amd64]# pwd
/usr/local/go/pkg/linux_amd64
[root@jenkins /usr/local/go/pkg/linux_amd64]# ls
archive    crypto.a    expvar.a  html.a    log     net.a      regexp     sync       time.a
bufio.a    database    flag.a    image     log.a   os         regexp.a   sync.a     unicode
bytes.a    debug       fmt.a     image.a   math    os.a       runtime    syscall.a  unicode.a
compress   embed.a     go        index     math.a  path       runtime.a  testing    vendor
container  encoding    hash      internal  mime    path.a     sort.a     testing.a
context.a  encoding.a  hash.a    io        mime.a  plugin.a   strconv.a  text
crypto     errors.a    html      io.a      net     reflect.a  string  s.a  time

在这里插入图片描述

在这里插入图片描述

构建前部署

# 先main同步到挂载目录
[root@jenkins /var/lib/jenkins/workspace/jenkins-go/target]# scp -r main 192.168.15.111:/nfs/v4

在这里插入图片描述

yaml部署

#1.编写配置清单上传远程仓库
[root@k8s-m-01 ~]# vim go.yaml
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/v4 #挂载的目录
            server: 192.168.15.111 #本机
---
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: /

构建后部署

在这里插入图片描述

在这里插入图片描述

#!/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 {}
3.测试访问
#!/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 {}
3.测试访问

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FikL-09-19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值