部署Go项目简介

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

方案一

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

方案二

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

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

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

部署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路径即可
"

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

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

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

**

**

创建配置Gitlab项目

新建project

Gitlab仓库添加jenkins主机的公钥

关掉Gitlab默认的Devops管道

创建配置jenkins项目

创建jenkins项目

填写gitlab的git地址

添加jenkins凭据

此处凭据写jenkins的私钥

保存测试jenkins项目拉取

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%\bin)

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

配置jenkins的Go全局工具

配置jenkins构建参数

构建Go项目并运行测试

配置Nginx反代访问服务

安装配置Nginx

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

验证服务

Gitlab + Jenkins 构建,发布一个基于Go的Gin测试项目的更多相关文章

  1. 【转】发布一个基于NGUI编写的UI框架

    发布一个基于NGUI编写的UI框架 1.加载,显示,隐藏,关闭页面,根据标示获得相应界面实例 2.提供界面显示隐藏动画接口 3.单独界面层级,Collider,背景管理 4.根据存储的导航信息完成界面 ...

  2. jira 改变issue状态触发jenkins构建/发布

    目录 jira中issue状态的改变触发Jenkins构建 jira中定制新的workflow,作为jenkins发布使用流程 大家可以参考我的这个workflow 设置workflow 使用Tran ...

  3. 分享一个基于 netty 的 java 开源项目

    1.简介 中微子代理(neutrino-proxy)是一个基于 netty 的.开源的 java 内网穿透项目.遵循 MIT 许可,因此您可以对它进行复制.修改.传播并用于任何个人或商业行为. 2.项 ...

  4. Gitlab+Jenkins构建一个Go项目

    部署Go项目简介 对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程: 方案一 • 开发者本地环境需要将环境变量文件改为正式环境配置 • 编译成可执行文件 • 发送给运维 • ...

  5. gitlab+jenkins自动发布Python包到私有仓储

    背景 有个私有仓储,地址为https://your.repo.com/pypi/ 代码存储在gitlab, 地址为https://gitlab.company.com/software.git CI为 ...

  6. jenkins构建&发布git托管的VS工程

    顺便做个笔记,以防以后再踩坑:笔者用的是jenkins-1.620和git-2.7.2-64-bit.exe,操作系统是win10(本机) jenkins安装完成之后 如果想要配合git完成拉取代码. ...

  7. 发布一个基于协程和事件循环的c++网络库

    目录 介绍 使用 性能 实现 日志库 协程 协程调度 定时器 Hook RPC实现 项目地址:https://github.com/gatsbyd/melon 介绍 开发服务端程序的一个基本任务是处理 ...

  8. 亲手搭建一个基于Asp.Net WebApi的项目基础框架4

    实现目的:配置website端与服务端对接 1:配置好各项配置文件 2:server端编写接口客户端调用 1.1首先配置文件有log4的配置文件,有config的配置文件,还有服务列表的配置文件 首先 ...

  9. 亲手搭建一个基于Asp.Net WebApi的项目基础框架1

    目标:教大家搭建一个简易的前后端分离的项目框架. 目录: 1:关于项目架构的概念 2:前后端分离的开发模式 3:搭建框架的各个部分 这段时间比较闲,所以想把之前项目里用到的一些技术写到博客里来,分享给 ...

随机推荐

  1. Beta冲刺随笔——Day_Five

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 今日事今日毕 林涛: ...

  2. JZOJ2020年8月11日提高组T2 宝石

    JZOJ2020年8月11日提高组T2 宝石 题目 Description 见上帝动了恻隐之心,天后也想显示一下慈悲之怀,随即从口袋中取出一块魔术方巾,让身边的美神维纳斯拿到后堂的屏风上去试试,屏风是 ...

  3. 【GDOI2014模拟】JZOJ2020年8月14日提高组 服务器

    [GDOI2014模拟]JZOJ2020年8月14日提高组 服务器 题目 Time and Memory Limits Description 我们需要将一个文件复制到n个服务器上,这些服务器的编号为 ...

  4. 跟我一起学Redis之Redis持久化必知必会

    前言 Redis是出了名的速度快,那是因为在内存中进行数据存储和操作:如果仅仅是在内存中进行数据存储,那就会导致以下问题: 数据随进程退出而消失:当服务器断电或Redis Server进程退出时,内存 ...

  5. 用了Dapper之后就不要再见到SqlConnection咯

    一.背景 前几天看公司一个新项目的底层使用了dapper,大家都知道dapper是一个非常强大的半自动化orm,帮程序员解决了繁琐的mapping问题,用起来非常爽,但我还是遇到了一件非常不爽的事情, ...

  6. moviepy音视频剪辑:AudioClip帧处理时报TypeError: only size-1 arrays can be converted to Python scalar错

    ☞ ░ 前往老猿Python博文目录 ░ 一.环境 操作系统:win7 64位 moviepy:1.0.3 numpy:1.19.0 Python:3.7.2 二.应用代码及报错信息 程序代码 if ...

  7. 第7.13节 案例详解:Python类变量

    第7.13节 案例详解:Python类变量 上节介绍了类变量的定义和使用方法,并举例进行了说明.本节将通过一个更完整的例子来说明. 一.    定义函数dirp def dirp(iter): ret ...

  8. PyQt(Python+Qt)学习随笔:QTableWidget的属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.概述 除了从父类继承的属性外,在Designer中QTableWidget只有两个属性,就是行数 ...

  9. Hbase 简单封装(Hbase 2.0+ API)

    前言 封装了一些常用的方法 添加一行数据 创建表(单列族) 创建表(多列族) 删除表 判断表是否存在 获取一行数据(根据rowkey) 获取某个列族某个列的某行数据 打印出result(方便展示数据) ...

  10. buuctfweb刷题wp详解及知识整理----[安洵杯 2019]easy_web

    尝试之路加wp 观察源代码和get所传参数可猜测img所传参数img就是该图片经过两次base64编码和一次hex编码后可得555.png成果验证猜测 然后发现该图片以data元数据封装的方式放到了源 ...