前言
在有gitlab代码管理程序下,想要给简单的C语言建立提交后,在编译服务器自动拉取代码编译打包。除了相关的脚本文件撰写,可以在编译服务器安装执行的gitlab-runner客户端实现。本着不用root的权限下使用。
工具
git
gitlab-runner
make
问题探讨
由于测试服务器有老旧版本。第一次才用新的服务器,新的服务器的git满足条件,安装gitlab-runner 后直接可用。而旧服务器 git版本过旧,与我使用的gitlab-runner不兼容。因此要重新安装git。而我选择在普通用一下安装git和加载路径前置方式。没有卸载旧的git。
git 版本不匹配无法使用
git -c
Unknown option: -c
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path]
[-p|--paginate|--no-pager] [--no-replace-objects]
[--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
[--help] COMMAND [ARGS]
git版本有相应的参数
git -c
-c expects a configuration string
usage: git [--version] [--help] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
源码安装git
wget https://github.com/git/git/archive/v2.33.1.tar.gz
tar -zxf git-2.33.1.tar.gz
cd git-2.33.1
#重新开始编译检查
./configure --prefix=${HOME}/local/
make all
make install
#设置路径到普通用户配置下
vi .bash_profile
export PATH=${HOME}/local/bin:${PATH}
直接下载可执行文件gitlab-runner
mkdir -p ${HOME}/local/bin
cd ${HOME}/local/bin
#重命名
cp gitlab-runner-linux-amd64 gitlab-runner
chmod +x gitlab-runner
#设置路径到普通用户配置下
cd ~
vi .bash_profile
export PATH=${HOME}/local/bin:${PATH}
#刷新配置
source .bash_profile
#用户模式后台运行,如果可以增加crontab自动启动等限制,未运行会stuck
nohup gitlab-runner run & >/dev/null
仓库具体项目注册-注销等具体操作
#查看注册列表
gitlab-runner list
#设置->CI/CD->Runner->手动设置specificRunner
#test注册runner
gitlab-runner register -n --name test_runner -u http://188.88.88.88:8888/ -r 7pybz1233s333Crfss --executor shell --builds-dir=${HOME}/allrunner/buid --cache-dir=${HOME}/allrunner/cache
#test注销runner
gitlab-runner unregister --name "test_runner"
自动重启脚本
机器重启等,脚本结合crontab实现程序自动重启减少人工操作
crontab -e增加定时项。假如如可执行脚本位置为/home/abc/autogitlabrunner.sh
0 * * * * /home/abc/autogitlabrunner.sh 2>/dev/null
排除root权限的。可实现普通用户下重启
#!/bin/sh
export LC_ALL="zh_CN.UTF-8"
PRE_DIR=$(pwd)
echo ${PRE_DIR}
SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") >/dev/null && pwd)
echo ${SCRIPTDIR}
cd ${SCRIPTDIR}
export PATH=$PATH:/usr/sbin:/sbin
startft=`date '+%Y-%m-%d %A %T '`
proname="gitlab-runner"
echo ${startft} start
extrakey()
{
pid=`pidof ${proname} `
echo "pid:" "${pid}"
if [ -z "${pid}" ]
then
cn=0;
else
arrpid=(${pid} )
arrlen=${#arrpid}
cn=0
for (( j=0; j<$arrlen;j++ ))
do
apid=${arrpid[j]}
if [ -z "${apid}" ]
then
cn=0;
else
cn=`ps -p ${apid} -o ruser|grep -v root|grep -v USER|wc -l`
if [ $cn -ge 1 ]
then
break;
fi
fi
done
fi
echo "cn: "${cn} " pid:" "${apid}"
}
banner()
{
echo "USAGE:./start.sh [run|show]"
}
dostart()
{
extrakey
if [ $cn -ge 1 ]
then
echo "already run" "${apid}"
echo "${proname} process is running,please shut this process,and running start.sh."
banner
else
echo "start"
nohup ${proname} run >/dev/null 2>&1 &
fi
}
doshow()
{
exec 4<&1
exec 1>/dev/null
extrakey
exec 1<&4
exec 4>&-
if [ $cn -gt 0 ]
then
echo "SHOW ${proname} ${pid}"
else
echo "FOUND NOT ${proname}"
fi
}
if [ 0 -eq $# ]
then
dostart
elif [ 1 -eq $# ]
then
case $1 in
run)
dostart
;;
show)
doshow
;;
*)
banner
esac
fi
cd ${PRE_DIR}
echo ${startft} end
echo "_______________
.gitlab-ci.yml样例
stages:
- build
- test
- pack
- deploy
before_script:
- export LC_ALL="zh_CN.UTF-8"
build-compile:
stage: build
script:
- cd makedir
- make clean && make && make install
artifacts:
paths:
- ./bin/
- ./conf/
job-testmk:
stage: test
script:
- cd makedir
- make show
job-pack:
stage: pack
script:
- echo "pack"
- mkdir -p $HOME/allrunner/test
- zip -r test.zip ./bin/* ./conf/*
- cp test.zip $HOME/allrunner/test
dependencies:
- build-compile
job-deploy:
stage: deploy
script:
- echo "deploy"
dependencies:
- job-pack