gitlab和jenkins的安装及使用
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的安装及使用的更多相关文章
- gitlab+gerrit+jenkins持续集成框架
1.持续集成之gitlab+gerrit+jenkins 1.1. GitLab 1.1.1. 简介 GitLab 是一个使用使用Ruby on Rails搭建的,用于仓库管理系统的开源项目.使用Gi ...
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- gitlab与jenkins的自动化部署(通过webhook与ansilble)
gitlab与jenkins的自动化部署(通过webhook与ansilble) 1.部署介绍 gitlab服务器:192.168.1.49:80jenkins服务器:192.168.1.49:818 ...
- Jenkins的安装配置和使用
Jenkins的安装配置和使用 1 Jenkins介绍 w3cschool中这样介绍:Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个 ...
- 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: ...
- gitlab 与 jenkins 关联
一.搭建 gitlab :https://www.cnblogs.com/carriezhangyan/p/10729158.html 二.搭建jenkins :https://www.cnblogs ...
- 持续集成之④:GitLab触发jenkins构建项目
持续集成之④:GitLab触发jenkins构建项目 一:目的为在公司的测试环境当中一旦开发向gitlab仓库提交成功代码,gitlab通知jenkins进行构建项目.代码质量测试然后部署至测试环境, ...
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...
- 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 ...
随机推荐
- Oracle COALESCE函数
Oracle COALESCE函数 Oracle COALESCE函数语法为COALESCE(表达式1,表达式2,...,表达式n),n>=2,此表达式的功能为返回第一个不为空的表达式,如果都为 ...
- ZeroC ICE java异步实现方式(ami/amd)
首先说说ami 和amd 的区别(以下为个人见解,仅供参考.如有疑问欢迎提出来) ami (异步方法调用): 仅仅基于ice 的同步方式扩展了异步的扩展方式,其他理念改动不大,使用起来好理解,但是服务 ...
- 阶段3 3.SpringMVC·_05.文件上传_5 文件上传之跨服务器上传分析和搭建环境
使用这个jar包来跨服务器上传 搞两个tomcat.一个springmvc一个fileupload 选中tomcat server点击左边的加号 需要改端口和JMX pport这个端口 部署文件上传的 ...
- linux常用命令(18)find exec
find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了.-exec 参数后面跟的是command命令,它的终止是以 ...
- java:WebService
1.WebService就是应用之间的远程调用,可以跨语言调用,为甚么可以跨语言调用,是因为其实依赖与xml语言,xml语言依赖http协议,http协议底层也是socket.
- appium+python等待方式使用
背景: 首先,由于一个网速和手机性能以及服务器反应时间等等的原因,不可能导致我们点击了某一个元素之后,它所要链接的页面马上弹出来可以进行下一步操作.所以我们需要一种等待方式,直至链接的页面跳出来之后再 ...
- 重学Python - Day 07 - python基础 -> linux命令行学习 -- 常用命令 一
常用命令和使用方法如下: man man 命令 #可以查询命令的用法 cat 和 tac cat是正序显示文件内容 tac是倒叙显示文件内容 sort 对文件内容排序 uniq 忽略文件中重复行 hi ...
- Leetcode之动态规划(DP)专题-72. 编辑距离(Edit Distance)
Leetcode之动态规划(DP)专题-72. 编辑距离(Edit Distance) 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可 ...
- 【神经网络与深度学习】Google Snappy - 一个高速压缩库
Snappy已经被Google开源,作为一个压缩库,它可以利用单颗Intel Corei7处理器内核处理至少每秒250MB~500MB的数据流. Snappy的前身是Zippy.虽然只是一个数据压缩库 ...
- Java小知识----List复制:浅拷贝与深拷贝
原文地址: https://blog.csdn.net/demonliuhui/article/details/54572908 List浅拷贝 众所周知,list本质上是数组,而数组的是以地址的形式 ...