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 ...
随机推荐
- python3将汉字转换为大写拼音首字母
利用pypinyin包 实现 import pypinyin a = pypinyin.pinyin('你好世界', style=pypinyin.FIRST_LETTER) b = [] for i ...
- java源码-ConcurrentHashMap分析-1
ConcurrentHashMap源码分析 版本jdk8 摈弃了jdk7之前的segement段锁: 首先分析一下put方法,大致的流程就是首先对key取hash函数 判断是否first节点是否存在 ...
- 系统启动热键(Boot Hotkey)
1.HP ENVY 13 F1 --> 系统信息F2 --> 系统检测F9 --> 启动设备选项F10 --> 设置BIOSF11 --> 系统恢复ENTER --> ...
- 【转】jstat命令查看jvm的GC情况 (以Linux为例)
[From]https://www.cnblogs.com/yjd_hycf_space/p/7755633.html jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: ...
- jdk1.8-Vector
一:先看下类的继承关系 UML图如下: 继承关系: ))) ))) grow(minCapacity)) ? ) newCapacity = minCapacity) ) , elementData, ...
- 【ABAP系列】SAP Smartforms 设置纸张打印格式
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP Smartforms 设 ...
- C#编程 XML文档
XML 指可扩展标记语言,XML 被设计用来传输和存储数据.XML 被设计用来结构化.存储以及传输信息. xml文档展示 <?xml version="1.0" encodi ...
- jvm的学习笔记:二、类的初始化,代码实战(2)
常量在编译阶段,会存在调用这个常量的方法的所在的类的常量池当中 System.out.println(MyParent2.str); 输出: hello parent2 依据:在MyTest2类调用M ...
- 用户及用户组管理(week1_day4)
本节内容 useradd userdel usermod groupadd groupdel 用户管理 为什么需要有用户? 1. linux是一个多用户系统 2. 权限管理(权限最 ...
- Linux C/C++基础——文件(上)
1.文件指针 FILE* fp=NULL; fp指针,只调用了fopen(),在堆区分配空间,把地址返回给fp fp指针不是指向文件,fp指针和文件关联,fp内部成员保存在文件的状态 操作fp指针,不 ...