使用gitlab实现上线自动化

简介:

头脑风暴和总结:

  1. 用户: 所有的web服务,都应该使用普通用户启动。 所有的web服务都不应该监听80端口,除了负载均衡。(普通用户无法启动80端口,除非使用suid)

      useradd www  -u 2000  # 添加用户统一UID

      ssh-keygen -t rsa   # 生成认证的key,将公钥添加到分发机上


  2. 编写部署脚本需要注意的几个问题:

  • 脚本中使用多个方法,尽量使用含义明确的变量

  • 脚本要有lock 文件,防止并发造成问题

  • 脚本要有日志,出现错误时,知道执行到哪一步

  • 脚本的命令要有容错机制,防止输错命令带来灾难性后果

  • 先定义框架,再确定具体的内容

 

  3. 安装gitlab 并设置:

   https://www.unixhot.com/article/48 

  • 基础环境准备

[root@linux-node2 ~]# yum install curl policycoreutils openssh-server openssh-clients postfix[root@linux-node2 ~]# systemctl start postfix
  • 安装gitlab-ce

curl -sS https://packages.gitlab.com/in ... pm.sh | sudo bash[root@linux-node2 ~]# yum install -y gitlab-ce



注:由于网络问题,国内用户,建议使用清华大学的镜像源进行安装:


[root@linux-node2 ~]# vim /etc/yum.repos.d/gitlab-ce.repo[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.e ... m/el7repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key[root@linux-node2 ~]# yum makecache[root@linux-node2 ~]# yum install gitlab-ce
  • 配置并启动gitlab-ce

[root@linux-node2 ~]# gitlab-ctl reconfigure

可以使用gitlab-ctl管理gitlab,例如查看gitlab状态:

[root@linux-node2 ~]# gitlab-ctl status
run: gitlab-workhorse: (pid 12171) 231s; run: log: (pid 7817) 555s
run: logrotate: (pid 12175) 230s; run: log: (pid 7832) 548s
run: nginx: (pid 12181) 230s; run: log: (pid 7823) 549s
run: postgresql: (pid 12186) 229s; run: log: (pid 7683) 587s
run: redis: (pid 12194) 229s; run: log: (pid 7600) 592s
run: sidekiq: (pid 12198) 229s; run: log: (pid 7806) 558s
run: unicorn: (pid 14967) 6s; run: log: (pid 7774) 560s
关闭gitlab:[root@linux-node2 ~]# gitlab-ctl stop
启动gitlab:[root@linux-node2 ~]# gitlab-ctl start
重启gitlab:[root@linux-node2 ~]# gitlab-ctl restart


  • 第一次登录gitlab,需要为root用户修改密码,root用户也是gitlab的超级管理员。

  • 如果要修改仓库的默认显示路径需要修改gitlab 的配置文件:



1
2
3
vim   /etc/gitlab/gitlab .rb
 
external_url '   # 修改url路径名

修改之后需要重新配置gitlab:

1
  gitlab-ctl reconfigure

 

