一、安装gitlab
首先下载gitlab的安装包,地址如下:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/bionic/main/g/gitlab-ce/
然后安装下载的包即可,一般还需要安装openssh-server等依赖包,在安装gitlab包之前可以使用dpkg -I *.deb查看所需依赖并安装。
修改gitlab配置,主要是一些端口用户等配置:
sudo vim /etc/gitlab/gitlab.rb
## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
#external_url 'http://gitlab.example.com'
external_url 'http://192.168.229.128' #修改为机器IP
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.server"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "smtp user"
gitlab_rails['smtp_password'] = "smtp password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_pool'] = false
修改配置之后执行命令重新加载配置:
sudo gitlab-ctl reconfigure
执行完该条命令之后,就会生成一个初始密码,位置如下:
sudo cat /etc/gitlab/initial_root_password
然后通过IP即可访问,输入账号root以及密码即能登入,登入之后可以修改密码。
二、账号申请管理
有了管理员账号之后,其它用户就能申请个人账号进行使用,申请之后,由管理账号进行通过:
然后进入以下页面,可以对申请用户进行管理,编辑权限,通过之后,就可以使用申请账号进行登录 :
三、创建组和项目:
管理员账号以及有权限的个人账号,都可以创建组和项目,操作比较简单。
四、自动打包发布:
首先根据提示在组中安装所需要的包,以及申请runner,注意是在编译的服务器中安装,不是在gitlab代码托管的服务器:
runner创建之后就可以在项目中创建CI/CI流水线:
具体的一些配置项可以自行在网上查询.gitlab-ci.yaml的编写说明,比如设置只在特定的分支上编译等。
同时还需要配置ssh以便于免密登录:
1、生成密钥:
ssh-keygen
2、将公钥传到服务器(root和host分别对应用户名和IP):
ssh-copy-id root@host
3、测试免密登录是否成功:
ssh root@host
接下来在gitlab的项目组中设置CI/CD变量(也可以在具体项目中单独配置):
设置的变量以及值为:
SSH_USER = 服务器用户名
SSH_HOST = 服务器ip
SSH_KNOWN_HOSTS = 文件 ~/.ssh/known_host 中服务器ip的一行(一般为第一行)
SSH_PRIVATE_KEY = 文件 ~/.ssh/id_rsa 中的内容
这一系列配置完之后,就可以在项目中按照.gitlab-ci.yaml进行编译了,当然,CI服务器上也需要安装一些编译各种包时所需要的依赖包。
五、常见CI错误解决:
Using SSH executor...
ERROR: Preparation failed: ssh command Connect() error: getting host key callback: open /root/.ssh/known_hosts: no such file or directory
Will be retried in 3s ...
解决:在/etc/gitlab-runner/config.toml添加:
[[runners]]
...
[runners.ssh]
disable_strict_host_key_checking = true
...
ERROR: Job failed (system failure): prepare environment: exit status 1. Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information
解决:
删除 /home/用户/.bash_logout
六、.gitlab-ci.yml范例:
# 指定使用的语言环境
image: debian:latest
stages:
- build
variables:
#项目统一放置deb的目录
LZOS_DIR: /home/openkylin/LZOS
build:
stage: build
script:
- echo "*************************************************** build ***************************************************"
- echo "LZOS_DIR:$LZOS_DIR"
#该工程的名字及路径
- project_name=`dpkg-parsechangelog --show-field Source`
- echo "project_name:$project_name"
- project_dir=$LZOS_DIR/$project_name
- echo "project_dir:$project_dir"
#该工程的路径不存在则创建
- if [ ! -d $project_dir ]; then mkdir $project_dir; fi
#现存最高版本,初始化为0
- latest_version="0"
- all_dir=`find $project_dir -type d -regex '.*/[0-9][^/]*$' -printf "%f\n"`
- for dir in $all_dir; do
version=$dir;
echo "version:$version";
get_version=`dpkg --compare-versions $version gt $latest_version && echo 1 || echo 0`;
if [ $get_version -eq 1 ]; then
latest_version=$version;
fi;
done
- echo "latest_version:$latest_version"
#获取debian目录下changelog文件中的版本号
- changelog_version=`dpkg-parsechangelog --show-field Version`
- echo "changelog_version:$changelog_version"
#比较changelog中的版本号和现存最高版本号,changelog_version大则输出1
- comparison_results=`dpkg --compare-versions $changelog_version gt $latest_version && echo 1 || echo 0`
- echo "comparison_results:$comparison_results"
#changelog版本号正确则编译,否则结束
- if [ $comparison_results -eq 1 ]; then
echo "*************************************************** Starting to debuild -b -us -uc***************************************************";
debuild -b -us -uc;
dir=$project_dir/$changelog_version;
if [ ! -d $dir ]; then
mkdir $dir;
echo "*************************************************** mkdir dir:$dir ***************************************************";
else
echo "*************************************************** dir:$dir is exist ***************************************************";
fi;
cd ../;
cp *.deb $dir;
echo "cp *.deb to path:$dir";
echo "*************************************************** build deb success ***************************************************";
else
echo "***************************** changelog_version($changelog_version) isNot greater than latest_version($latest_version) *****************************";
exit 10;
fi
#选择runner,注册runner时设置了tag,可用于不同平台服务器编译,arm,x86,linux,windows等
tags:
- test-tags
only:
- master
这里主要实现了读取changelog中的版本号与服务器中现存版本进行比较,如果编译的版本号大则继续编译。
还想加一个自动打tag的功能,后续再补充。。。。