gitlab

准备: 最少4G内存

先安装docker软件包
然后使用docker search gitlab 查找镜像
然后使用docker pull 镜像名:标签名 下载镜像
启动容器: docker run -d -h gitlab --name gitlab -p443:443 -p80:80 -p22:22 --restart always -v /src/gitlab/config:/etc/gitlab -v /src/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest
使用 docker ps 查看 直到看到(healthy)才算成功

使用谷歌登陆数组机的ip 就能看到gitlab页面
设置密码,密码必须8位

gitlab关键概念:
(1) 群组group: 可以为一个团队创建一个group
(2) 成员member, 可以为一个用户创建一个账号,可以group中的一个成员
(3) 项目project, 一个团队可以开发很多项目

创建项目及用户
步骤:
(1) 创建名为devops的group
群组路径: http://192.168.4.1/devops
群组名称: devops
可见等级:公开
4、创建用户
添写姓名、用户名、电子邮箱,其他保持默认
创建用户的时候,不能设置密码。用户创建完毕后,编辑用户,可以修改密码。
(2) 创建名为myproject的项目
项目路径:http://192.168.4.1/devops/myproject
可见等级:公开
(3) 授权:允许新建的用户对项目有写入权限
找到项目后,点击左下角的“设置” -> “成员”
选择要邀请的成员:第4步创建用的用户
选择角色权限:主程序员
(4) 配置新建用户可以免密推送代码
(1) 退出root用户
(2) 使用新建帐号登陆,用户第一次登陆,需要修改密码
(3) 点击右上角用户图标 -> 设置 -> 点击左下角ssh密钥
ssh-keygen -t rsa -C "15867630863@163.com" -b 4096 cat /root/.ssh/id_rsa.pub
# 把公钥内容复制web页面中的ssh密钥文本框中
到此为止,gitlab 服务大功告成!!!

使用:
mkdir project 先创建一个文件夹, git init 创建一个版本库
git remote rename origin old-origin
以下错误可忽略:
error: 不能重命名配置小节 'remote.origin' 到 'remote.old-origin'
git remote add origin git@192.168.4.1:devops/myproject.git
# git push -u origin --all
如果推送失败,错误中有一项显示Permission denied,解决办法是:
执行eval $(ssh-agent) #把后面一个命令结果给前面执行
git push -u origin --all # 再次推送
再次推送

代码有更新,推送新代码到服务器
[root@node3 myproject]# echo 'how are you?' > welcome.txt
[root@node3 myproject]# git add .
[root@node3 myproject]# git commit -m "add welcome.txt"
git push 上传

错误集: 没有改sshd端口 导致端口冲突无法启动容器 端口冲突!!!
报错信息如下: error: Bind to port 2222 on 0.0.0.0 failed: Permission denied.
May 22 22:11:32 localhost.localdomain sshd[31560]: error: Bind to port 2222 on :: failed: Per
May 22 22:11:32 localhost.localdomain sshd[31560]: fatal: Cannot bind any address.

                                                      jenkins

创建一个虚拟机(必须能连接外网)

先在jenkins官网上下载安装包: https://pkg.jenkins.io/redhat/ (最好提前下载,下载的贼慢~)

最好下载2.138.4以上的否则会报一下错误 :
警告:此插件需要依赖插件,这些插件需要Jenkins 2.138.4或更高版本。Jenkins将拒绝加载需要更新版本Jenkins的依赖插件,反过来加载此插件将失败。

rpm -ivh jenkins-2.178-1.1.noarch.rpm

systemctl restart jenkins    #启动金克斯

然后使用浏览器访问,192.168.1.162:80 (我用的是谷歌浏览器)

按向导初始化。其中安装插件时,什么也不要选择。“选择插件来安装” -> “无”
“创建第一个管理员”界面,选择右下角“使用admin账号登陆” -> 保存并完成
进入管理页面后,点击右上角的admin -> 左侧的设置 -> 修改密码

安装插件:

  (1) 使用国内镜像

  首页 -> 系统管理 -> 插件管理 -> 高级 -> 升级站点:
  https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  -> 提交
  (2) 安装插件
  可选插件 -> git parameter -> 直接安装 -> 安装完成后重启Jenkins(空闲时)
  (3) 在jenkins服务器上安装git
  ]# yum install -y git

  (4)如果在线安装不上,可以先下载,下载网址是:
  http://updates.jenkins-ci.org/download/plugins/git-parameter/
  下载后,在首页 -> 系统管理 -> 插件管理 -> 高级 -> 上传插件

上线流程:
1、程序员编写代码
]# git init /tmp/myweb
]# cd /tmp/myweb
]# echo '<h1>Hello World</h1>' > index.html
]# git add .
]# git commit -m "myweb version 1.0"   (如果没有验证用户则需要验证: git config --global user.email "邮箱地址@163.com" && git config --global user.name "你的名字")
]# git tag 1.0 # 标记此时的版本号为1.0版本
]# git tag # 查看版本

1.0

