写这篇文章的目的是,实现提交代码到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

gitlab持续集成,自动部署的更多相关文章

  1. CentOS 7 Gitlab+Jenkins持续集成+自动化部署

    基于上次的环境<部署Gitlab+Jenkins持续集成环境> 来实现自动化部署 系统管理–>插件管理–>安装以下插件: Credentials Plugin(默认已经安装) ...

  2. 【iOS】Jenkins Gitlab持续集成打包平台搭建

    Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点: ...

  3. Linux-GitLab+Jenkins持续集成+自动化部署

    GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...

  4. ThoughtWorks开发持续集成及部署利器:Go

    持续集成及部署利器:Go   Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发.(不要和Google的编程语言Go混淆了!)其前身为Cruise,是ThoughtWorks在做咨 ...

  5. .NET Core 从 Github到 Nuget 持续集成、部署

    一.前言 Nuget 作为一个.NET研发人员,我想你都不会陌生,他为我们提供非常方便的程序包管理,不管是版本,还是包的依赖都能轻松应对,可以说是我们的好助手.而 Nuget 除了官方nuget.or ...

  6. 03 持续集成和部署/基础设施 - DevOps之路

    02 持续集成和部署/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi 服务的持续集成和部署这里有两套 ...

  7. vsts + XX云服务器构建netcore+docker持续集成交付部署

    持续集成交付部署是什么意思,它给我们带来什么好处? 先贴一张图 持续集成(Continuous Integration) 持续集成强调开发人员提交了新代码之后,立刻进行构建.(单元)测试(这个要看情况 ...

  8. 持续集成①安装部署jenkins从git获取代码

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  9. 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境

    作者 | 存诚 阿里云弹性计算团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  10. Linux环境:持续集成环境部署系列

    之前的博客介绍了Linux环境下持续集成环境部署的一些内容,这篇博客将其整理一下,算做一个index,方便自己和大家查阅... 1.linux下安装JDK Jenkins是一个java开源的持续集成工 ...

随机推荐

  1. HDU_5058_set

    http://acm.hdu.edu.cn/showproblem.php?pid=5058 set容器的使用,set中保持元素的唯一性和有序性. 也可以用排序加离散化来模拟. #include< ...

  2. WeChall_Training: Programming 1 (Training, Coding)

    When you visit this link you receive a message.Submit the same message back to http://www.wechall.ne ...

  3. Eclipse导入项目提示No projects are found to import解决办法

    使用Eclipse导入项目时遇到No projects are found to import提示的解决办法. 这是因为导入的文件里面缺少两个文件:.classpath.project 在这里三种方案 ...

  4. 题解 SP1716 【GSS3 - Can you answer these queries III】

    \[ Preface \] 没有 Preface. \[ Description \] 维护一个长度为 \(n\) 的数列 \(A\) ,需要支持以下操作: 0 x y 将 \(A_x\) 改为 \( ...

  5. 【Debian】 Debian 安装源配置

    Debian 安装源配置 所有的Linux安装完后第一件事,就是要更新安装源 安装源是什么呢,安装源又称软件源,是指把软件的安装源地址放在一个pool里面,用一条命令(比如apt-get instal ...

  6. stm32f407使用Keil uV5建立工程日志

    目录结构 Common           ——包括延时函数等公用函数 STM32F4_FWLIB     ——固件库 Project             ——UV5工程相关文件 Main     ...

  7. LVM 逻辑卷 (logica volume manager)

    逻辑卷轴管理员 (Logical Volume Manager) 想像一个情况,你在当初规划主机的时候将 /home 只给他 50G ,等到使用者众多之后导致这个 filesystem 不够大, 此时 ...

  8. [HTML5] input标签 disable属性

    <span>服务器名称:<input type="text" name="server_name" placeholder="服务器 ...

  9. C语言基础五 数组的应用

    .根据用户输入的10人成绩并将其保存到数组中,求最高成绩,最低成绩和平均成绩 int scoure[10];//存储10个数据的数组 int i; int sum;//总成绩 int max,min, ...

  10. 编译Qualcomm的Hexagon exampls错误

    在下载了Qualcomm的Hexagon SDK 351版本之后,想跑里面的examples,然后参照文档的说,比如在examples/common/sobel3x3_v60目录下面,先执行了SDK根 ...