在
Jenkins
安装
Golang
环境
[root@jenkins ~]#apt update && apt -y install golang
[root@jenkins ~]#go version
go version go1.18.1 linux/amd64
准备golang项目和数据库环境
[root@rocky8 ~]#git clone git@gitlab.wang.org:devops/ginweb.git
[root@rocky8 ~]#vim /root/ginweb/conf/ginweb.ini
[mysql]
host = "mysql.wang.org"
port = 3306
databases = "ginweb"
user = "ginweb"
passwd = "123456"
[redis]
host = "redis.wang.org"
port = 6379
passwd = "123456"
修改10.0.0.200的DNS服务器配置以及部署mysql redis
所有机器的dns解析都指向了这台dns服务器
[root@gitlab ~]#vim /etc/bind/wang.org.zone
$TTL 1D
@ IN SOA master admin (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.200
gitlab A 10.0.0.200
jenkins A 10.0.0.210
mysql A 10.0.0.200
redis A 10.0.0.200
[root@gitlab ~]#rndc reload
server reload successful
安装数据库
[root@gitlab ~]apt update && apt -y install mysql-server redis
允许远程登陆
[root@gitlab ~]sed -i '/127.0.0.1/s/^/#/' /etc/mysql/mysql.conf.d/mysqld.cnf
[root@gitlab ~]systemctl restart mysql.service
#配置MySQL环境
[root@gitlab ~]#mysql
mysql> create database ginweb;
Query OK, 1 row affected (0.01 sec)
mysql> CREATE USER 'ginweb'@'10.0.0.%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT ALL PRIVILEGES ON ginweb.* TO 'ginweb'@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
准备redis
[root@gitlab ~]#vim /etc/redis/redis.conf
bind 0.0.0.0
requirepass 123456
[root@gitlab ~]#systemctl restart redis
导入MySQL数据表
[root@rocky8 ginweb]#mysql -uginweb -p123456 -hmysql.wang.org ginweb < ginweb.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
Gitlab
创建项目
[root@jenkins ~]#vim /data/go/go.sh
#!/bin/bash
APP=ginweb
APP_PATH=/data
DATE=$(date +%F_%H-%M-%S) # 使用 $(command) 替代 `command` 以符合现代 Bash 实践
HOST_LIST="
10.0.0.201
10.0.0.202
"
build() {
# go env 可以查看到下面变量信息,如下环境变量不支持相对路径,只支持绝对路径
# root用户运行脚本
# export GOCACHE="/root/.cache/go-build"
# export GOPATH="/root/go"
# Jenkins用户运行脚本
export GOCACHE="/var/lib/jenkins/.cache/go-build"
export GOPATH="/var/lib/jenkins/go"
# go env -w GOPROXY=https://goproxy.cn,direct
export GOPROXY="https://goproxy.cn,direct"
CGO_ENABLED=0 go build -o "${APP}"
}
deploy() { # 修正函数名的拼写错误
for host in $HOST_LIST; do
ssh root@"$host" "mkdir -p \"$APP_PATH/${APP}-${DATE}\""
scp -r * root@"$host":"$APP_PATH/${APP}-${DATE}/"
ssh root@"$host" "
killall -0 \"$APP\" &> /dev/null && killall -9 \"$APP\";
rm -f \"$APP_PATH/$APP\" &&
ln -sf \"$APP_PATH/${APP}-${DATE}\" \"$APP_PATH/$APP\" &&
cd \"$APP_PATH/$APP/\" &&
nohup ./$APP &> /dev/null &
" &
done
}
build
验证结果
账号密码admin/123456