gitlab软件版本需要从GitLab Community Edition 8.9.11升级到GitLab Community Edition 12.10.11,记录下本次升级所做的改动以及遇到的坑。
涉及到的各个服务见下图:
1. 版本跨度太大,没有采用软件更新升级的方式;同样也没有采用备份/还原的方式。
2. 安装部署了一新的gitlab服务器,从旧gitlab服务器迁移项目到新gitlab服务器。
3. 更新"通过API方式访问gitlab"的认证方式和接口版本
- api接口版本从v3升级到v4
- 认证方式从"private token"切换成“Impersonation Token”
- 改动代码
访问gitlab服务的第三方库,是用的 "github.com/xanzy/go-gitlab",golang的库管理用的是dep,需要更新库版本
到工程项目的目录下,修改Gopkg.toml
[[constraint]]
name = "github.com/xanzy/go-gitlab"
version = "0.30.0"
然后执行 dep ensure
4. Jenkins凭据以及ssh公钥拷贝到gitlab服务器
将jenkins服务器上的ssh公钥拷贝到新部署的gitlab服务器某个用户名下,注意,这个公钥关联的gitlab用户,有访问哪个组或者哪个项目的权限,jenkins服务器才可以git clone相关项目的代码。
新配置凭据
5. 修改原有的jenkins job配置
考虑到将来还有可能升级、迁移gitlab服务器,统一用域名:git.xxx.com的方式部署访问gitlab;后续,只需要运维更改域名解析,就可以平滑迁移到新部署的gitlab服务器。
这样就需要修改已经在构建部署中的jenkins jobs,将原来的gitlab ip地址替换成现有的域名。由于涉及的项目众多,手工改工作量大,查询了些资料,通过下面的脚本可以实现。
#!/bin/bash
mydir=`pwd`
jobdir='jobs'
rootdir='/root/.jenkins/jobs/'
jenkinsclijar='/opt/jenkins/jenkins-cli.jar'
cd $rootdir
for proName in *
do
if [ $proName != "basic-service-stable" ] && [ $proName != "ccp" ] && [ $proName != "base" ]; then
cd $rootdir
cd $proName
echo "do modify gitlab ip(192.168.1.249) to git.xxx.com in project" $proName
if [ -d $jobdir ]; then
cd ./$jobdir
echo 'current dir is '`pwd`
echo "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"
for job in *
do
if [ $job != "xxx-test" ]; then
confxml=$job/config.xml
if [ -e $confxml ]; then
echo "modify job xml: "$confxml
sed -i 's/192.168.1.249/git.xxx.com/' $confxml
java -jar $jenkinsclijar -s http://192.168.104.179:8080/ -auth admin:adminxxx reload-job $proName/$job
fi
fi
done
fi
fi
echo "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"
done
cd $mydir