Gitlab+Jenkins構建一個Go專案
阿新 • • 發佈:2020-12-27
部署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
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
export GOPROXY=https://goproxy.cn
source /etc/profile
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結果
go version
go version go1.15.6 linux/amd64
建立go測試程式碼
[root@jenkins ~]# mkdir /home/app/goproject1/src/test1 -p
1