• Gitlab + Jenkins 构建,发布一个基于Go的Gin测试项目


    部署Go项目简介

    对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程:

    方案一

    • 开发者本地环境需要将环境变量文件改为正式环境配置
    • 编译成可执行文件
    • 发送给运维
    • (运维)将文件覆盖为线上
    • (运维)重启进程
    (可谓“又臭又长”)
    

    方案二

    开发者将代码commit到gitlab上交给运维同学
    (运维)pull代码
    (运维)编译成可执行文件
    (运维)覆盖线上文件
    (运维)重启进程
    

    这种对于运维属于重度依赖,而运维同学又需要去关心代码的编译,增加了运维同学的工作了。

    以上两种方案都是之前项目中发生过的,对于发版来说可谓是一种“噩梦”,易出错,流程长,运维要是不在根本无法操作。

    image.png

    部署GitLab环境

    部署gitlab请看我前面写的文章

    https://www.cnblogs.com/you-men/p/13126530.html

    部署Jenkins环境

    环境清单

    * CentOS 7.3
    * git-2.9.5.tar.gz
    * Jenkins 2.203.war
    * apache-tomcat-9.0.12.tar.gz
    * jdk-8u151-linux-x64.tar.gz
    * apache-maven-3.5.4-bin.tar.gz
    

    初始化

    mkdir -p /etc/yum.repos.d/backup
    mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup
    curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
    curl  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum -y install ntpdate
    ntpdate -b  ntp1.aliyun.com
    setenforce 0
    sed -i '/^SELINUX=/ s/enforcing/disabled/'  /etc/selinux/config
    systemctl stop firewalld
    systemctl disable firewalld
    sed -i '/^GSSAPIAu/ s/yes/no/' /etc/ssh/sshd_config
    sed -i '/^#UseDNS/ {s/^#//;s/yes/no/}' /etc/ssh/sshd_config
    

    下载git.tar包安装

    # Jenkins支持的git最低版本是1.8,使用rpm安装版本是1.8,这里采用源码安装使用2.9版本
    # git官网下载最新版本GIT:
    # https://mirrors.edge.kernel.org/pub/software/scm/git/
    
    # 安装git 依赖包
    yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
    rpm -e git --nodeps    # 卸载掉老版本git
    tar xvf git-2.9.5.tar.gz -C /usr/local/src/
    cd /usr/local/src/git-2.9.5/
    make prefix=/usr/local/git all
    make prefix=/usr/local/git install
    # 修改/etc/bashrc配置文件末尾加入下面一行环境变量(建议针对用户生效,否则使用其他用户时候容易出问题)
    tail -1 /etc/bashrc
    export PATH=$PATH:$HOME/bin:/usr/local/git/bin
    source /etc/bashrc
    # 测试是否安装成功
    git --version
    git version 2.9.5
    

    JDK环境部署

    # jenkins对jdk版本有要求,不能用jdk9和10,且需要将系统自带的java环境清楚掉
    # jdk下载地址
    # http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
    # 卸载系统自带的java环境
    [root@jenkins-8 git-2.9.5]# rpm -qa |grep jdk
    [root@jenkins-8 git-2.9.5]# java
    bash: java: 未找到命令
    
    # 解压安装jdk
    tar xvf jdk-8u151-linux-x64.tar.gz -C /usr/local/
    cd /usr/local/
    mv jdk1.8.0_151/ jdk
    # 修改/etc/bashrc配置文件,末尾加入下面一行环境变量.
    tail -2 /etc/bashrc
    JAVA_HOME=/usr/local/jdk
    export PATH=$PATH:$JAVA_HOME/bin
    
    source /etc/bashrc
    java -version        # 尽量不要用openjdk
    java version "1.8.0_151"
    Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
    

    部署jenkins

    # war包部署
    # cp jenkins.war /usr/local/tomcat/webapps/
    # 停掉tomcat在启动一遍
    # 将Jenkins的war放到tomcat的webapps下面,重启一下tomcat自己就解压了,但是访问可能有点慢
    
    # 也可以通过jar包直接启动jenkins
    java  -Dcom.sun.management.jmxremote  -Dcom.sun.management.jmxremote.port=12345  -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false  -Djava.rmi.server.hostname="192.168.8.2 "  -jar jenkins-2.138.3.war &
    
    
    # 也可以用jenkins的rpm包安装
    wget https://pkg.jenkins.io/redhat-stable/jenkins-2.222.1-1.1.noarch.rpm
    rpm -ivh jenkins-2.150.1-1.1.noarch.rpm 
    
    # Jenkins配置
    grep -v "#" /etc/sysconfig/jenkins | grep -v "^$"
    JENKINS_HOME="/var/lib/jenkins"
    JENKINS_JAVA_CMD=""
    JENKINS_USER="root"
    JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true  
    -Dcom.sun.management.jmxremote  
    -Dcom.sun.management.jmxremote.port=12345  
    -Dcom.sun.management.jmxremote.authenticate=false  
    -Dcom.sun.management.jmxremote.ssl=false  
    -Djava.rmi.server.hostname="149.129.38.117" "
    JENKINS_PORT="8080"
    JENKINS_LISTEN_ADDRESS=""
    JENKINS_HTTPS_PORT=""
    JENKINS_HTTPS_KEYSTORE=""
    JENKINS_HTTPS_KEYSTORE_PASSWORD=""
    JENKINS_HTTPS_LISTEN_ADDRESS=""
    JENKINS_DEBUG_LEVEL="5"
    JENKINS_ENABLE_ACCESS_LOG="no"
    JENKINS_HANDLER_MAX="100"
    JENKINS_HANDLER_IDLE="20"
    JENKINS_ARGS=""
    
    # 如果启动报错一般是你java不是openjdk的,修改下java路径即可
    vim /etc/init.d/jenkins 
    candidates="
    /etc/alternatives/java
    /usr/lib/jvm/java-1.8.0/bin/java
    /usr/lib/jvm/jre-1.8.0/bin/java
    /usr/lib/jvm/java-1.7.0/bin/java
    /usr/lib/jvm/jre-1.7.0/bin/java
    /usr/bin/java
    /usr/local/jdk/bin/java   # 加上你的Java路径即可
    "
    

    image

    cat /root/.jenkins/secrets/initialAdminPassword        # 这个密码以后可能会用到最后记下来,这个文件往后初始化就没有了
    2775b0adf72e42a5bdea22297b81dd82
    
    # 2> 复制密码上面进入下一步会出现一个页面安装插件图2,
    # 我们不弄太复杂,就安装推荐的插件,
    # 安装时间较长,请准备良好的网络环境,可能需要翻墙
    

    image

    /# 可能因为网络波动+jenkins源是国外的,会安装失败,重试几次,
    # 如果还不行换服务器,比如云服务器,或者换源,图3
    

    image

    image

    至此,就可以开始使用Jenkins了

    image

    image

    **
    **

    创建配置Gitlab项目

    新建project

    image.png

    Gitlab仓库添加jenkins主机的公钥

    image.png

    关掉Gitlab默认的Devops管道

    image.png

    创建配置jenkins项目

    创建jenkins项目

    image.png

    填写gitlab的git地址

    image.png

    添加jenkins凭据

    此处凭据写jenkins的私钥

    image.png

    保存测试jenkins项目拉取

    image.png

    jenkins配置go环境和插件

    安装go环境

    tar xf go1.15.6.linux-amd64.tar.gz -C /usr/local/
    mkdir /home/app
    
    tail -6 /etc/profile
    export GOROOT=/usr/local/go
    export GOPATH=/home/app/GoProject
    export GOBIN=$GOPATH/bin
    export PATH=$PATH:$GOROOT/bin
    export PATH=$PATH:$GOPATH/bin
    export GOPROXY=https://goproxy.cn,direct
    
    source /etc/profile
    
    
    golang1.13可以直接进行
    
    # 七牛云
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://goproxy.cn,direct
    
    
    # 阿里云
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
    

    GOROOT:Go安装后的根目录,解压的时候解压Go安装包的路径,安装过程中会由安装程序自动写入系统环境变量中。Go语言自带的类库。

    GOBIN:Go的二进制文件存放目录。

    GOPATH:Go的工作空间(自己定义的goProject目录)工作空间是一个目录层次结构,根目录包含三个子目录:

    src:包含Go源文件(例如:.go、.c、.h、.s 等)

    pkg:包含包对象,编译好的库文件(例如:.a)

    bin:包含可执行命令(为了方便,可以把此目录加入到 系统的 PATH 变量中,在环境变量 PATH 后追加 %GOPATH%in)

    PATH:需要将%GOBIN% 加在 PATH 变量的最后,方便在命令行下运行。

    验证Go结果

    [root@jenkins src]# go version
    go version go1.15.6 linux/amd64
    

    创建go测试代码

    [root@jenkins ~]# mkdir -p /home/app/GoProject/src
    [root@jenkins src]# git clone git@192.168.43.235:root/go_test1.git
    [root@jenkins src]# cd /home/app/GoProject/src/go_test1
    [root@jenkins test1]# go mod init go_test1
    [root@jenkins test1]# cat main.go 
    package main
    
    import "github.com/gin-gonic/gin"
    
    func main()  {
        r := gin.Default()
        r.GET("/", func(c *gin.Context) {
            c.JSON(200,gin.H{
                "message": "Hello World",
            })
        })
        r.Run(":10080")
    }
    [root@jenkins go_test1]# go run main.go
    [root@jenkins ~]# curl localhost:10080
    {"message":"Hello World"}
    

    上传代码到gitlab项目

    [root@jenkins go_test1]# git add .
    [root@jenkins go_test1]#  git config --global user.email "18621048483@163.com"
    [root@jenkins go_test1]# git config --global user.name "admin"
    [root@jenkins go_test1]# git commit -m "add main.go v0.1"
    [master 8492f92] add main.go v0.1
     3 files changed, 57 insertions(+)
     create mode 100644 go.mod
     create mode 100644 go.sum
     create mode 100644 main.go
    
    [root@jenkins go_test1]# git push 
    Counting objects: 5, done.
    Compressing objects: 100% (5/5), done.
    Writing objects: 100% (5/5), 2.36 KiB | 0 bytes/s, done.
    Total 5 (delta 0), reused 0 (delta 0)
    To 192.168.43.235:root/go_test1.git
       4dbaa3a..8492f92  master -> master
    

    image.png

    配置jenkins的Go全局工具

    image.png

    配置jenkins构建参数

    image.png

    构建Go项目并运行测试

    image.png

    配置Nginx反代访问服务

    安装配置Nginx

    yum -y install nginx
    vim /etc/nginx/nginx.conf
    location / {
      proxy_pass http://localhost:10080;
    }
    
    nginx
    

    验证服务

    image.png

  • 相关阅读:
    在chrome插件开发中,如何executeScript多个content script文件
    [Silverlight]MVVM+MEF框架Jounce练习(1)
    EF的日期运算
    【silverlight】Silverlight TreeViw默认展开节点
    singleton pattern简单随笔
    Design pattern形象比喻
    C#简单选择排序
    回文算法
    C#插入排序
    Jquery调用存储过程实例
  • 原文地址:https://www.cnblogs.com/you-men/p/14199542.html
Copyright © 2020-2023  润新知