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,
# 我們不弄太復雜,就安裝推薦的插件,
# 安裝時間較長,請准備良好的網絡環境,可能需要FQ

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM