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.rbexternal_url

sed -i 's/gitlab.example.com/192.168.1.18' etc/gitlab/gitlab.rb

提示

使用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_namegitlab_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常用命令

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仓库默认是保护状态,不允许开发者身份提交.建议masterAllowed 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

下面附上操作的图片:

gitlab操作gitlab操作gitlab操作gitlab操作

gitlab操作gitlab操作gitlab操作gitlab操作gitlab操作gitlab操作gitlab操作

gitlab操作gitlab操作gitlab操作gitlab操作gitlab操作gitlab操作gitlab操作gitlab操作gitlab操作

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步走哦)
  1. git rm --cached [path]
  2. 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
  3. 编辑“ .git/config”文件,将子模块的相关配置节点删除掉
  4. 手动删除子模块残留的目录

忽略一些文件、文件夹不提交

在仓库根目录下创建名称为“.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 --cachedgit 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安装介绍

jenkins安装

jenkins安装wiki

安装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

然后在界面上输入上面的密文即可

选择需要安装的插件: 选择默认即可,会安装通用的社区插件,剩下的可以在使用的时候再进行安装。

jenkins操作jenkins操作jenkins操作jenkins操作jenkins操作jenkins操作

上次更新:
贡献者: iEchoxu