gitlab+jenkins安装与配置(拆分成 git jenkins)
介绍 Gitlab、Jenkins 安装与配置,让代码快速提交与发布。
安装gitlab依赖库
sudo yum install -y curl policycoreutils-python openssh-server postfix
如果需要邮件提醒需要安装postfix
systemctl start postfix
使用清华源安装gitlab-ce
sudo vim /etc/yum.repos.d/gitlab-ce.repo
添加如下内容
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/elreleasever/
gpgcheck=0
enabled=1
保存退出
sudo yum makecache
sudo yum install gitlab-ce
修改gitlab地址
修改 /etc/gitlab/gitlab.rb
把 external_url
sed -i 's/gitlab.example.com/192.168.1.18' etc/gitlab/gitlab.rb
TIP
使用sudo EXTERNAL_URL="http://192.168.1.18" yum install -y gitlab-ce
安装会比较慢
配置gitlab
所有和配置相关的都需要修改/etc/gitlab/gitlab.rb
文件然后再通过命令gitlab-ctl reconfigure
重新生成配置文件.
修改gitlab SSH_PORT
因为修改了本地的ssh 端口,所以需要修改/etc/gitlab/gitlab.rb
gitlab_rails['gitlab_shell_ssh_port'] = 10222
将上面的端口修改为实际端口号即可.
邮件配置
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'xjh@xujianhui.cn'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.mxhichina.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xjh@xujianhui.cn"
gitlab_rails['smtp_password'] = "你的邮箱登录密码"
gitlab_rails['smtp_domain'] = "mxhichina.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
这里有两个注意点:
如果开启了tls端口就是465,没有开启tls加密端口就是25
smtp_user_name
和gitlab_email_from
必须配置为一样的,不然报错Net::SMTPServerBusy (440 mail from account doesn’t conform with authentication (Auth Account:xjh@xujianhui.cn|Mail Account:gitlab@xujianhui.cn))
下面是测试邮件配置是否正常的命令:
sudo gitlab-rails console再输入Notify.test_email('xjh@xujianhui.cn', 'gitlab mail test', 'this is a test massage from gitlab').deliver_now
-------------------------------------------------------------------------------------
GitLab: 11.8.1 (657d508)
GitLab Shell: 8.4.4
postgresql: 9.6.11
-------------------------------------------------------------------------------------
Loading production environment (Rails 5.0.7.1)
irb(main):001:0>
irb(main):001:0>
irb(main):001:0>Notify.test_email('xjh@xujianhui.cn', 'gitlab mail test', 'this is a test massage from gitlab').deliver_now
下面是输出信息
irb(main):002:0> Notify.test_email('xjh@xujianhui.cn', 'gitlab mail test', 'this is a test massage from gitlab').deliver_now
Notify#test_email: processed outbound mail in 2.3ms
Sent mail to xjh@xujianhui.cn (385.5ms)
Date: Sun, 10 Mar 2019 21:41:08 +0800
From: gitlab <xjh@xujianhui.cn>
Reply-To: gitlab <noreply@192.168.1.18>
To: xjh@xujianhui.cn
Message-ID: <5c8513f4cb00e_60753fd5257dc5f089d0@gitlab.mail>
Subject: gitlab mail test
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>this is a test massage from gitlab</p></body></html>
=> #<Mail::Message:70184346831780, Multipart: false, Headers: <Date: Sun, 10 Mar 2019 21:41:08 +0800>, <From: gitlab <xjh@xujianhui.cn>>, <Reply-To: gitlab <noreply@192.168.1.18>>, <To: xjh@xujianhui.cn>, <Message-ID: <5c8513f4cb00e_60753fd5257dc5f089d0@gitlab.mail>>, <Subject: gitlab mail test>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>
irb(main):003:0>
这样表明发送成功,登录你的邮箱查看是否有新邮件.
gitlab常用命令
gitlab-ctl stop|start|restart|status|reconfigure
打开http://192.168.1.18
会提示你修改root的密码,然后用user:root password:xxxxxx
登录即可。
setting里可以设置中文
备份与恢复
gitlab备份
建议本地保存3天,异地永久保存
修改 /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/data/gitlab/" 备份的路径
gitlab_rails['backup_keep_time'] = 604800 7天
重新生成配置文件
sudo gitlab-ctl reconfigure
建立备份文件存储目录并将属主设置成git
sudo mkdir -p /data/gitlab
sudo chown -R git.git /data/gitlab
将备份任务添加到crontab中
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create
还可以选择/var/opt/gitlab/git-data/
里的文件进行配置,但一些权限关系会丢失,需要自行建立相关权限
gitlab恢复
先停止如下两个服务(重要)
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1552218977
这里的时间是备份时的时间戳
date -d @1552218977
可显示为当前时间
gitlab界面操作
关闭注册功能
在gitlab上创建group(如python组)—–>创建项目(如app01)—->将成员添加到项目中
如果将成员添加到group中,则组中的成员会看到所有分配给group组的所有项目,如果是将成员添加到项目中,则此成员只能看到当前项目,而不是拥有查看所有项目的权限.
给每个成员生成秘钥
ssh-keygen -t rsa -b 4096
并放置公钥在gitlab上.gitlab master仓库默认是保护状态,不允许开发者身份提交.建议
master
的Allowed to merge Allowed to push
都设置为maintainers
,这样dev账号就不能直接push以及merge,只能在gitlab界面提交合并请求,否则会报错GitLab: You are not allowed to push code to protected branches on this project
.
部署Deploy Keys,其只能下载代码不能上传代码,适用于jenkins
可以通过建立里程碑来分配任务,可以通过
git commit -m "close #2"
直接关闭里程碑里的issue
下面附上操作的图片:
Git常用操作命令
远程仓库相关命令
- 检出仓库:
git clone git://github.com/jquery/jquery.git
- 查看远程仓库:
git remote -v
- 添加远程仓库:
git remote add [name] [url]
- 删除远程仓库:
git remote rm [name]
- 修改远程仓库:
git remote set-url --push [name] [newUrl]
- 拉取远程仓库:
git pull [remoteName] [localBranchName]
- 推送远程仓库:
git push [remoteName] [localBranchName]
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下 :
git push origin test:master
// 提交本地test分支作为远程的master分支
git push origin test:test
// 提交本地test分支作为远程的test分支
分支(branch)操作相关命令
- 查看本地分支:
git branch
- 查看远程分支:
git branch -r
- 创建本地分支:
git branch [name]
----注意新分支创建后不会自动切换为当前分支 - 切换分支:
git checkout [name]
- 创建新分支并立即切换到新分支:
git checkout -b [name]
- 删除分支:
git branch -d [name]
---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项 - 合并分支:
git merge [name]
----将名称为[name]的分支与当前分支合并 - 创建远程分支(本地分支push到远程):
git push origin [name]
- 删除远程分支:
git push origin :heads/[name] 或 gitpush origin :[name]
- 创建空的分支:(执行命令之前记得先提交你当前分支的修改,否则会被强制删干净没得后悔)**
git symbolic-ref HEAD refs/heads/[name]
rm .git/index
git clean -fdx
版本(tag)操作相关命令
- 查看版本:
git tag
- 创建版本:
git tag [name]
- 删除版本:
git tag -d [name]
- 查看远程版本:
git tag -r
- 创建远程版本(本地版本push到远程):
git push origin [name]
- 删除远程版本:
git push origin :refs/tags/[name]
- 合并远程仓库的tag到本地:
git pull origin --tags
- 上传本地tag到远程仓库:
git push origin --tags
- 创建带注释的tag:
git tag -a [name] -m 'yourMessage'
子模块(submodule)相关操作命令
- 添加子模块:
git submodule add [url] [path]
如:git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
- 初始化子模块:
git submodule init
----只在首次检出仓库时运行一次就行 - 更新子模块:
git submodule update
----每次更新或切换分支后都需要运行一下 - 删除子模块:(分4步走哦)
git rm --cached [path]
- 编辑
“.gitmodules”
文件,将子模块的相关配置节点删除掉 - 编辑
“ .git/config”
文件,将子模块的相关配置节点删除掉 - 手动删除子模块残留的目录
忽略一些文件、文件夹不提交
在仓库根目录下创建名称为“.gitignore”
的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如下:
Maven
target/
../target
target/*
*.class
*.ser
*.ec
.idea/
out/
*.ipr
*.iws
*.iml
.classpath
.project
.settings/
.metadata/
.DS_Store
Git常用命令汇总
git branch 查看本地所有分支
git status 查看当前状态
git commit 提交
git branch -a 查看所有的分支
git branch -r 查看本地所有分支
git commit -am "init" 提交并且加注释
git remote add origin git@192.168.1.119:ndshow
git push origin master 将文件给推到服务器上
git remote show origin 显示远程库origin里的资源
git push origin master:develop
git push origin master:hb-dev 将本地库与服务器上的库进行关联
git checkout --track origin/dev 切换到远程dev分支
git branch -D master develop 删除本地库develop
git checkout -b dev 建立一个新的本地分支dev
git merge origin/dev 将分支dev与当前分支进行合并
git checkout dev 切换到本地dev分支
git remote show 查看远程库
git add .
git rm 文件名(包括路径) 从git中删除指定文件
git clone git://github.com/schacon/grit.git 从服务器上将代码给拉下来
git config --list 看所有用户
git ls-files 看已经被提交的
git rm [file name] 删除一个文件
git commit -a 提交当前repos的所有的改变
git add [file name] 添加一个文件到git index
git commit -v 当你用-v参数的时候可以看commit的差异
git commit -m "This is the message describing the commit" 添加commit信息
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -a -v 一般提交命令
git log 看你commit的日志
git diff 查看尚未暂存的更新
git rm a.a 移除文件(从暂存区和工作区中删除)
git rm --cached a.a 移除文件(只从暂存区中删除)
git commit -m "remove" 移除文件(从Git中删除)
git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)
git diff --cached 或 git diff --staged 查看尚未提交的更新
git stash push 将文件给push到一个临时空间中
git stash pop 将文件从临时空间pop下来
git remote add origin git@github.com:username/Hello-World.git
git push origin master 将本地项目给提交到服务器中
git pull 本地与服务器端同步
git push (远程仓库名) (分支名) 将本地分支推送到服务器上去。
git push origin serverfix:awesomebranch
git fetch 相当于是从远程获取最新版本到本地,不会自动merge
git commit -a -m "log_message" (-a是提交所有改动,-m是加入log信息) 本地修改同步至服务器端 :
git branch branch_0.1 master 从主分支master创建branch_0.1分支
git branch -m branch_0.1 branch_1.0 将branch_0.1重命名为branch_1.0
git checkout branch_1.0/master 切换到branch_1.0/master分支
du -hs
实战
mkdir WebApp
cd WebApp
git init
touch .gitignore
git add .gitignore
touch README
git add README
git commit -m 'first commit'
git remote add origin git@git.100credit.cn:application/test.git
git push -u origin master
jenkins安装介绍
安装jdk
sudo yum install java-1.8.0-openjdk
安装jenkins
cd /etc/yum.repos.d/
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
sudo systemctl start jenkins
sudo service jenkins start
启动失败,因为jenkins默认的8080端口被占用了,所以换成8089
sed -i 's/8080/8089/' /etc/sysconfig/jenkins
防火墙配置
firewall-cmd --permanent --new-service=jenkins
firewall-cmd --permanent --service=jenkins --set-short="Jenkins Service Ports"
firewall-cmd --permanent --service=jenkins --set-description="Jenkins service firewalld port exceptions"
firewall-cmd --permanent --service=jenkins --add-port=8080/tcp
firewall-cmd --permanent --add-service=jenkins
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
再打开http://192.168.1.18:8089
就可以看到jenkins的启动界面了
为了安全考虑,首先需要解锁Jenkins,请在/var/lib/jenkins/secrets/initialAdminPassword
中查看文件。
[root@linux-node1 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
98dc4fdeb47641bf93bfbd884d0d9b7f
然后在界面上输入上面的密文即可
选择需要安装的插件: 选择默认即可,会安装通用的社区插件,剩下的可以在使用的时候再进行安装。