1.0开发完毕后,继续开发新版本
[root@room8pc16 myweb]# echo '<h2>my web 2.0</h2>' >> index.html
[root@room8pc16 myweb]# git add .
[root@room8pc16 myweb]# git commit -m "my web 2.0"
[root@room8pc16 myweb]# git tag 2.0 # 标记此时的版本号为2.0版本

2、代码推送到gitlab服务器
(1) 启动gitlab服务器  
(2) 在名为devops的group下创建项目myweb,可见等级为公开      #找不到的时候可以点上面那个扳手~
(3) 在myweb项目中授权用户是主程序员角色


(4) 上传代码到gitlab服务器


]# cd /tmp/myweb/
# git remote rename origin old-origin
如果出现以下报错,可以忽略
error: 不能重命名配置小节 'remote.origin' 到 'remote.old-origin'
# git remote add origin http://192.168.4.1/devops/myweb.git
# git push -u origin --all # 推送所有的确认
# git push -u origin --tags # 推送所有的tag

3 jenkins拉取gitlab上的代码

创建自由风格的软件项目 -> 参数化构建过程 -> 添加参数选git parameter

-> name: webver, parameter type: tag, Default Value: origin/master
-> 源码管理 -> Repository URL: http://192.168.4.1/devops/myweb.git
-> Branches to build: $webver ->保存
执行工程,拉取代码:Build with Parameters -> 选择1.0后构建
-> 左下角的Build History,成功显示蓝球,失败是红球
4、查看拉取下来的代码:
]# ls /var/lib/jenkins/workspace/

5、为了方便应用服务器从jenkins上把代码下载过去,在jenkins上安装apache,把
从gitlab上拉取的代码放到apache中用于下载
~]# yum install -y httpd
~]# systemctl start httpd
~]# systemctl enable httpd
6、创建apache目录
/var/www/html/deploy: 存储版本文件
/var/www/html/deploy/live_ver:最新版本文件
/var/www/html/deploy/last_ver:前一个版本文件
/var/www/html/deploy/packages/: 存储压缩后的软件包和它的md5值
~]# mkdir -p /var/www/html/deploy/packages/
~]# chown -R jenkins:jenkins /var/www/html/deploy/

7、修改jenkins工程
(1) 将check out的版本放到子目录中
在源码管理下面,Additional Behaviours -> check out to a sub-directory
-> Local subdirectory for repo: myweb-$webver
# ls /var/lib/jenkins/workspace/myweb/
(2) 将软件打包放到apache相关目录下
构建 -> 增加构建步骤 -> 执行shell
deploy_dir=/var/www/html/deploy
cp -r myweb-$webver $deploy_dir/packages/
cd $deploy_dir/packages
rm -fr myweb-$webver/.git
tar czf myweb-$webver.tar.gz myweb-$webver
rm -rf myweb-$webver
md5sum myweb-$webver.tar.gz | awk '{print $1}' > myweb-$webver.tar.gz.md5
cd $deploy_dir
[ -f live_ver ] && cat live_ver > last_ver
echo $webver > live_ver

在应用服务器上部署软件
1、检查是否有新版本
如果本地没有版本文件,或本地版本比jenkins上的版本低
2、有新版本则下载相应的压缩包
3、校验压缩包,检查下载的压缩包是否损坏
4、如果压缩包没有损坏,则部署
将压缩包解压到deploy目录下,创建到解压目录的链接
5、路径规划
/var/www/download/: 存储下载的压缩包和md5文件
/var/www/deploy/: 存储live_ver和解压后的软件目录

jenkins自动化部署:

[root@jump linux]# cat deploy_app.py
import requests
import wget
import os
import hashlib
import tarfile

def has_new_ver(ver_fname, ver_url):
# 如果本地没有版本文件,表示有新版本
if not os.path.isfile(ver_fname):
return True

# 读取本地版本文件内容
with open(ver_fname) as fobj:
local_ver = fobj.read()

# 获取远程版本
r = requests.get(ver_url)
remote_ver = r.text

# 如果本地和远程版本不一样,表示有新版本
if local_ver != remote_ver:
return True

# 如果本地和远程版本一样,则没有新版本
return False

def has_error(fname, md5_url):
# 计算本地文件的md5
m = hashlib.md5()
with open(fname, 'rb') as fobj:
while True:
data = fobj.read(4096)
if not data:
break
m.update(data)
r = requests.get(md5_url) # 取出服务器公布的md5值
if m.hexdigest() == r.text.strip():
return False # 如果两个md5值相等,表示文件未损坏

return True

def deploy(app_fname):
# app_fname: /var/www/download/myweb-1.0.tar.gz
# 解压缩
deploy_dir = '/var/www/deploy/'
tar = tarfile.open(app_fname, 'r:gz')
tar.extractall(path=deploy_dir)
tar.close()
# 拼出解压目录的绝对路径
app_path = os.path.basename(app_fname) # myweb-1.0.tar.gz
app_path = app_path.replace('.tar.gz', '') # myweb-1.0
app_path = os.path.join(deploy_dir, app_path)
# 创建链接,如果链接已存在,先删除它
link = '/var/www/html/nsd1811'
if os.path.exists(link):
os.remove(link)
os.symlink(app_path, link)