4.本地设置SSH-key之后可以创建项目,添加具体的信息。部署脚本执行流程:

  • 先判断锁文件是否存在,如果存在则打印提示信息,退出部署。

  • 如果锁文件不存在,说明当前没有其他人执行此脚本,根据输入的命令(deploy、rollback)来执行不同的命令;

  • 如果是deploy则执行,shell_lock:创建锁文件;然后执行code_get:获取代码库中的代码,通过writelog 函数写入日志,切换到代码目录,git pull下最新的代码,然后拷贝到tmp目录;执行code_bulid函数,写入日志; 执行code_config函数,记录日志,将配置文件目录下的文件整体拷贝到tmp目录下对应的项目中,之后对项目名称目录重命名为带有时间戳和版本号的新目录; 执行code_tar函数,写入对应的日志,并将整个项目打包为tar.gz的压缩包;执行code_scp函数,写入日志,分别使用scp 将打包的压缩包拷贝到预生产和生产组的所有远程服务器上;执行pre_deploy,预生产环境的部署,写入日志,通过ssh 远程连接到预生产主机,执行解压命令,然后删除旧的软链接,创建一个指向新版本的软链接。执行pre_test函数,对部署的代码进行测试,如web直接curl一下地址; 根据pre_deploy函数和pre_test相同的原理,对生产主机依次执行group_deploy和group_test函数,解压缩,创建软链接,测试。

  • 如果是rollback,先创建锁文件,执行rollback函数,如果rollback 后面没有输入参数,则提示后退出,如果有参数list ,则列出之前旧的版本信息,如果指定的是版本信息,则调用rollback_fun函数读取需要回滚的主机列表,删除旧的软链接,创建一个新的软链接。回滚完成。

 5.针对不同的项目使用不同的脚本,对不同的项目可以使用相同的脚本框架和思路。标准化规划需要在项目初期做好。




 本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1884795
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
Kubernetes 监控 jenkins
基于K8S实现代码自动化上线
基于K8S实现代码自动化上线
|
10月前
|
运维 前端开发 数据可视化
你所不知道的新技术,机器人全自动化开发并上线
一个新“技术”产品的发布,它可谓是软件行业里的神级作品,可以实现自动化编写程序与运维,它的能力不止能负责一个端(大家都知道现代的开发分组,都是分为前端、后端、测试、运维等)的工作,它可是“全栈工程师”,一个“人”可以搞定一个团队的工作,包括“后端开发、前端开发、测试、运维”。那它到底是谁?怎么这么厉害
124 0
|
自然语言处理 监控
创业公司自动化上线的架构设计
创业公司自动化上线的架构设计
139 0
创业公司自动化上线的架构设计
|
安全 Shell API
蜻蜓:GitLab结合fortify实现自动化代码扫描实践
在甲方做安全的同学可能会有一项代码审计的工作,通常需要从gitlab把代码拉取下来,然后使用代码审计工具进行扫描,然后对结果进行人工确认; 在这个流程中需要做的事情比较繁琐,比如说gitlab如何配置token、如何自动化把代码拉取到本地、如何调用fortify实现批量扫描等诸多繁琐问题。 本篇文章以甲方安全代码安全建设为主线,分享如何让代码审计工具自动化扫描gitlab仓库里的代码。并且提供了一个便捷的实验环境供大家测试。
499 0
蜻蜓:GitLab结合fortify实现自动化代码扫描实践
|
jenkins Java 持续交付
用Docker 搭建 Springboot + Jenkins + Gitlab 自动化发布系统的一系列问题
用Docker 搭建 Springboot + Jenkins + Gitlab 自动化发布系统的一系列问题
用Docker 搭建 Springboot + Jenkins + Gitlab 自动化发布系统的一系列问题
|
jenkins Linux Shell
iOS 底层原理38:自动化打包(二)Jenkins + GitLab 实现自动打包
iOS 底层原理38:自动化打包(二)Jenkins + GitLab 实现自动打包
1800 0
iOS 底层原理38:自动化打包(二)Jenkins + GitLab 实现自动打包
|
jenkins 持续交付 开发工具
Jenkins集成pipline流水线实现自动化上线(十五)
1.老项目改造实现pipline项目自动上线 1.1.通过jenkins获取流水线语法 1.1.1.获取从gitlab上拉取项目的语法 拉取gitlab上的代码可以通过jenkins获取流水线语法最后粘贴到脚本中 点击配置—高级项目选项—流水线—流水线语法
258 0
Jenkins集成pipline流水线实现自动化上线(十五)
|
存储 机器学习/深度学习 缓存
GitHub Actions 的机器学习推理上线,推进测试部署高度自动化
在看到最近新推出的 GitHub Actions 后,我的第一个想法是创建一个简单的示例项目,在这个项目中,我们“部署”一个使用了这个新特性的机器学习模型。当然,这不是一个“真正的部署”,但是可用此模型在存储库中测试你的模型,而不需要任何额外的编码。
|
安全 API 开发工具
jenkins+gitlab构建自动化集成
jenkins+gitlab构建自动化集成
4260 0

热门文章

最新文章