代码改变世界

gitlab持续集成,自动部署

2019-11-15 14:06  fengxiaofeng  阅读(5431)  评论(0编辑  收藏  举报
写这篇文章的目的是,实现提交代码到gitlab上的一个项目时,自动打包,并将包发布到另一台服务器上,重启tomat。如有问题,可以联系本人QQ:409838567
gitlab-ci,是基于gitlab和gitlab-runner实现持续集成。
gitlab、gitlab-runner安装在192.168.3.166上,需要将war包发布到192.168.3.167上。
 
1.安装gitlab
yum install gitlab-ce
注:如果用的是虚拟机,物理内存要大于1G,不然经常报502错误
如果不会可以百度怎么安装gitlab
1.1配置端口
vi /etc/gitlab/gitlab.rb 
#修改gitlab的访问ip和端口,ip用本机
external_url 'http://192.168.3.166:8099'
#重启gitlab
gitlab-ctl reconfigure
 
2.安装gitlab-runner
2.1 下载执行文件
sudo wget -O/usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
2.2 设置执行权限
sudo chmod +x /usr/local/bin/gitlab-runner
2.3 创建 GitLab CI 用户
useradd --comment 'GitLab Runner'--create-home gitlab-runner --shell /bin/bash
2.4 运行服务
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
gitlab-runner start
 
3.gitlab-runner 注册
打开 gitlab 项目 -> Settings -> CI / CD -> Runners settings
 
可以看到gitLab URL和token,在下面注册会用到
运行注册
sudo gitlab-runner register
输入你的 GitLab URL
Please enter the gitlab-ci coordinator URL(e.g. https://gitlab.com )
https://192.168.3.166:8099(输入上图的url)
输入 注册令牌 来注册 Runner
Please enter the gitlab-ci token forthis runner
xxx(输入上图的token)
输入 Runner 说明
Please enter the gitlab-ci description forthis runner
[hostame] my-runner
输入 Runner 的 tags
Please enter the gitlab-ci tags forthisrunner(comma separated):
my-tag,another-tag
输入 Runner 执行方式,这里选择shell
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell
 
到这一步gitlab和gitlab-runner就配置好了
 
4. 创建一个web项目,上传到gitlab,新建一个.gitlab-ci.yml
.gitlab-ci.yml文件内容如下
stages:
- build
build:
  stage: build
  script:
  #mvn 打包
- mvn clean package-Dmaven.test.skip=true
  #将war包拷贝到另外一台服务器
- scp /home/gitlab-runner/builds/f0e79179/0/root/demo/target/demo-0.0.1-SNAPSHOT.war root@192.168.3.167:/data/www/demo-0.0.1-SNAPSHOT.war
  #连接tomcat的服务器,执行deploy.sh,将war包拷贝到webapps下面,重启tomcat
- ssh root@192.168.3.167"sh /apps/shell/deploy.sh"
  only:
- test
- master
当代码提交到test或master分支时,会执行script内的脚本。
 
deploy.sh
根据需求自己修改
#!/bin/bash
#defined
exportJAVA_HOME="/usr/local/jdk1.8.0_231/"
exportTOMCAT_HOME="/apps/apache-tomcat-8.5.43/"
 
PID=`ps -ef | grep java | grep apache-tomcat-8.5.43 | awk '{print $2}'`
echo $PID
echo "kill tomcat"
kill -9 $PID
echo "remover jarfile"
cd "$TOMCAT_HOME"/webapps
rm -rf demo*
echo "copy jar to tomcat webapp"
cp /data/www/demo*.war "$TOMCAT_HOME"/webapps/demo.war
cd "$TOMCAT_HOME"/bin
echo "start tomcat"
./startup.sh
 
问题:gitlab-runner 无法 scp到远程服务器的问题,scp时,需要输入目标主机的密码,所以要将当前机器的公钥,加入到目标机器的keys里面
1). 连接3.166
2). 切换到gitlab-runner用户
    su gitlab-runner
3). 生成公私钥
    ssh-keygen
4). 复制3.166的公钥到3.167
    scp /home/gitlab-runner/.ssh/id_rsa.pub root@192.168.3.167:/home/id_rsa.pub
5). 连接3.167
6). 将公钥追加到keys后面
    cat /home/id_rsa.pub >>~/.ssh/authorized_keys