if __name__ == '__main__':
# 检查是否有新版本
app_dir = '/var/www/download/'
ver_fname = '/var/www/deploy/live_ver'
ver_url = 'http://192.168.4.4/deploy/live_ver'
if not has_new_ver(ver_fname, ver_url):
print('没有发现新版本')
exit(1)
# 如果有新版本,则下载
r = requests.get(ver_url)
ver = r.text.strip() # 获取服务器上的版本号
app_url = 'http://192.168.4.4/deploy/packages/myweb-%s.tar.gz' % ver
wget.download(app_url, app_dir)
# 校验下载的压缩包是否损坏
app_fname = app_url.split('/')[-1]
app_fname = os.path.join(app_dir, app_fname) # 拼接压缩包的绝对路径
md5_url = app_url + '.md5' # 拼出md5值的网址
if has_error(app_fname, md5_url):
print('文件已损坏')
os.remove(app_fname) # 如果文件已扣坏,则删除它
exit(2)
# 如果下载的文件是完好的,则部署
deploy(app_fname)
# 更新本地版本文件
with open(ver_fname, 'w') as fobj:
fobj.write(r.text)

gitlab和jenkins的安装及使用的更多相关文章

  1. gitlab+gerrit+jenkins持续集成框架

    1.持续集成之gitlab+gerrit+jenkins 1.1. GitLab 1.1.1. 简介 GitLab 是一个使用使用Ruby on Rails搭建的,用于仓库管理系统的开源项目.使用Gi ...

  2. [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...

  3. gitlab与jenkins的自动化部署(通过webhook与ansilble)

    gitlab与jenkins的自动化部署(通过webhook与ansilble) 1.部署介绍 gitlab服务器:192.168.1.49:80jenkins服务器:192.168.1.49:818 ...

  4. Jenkins的安装配置和使用

    Jenkins的安装配置和使用 1 Jenkins介绍 w3cschool中这样介绍:Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个 ...

  5. Jenkins自动构建gitlab项目(jenkins+maven+giltlab+tomcat)

    环境准备: System:CentOS 7.3 (最小化安装) JDK: 8u161 (1.8_161) tomcat: 8.5.29 Jenkins: Jenkins 2.107.1 Gitlab: ...

  6. gitlab 与 jenkins 关联

    一.搭建 gitlab :https://www.cnblogs.com/carriezhangyan/p/10729158.html 二.搭建jenkins :https://www.cnblogs ...

  7. 持续集成之④:GitLab触发jenkins构建项目

    持续集成之④:GitLab触发jenkins构建项目 一:目的为在公司的测试环境当中一旦开发向gitlab仓库提交成功代码,gitlab通知jenkins进行构建项目.代码质量测试然后部署至测试环境, ...

  8. CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...

  9. docker下运行Gitlab CE+Jenkins+Nexus3+docker-registry-frontend

    DevOps - Gitlab CE - Jenkins - Nexus Gitlab CE https://hub.docker.com/r/gitlab/gitlab-ce/ https://do ...

随机推荐

  1. body和document的梗

    http://bbs.zhinengshe.com/thread-1199-1-1.html 1. 在空白的页面加点击事件,是加在body上么 ? <!DOCTYPE html> < ...

  2. python中的set集合

    当使用爬虫URL保存时,一般会选择set来保存urls,set是集合,集合中的元素不能重复,其次还有交集,并集等集合的功能, 爬虫每次获取的网页中提取网页中的urls,并保存,这就需要利用urls = ...

  3. 关于js中断ajax请求

    停止javascript的ajax请求,一种是设置超时时间让ajax自动断开,另一种为手动去停止ajax请求,其核心是调用XMLHttpRequest对象上的abort方法,这里,我们以jquery举 ...

  4. ASP.NET(C#) 面试总结面试题大全

    一.对于 Web 性能优化,您有哪些了解和经验吗?出现指数:五颗星主要考点:这道题是博主在博客园的新闻里面看到的,回想之前几年的面试经历,发现此题出现概率还是比较高的.因为它的考面灰常广,可以让面试官 ...

  5. 【OpenJ_Bailian - 2790】迷宫(bfs)

    -->迷宫  Descriptions: 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不 ...

  6. 通俗易懂的lambda表达式,不懂来找我!

    lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多.这里,我们通过阅读各方资料,总结了关于Python ...

  7. classmethod自己定制

    # # 利用描述符原理定义一个@classmethod # class ClassMethod: # def __init__(self,func): # self.func = func # def ...

  8. 华为HCNA乱学Round 5:华为交换机基础

  9. 【Linux】linux设备驱动归纳总结

    前言: (总结已经基本写完,这段时间我会从新排版和修正.错误总会有的,望能指正!) 前段时间学习了嵌入式驱动,趁着没开始找工作,这段时间我会每天抽出时间来复习. 我的总结是根据学习时的笔记(李杨老师授 ...

  10. elasticsearch 查询所有文档

    0.添加一个索引 curl -i -XPUT http://172.31.250.16:10004/test_index/user/1 -d '{ "name": "小明 ...