Jenkins

Jenkins

1、安装Jenkins

1、安装Java
yum install java-1.8.0-openjdk* -y

2、下载Jenkins安装包
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.249.1-1.1.noarch.rpm

3、安装认证Key
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

4、安装
yum install jenkins-2.249.1-1.1.noarch.rpm

5、启动
systemctl enable --now jenkins

6、安装插件
[root@localhost ~]# tar -zxvf /opt/plugins.tar.gz -C /var/lib/jenkins/
[root@localhost ~]# systemctl restart jenkins

7、处理admin密码丢失问题
[root@localhost admin_7050982324762688703]# vim /var/lib/jenkins/users/admin_7050982324762688703/config.xml 
<passwordHash>#jbcrypt:$2a$10$CEFbiUohDtWimNh4o3TBje2EEXgljqA/frbwED0Go5X533dd.jk6W</passwordHash>
替换成
<passwordHash>#jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq</passwordHash>

8、安装git
[root@localhost ~]# yum install git -y

2、用户权限

  • 创建用户
系统管理 ---> 用户管理 ---> 新建用户

1618451136706

  • 创建权限组

使用权限组,需要安装Role-Based Strategy权限插件

1、 启用授权策略插件
    系统管理 ---> 全局安全配置 ---> 授权策略 ---> Role-Based Strategy

2、创建及管理权限组
    系统管理 ---> Manage and Assign Roles ---> Manage Roles ---> 各个角色(权限组)

1618451538753

1618451804102

3、分配角色
    系统管理 ---> Manage and Assign Roles ---> Assign Roles

4、使用通配符
    .* : 匹配以什么开头的项目

2、凭证管理

系统管理 --->  Manage Credentials ---> 系统凭证 ---> 全局凭证 ---> 添加凭证
  • http
系统管理 --->  Manage Credentials ---> 系统凭证 ---> 全局凭证 ---> 添加凭证 ---> Username with Password
  • ssh
系统管理 --->  Manage Credentials ---> 系统凭证 ---> 全局凭证 ---> 添加凭证 ---> ssh username with private key
  • 登录服务器ssh

1618456404001

1618459316118

1618459419128

GitLab

GitLab

官网:https://about.gitlab.com/

Gitlab是依赖于Git的远程代码仓库,类似于GitHub、Gitee,不同的是GitHub、Gitee的公网上代码仓库, Gitlab是可以私有化部署的免费远程代码仓库

1、部署GitLab

1、准备服务器
    192.168.15.60   gitlab  

2、下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.0.3-ce.0.el7.x86_64.rpm

3、安装GitLab
# 安装依赖包
[root@gitlab /opt]# yum install -y curl policycoreutils-python openssh-server perl
# 关闭防火墙
[root@gitlab /opt]# systemctl disable --now firewalld
# 关闭selinux
[root@gitlab /opt]# sed -i 's#enforcing#disabled#g' /etc/sysconfig/selinux
# 临时关闭
[root@gitlab /opt]# setenforce 0
# 安装
[root@gitlab /opt]# yum install gitlab-ce-13.0.3-ce.0.el7.x86_64.rpm 
# 修改配置文件
[root@sean ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.15.60'
nginx['listen_port'] = 80
# 刷新配置(默认启动)
gitlab-ctl reconfigure
1.Guest:可以创建issue、发表评论,不能读写版本库 
2.Reporter:可以克隆代码,不能提交,QA、PM 可以赋予这个权限 
3.Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限 
4.Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个 权限 
5.Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组 长可以赋予这个权限

一、组件介绍

1、nginx: 静态web服务器在这里插入代码片

2、gitlab-shell: 用于处理Git命令和修改authorized keys列表
3、gitlab-workhorse: 轻量级的反向代理服务器,可以处理一些大的HTTP请求(磁盘上的 CSS、JS 文件、文件上传下载等),处理 Git Push/Pull 请求,处理到Rails 的连接会反向代理给后端的unicorn(修改由 Rails 发送的响应或发送给 Rails 的请求,管理 Rails 的长期 WebSocket 连接等)。

4、logrotate:日志文件管理工具

5、postgresql:repository 中的数据(元数据,issue,合并请求 merge request 等 , 可以登录 Web 的用户

6、redis:缓存每个客户端的sessions和后台队列,负责分发任务。Redis需求的存储空间很小,大约每个用户25KB

7、sidekiq:用于在后台执行队列任务(异步执行)

8、unicorn:Gitlab 自身的 Web 服务器(Ruby Web Server),包含了 Gitlab 主进程,负责处理快速/一般任务,与 Redis 一起工作,配置参考:CPU核心数 + 1 = unicorn workers数量。
    1. 通过检查存储在 Redis 中的用户会话来检查权限
    2. 为 Sidekiq 制作任务
    3. 从仓库(warehouse)取东西或在那里移动东西

9、gitlab-shell:用于 SSH 交互,而不是 HTTP。gitlab-shell 通过 Redis 与 Sidekiq 进行通信,并直接或通过 TCP 间接访问 Unicorn。用于处理Git命令和修改authorized keys列表

10、Gitaly:后台服务,专门负责访问磁盘以高效处理 gitlab-shell 和 gitlab-workhorse 的git 操作,并缓存耗时操作。所有的 git 操作都通过 Gitaly 处理,并向 GitLab web 应用程序提供一个 API,以从 git(例如 title, branches, tags, other meta data)获取属性,并获取 blob(例如 diffs,commits,files)

11、Sidekiq:后台核心服务,可以从redis队列中提取作业并对其进行处理。后台作业允许GitLab通过将工作移至后台来提供更快的请求/响应周期。Sidekiq任务需要来自Redis

12、prometheus:提供监控

二、常用命令

1、服务控制命令

1)启动/停止/重启所有 gitlab 组件:

gitlab-ctl start/stop/restart

2)启动指定模块组件:

 gitlab-ctl start redis/postgresql/gitlab-workhorse/logrotate/nginx/sidekiq/unicorn

3)停止指定模块组件:

gitlab-ctl stop 模块名

4)查看服务状态

gitlab-ctl status

5)生成配置并启动服务

 gitlab-ctl reconfigure

2、其他常用管理命令

1)查看版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 

2)检查gitlab

gitlab-rake gitlab:check SANITIZE=true --trace

3)实时查看日志

gitlab-ctl tail

4)关系数据库升级

gitlab-rake db:migrate

5)清理redis缓存

gitlab-rake cache:clear

6)升级gitlab-ce版本

# 关闭gitlab服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
# 备份gitlab
gitlab-rake gitlab:backup:create
# 升级rpm包
rpm -Uvh gitlab-ce-xxx.rpm
# 启动并查看gitlab版本信息
gitlab-ctl reconfigure
gitlab-ctl restart
head -1 /opt/gitlab/version-manifest.txt

# 常见报错
Error executing action `run` on resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]'
# 解决方法:
sudo chmod 2770 /var/opt/gitlab/git-data/repositories

7)升级postgreSQL最新版本

gitlab-ctl pg-upgrade

3、日志

1)实时查看所有日志

gitlab-ctl tail

2)实时查看某个组件日志

gitlab-ctl tail [组件名称]

4、常用配置文件目录

主配置文件: /etc/gitlab/gitlab.rb
文档根目录: /opt/gitlab
默认存储库位置: /var/opt/gitlab/git-data/repositories
Nginx配置文件: /var/opt/gitlab/nginx/conf/gitlab-http.conf
Postgresql数据目录: /var/opt/gitlab/postgresql/data

5、gitlab管理员密码重置

[root@test bin]# gitlab-rails console production
-------------------------------------------------------------------------------------
 GitLab:       11.10.4 (62c464651d2)
 GitLab Shell: 9.0.0
 PostgreSQL:   9.6.11
-------------------------------------------------------------------------------------
Loading production environment (Rails 5.0.7.2)
irb(main):001:0> user = User.where(id:1).first
=> #<User id:1 @root>
irb(main):002:0> user.password = 'qwer1234'
=> "qwer1234"
irb(main):003:0> user.password_confirmation = 'qwer1234'
=> "qwer1234"
irb(main):004:0> user.save
Enqueued ActionMailer::DeliveryJob (Job ID: 4752a4a4-4e85-4e8b-9f27-72788abfe97c) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #<GlobalID:0x00007f519e7501d8 @uri=#<URI::GID gid://gitlab/User/1>>
=> true
irb(main):005:0> exit

6、使用smtp来发送邮件通知

vim /etc/gitlab/gitlab.rb

 gitlab_rails['smtp_address'] = "smtp.yourdomain.com"
 gitlab_rails['smtp_port'] = 25
 gitlab_rails['smtp_user_name'] = "xxx"
 gitlab_rails['smtp_password'] = "xxx"
 gitlab_rails['smtp_domain'] = "smtp.yourdomain.com" 
 gitlab_rails['smtp_authentication'] = 'plain'
 gitlab_rails['smtp_enable_starttls_auto'] = true

7、配置gitlab访问模式为https

# 创建ssl证书存放目录
    mkdir -p /etc/gitlab/ssl
    chmod 0700 /etc/gitlab/ssl

# 上传证书,修改证书访问权限
    chmod 600 /etc/gitlab/ssl/gitlab.xxx.com.crt

# 修改住配置,支持ssl访问
    vim /etc/gitlab/gitlab.rb
    external_url "[https://gitlab.bjwf125.com]            (https://gitlab.bjwf125.com)"
    nginx['redirect_http_to_https'] = true
    nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.com.crt"
    nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.com.key"

# 重启
    gitlab-ctl reconfigure

# 开启防火墙

  firewall-cmd --zone=public --add-port=443/tcp --permanent
  firewal-cmd reload

8、Gitlab备份

gitlab备份的默认目录是/var/opt/gitlab/backups

1)备份命令

gitlab-rake gitlab:backup:create
#该命令会在备份目录(默认:/var/opt/gitlab/backups/)下创建一个tar压缩包xxxxxxxx_gitlab_backup.tar,其中开头的xxxxxx是备份创建的时间戳,这个压缩包包括GitLab整个的完整部分。

2)自动备份

#通过任务计划crontab 实现自动备份
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create 
# 每天两点备份gitlab数据

3)备份配置文件

vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab/backups"    #指定gitlab备份目录
gitlab_rails['backup_archive_permissions'] = 0644       #生成的备份文件权限
gitlab_rails['backup_keep_time'] = 7776000              #备份保留天数为3个月(即90天,这里是7776000秒)

#重载生效
gitlab-ctl reconfigure

9、备份恢复

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitbab:backup:restore BACKUP=xxxxxx(恢复文件)
gitlab-ctl start 启动gitlab
  • 修改权限

git

1、介绍

1、将代码上传到服务器,然后解压

2、将代码上传到服务器中,然后通过软连接的方式部署

无法实现批量部署,无法实现批量回滚,更无法实现批量测试。

# 批量部署,批量测试

源代码管理

协同开发

代码管理工具

自动集成(java、golang)、自动部署、自动测试: DevOps

代码:
    编译型语言:需要编译,后运行
    脚本型语言:直接运行

工具:
实现自动集成、自动部署:Jenkins
代码管理:git ---> gitlab、github、gitee

1、 软件开发生命周期

1、设计 ---> 需求分析

2、实现
    写配置清单,构建容器,部署一个测试环境

3、测试

4、优化(迭代)

代码管理工具

代码管理工具:git

1、安装Git

[root@alvin-test-os deploy2]# yum install git -y
[root@alvin-test-os deploy2]# git --version
git version 1.8.3.1

2、初始化代码仓库

[root@alvin-test-os data]# git init
Initialized empty Git repository in /root/data/.git/
[root@alvin-test-os data]# ll -a
total 4
drwxr-xr-x. 3 root root   18 Apr 13 10:35 .
dr-xr-x---. 8 root root 4096 Apr 13 10:32 ..
drwxr-xr-x. 7 root root  119 Apr 13 10:35 .git

3、将代码提交到Git暂存区

[root@alvin-test-os data]# git add index.html

4、文件提交到git缓冲区

[root@alvin-test-os data]# git commit -m 'init' .

参数:
    -m : 添加注释

5、回滚

[root@alvin-test-os data]# cat index.php 
<?php

phpinfo();
[root@alvin-test-os data]# git reset --hard 180d937cda0a4caaa1683753a84af166399da1f5
HEAD is now at 180d937 init
[root@alvin-test-os data]# cat index.php 
1111

6、远程仓库

# github   gitee   gitlab

# 下载远程仓库
[root@alvin-test-os ~]# git clone https://gitee.com/chenyang0910/data.git

# 将文件提交到远程仓库

## 设置用户名和邮箱
[root@alvin-test-os data]# git config --global user.name "Alvin"
[root@alvin-test-os data]# git config --global user.email "chenyangqit@163.com"

[root@alvin-test-os data]# git config --get user.name
Alvin
[root@alvin-test-os data]# git config --get user.email
chenyangqit@163.com

# 将本地代码提交到远程仓库
[root@alvin-test-os data]# git push -u origin master
Username for 'https://gitee.com': xxx
Password for 'https://15517127859@gitee.com': 
Counting objects: 3, done.
Writing objects: 100% (3/3), 209 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/chenyang0910/data.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

# 使用SSh将我们的代码提交到远程
[root@alvin-test-os data]# vim .git/config 
    url = git@gitee.com:chenyang0910/data.git 

[root@alvin-test-os data]# git push -u origin master
Warning: Permanently added 'gitee.com,212.64.62.183' (ECDSA) to the list of known hosts.
Counting objects: 5, done.
Writing objects: 100% (3/3), 241 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To git@gitee.com:chenyang0910/data.git
   63004c0..dd584e3  master -> master
Branch master set up to track remote branch master from origin.

# 拉去远程仓库代码
[root@alvin-test-os data]# git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
From gitee.com:chenyang0910/data
   dd584e3..78fd071  master     -> origin/master
Updating dd584e3..78fd071
Fast-forward
 index.html | 6 ++++++
 1 file changed, 6 insertions(+)

# git pull 和 git clone 之间有什么不同?

git push 

7、分支

# 房子 ---> 房间
# git仓库  ---> 代表是房间

不同的分支之间是相对隔离的。

代码仓库:oldboy

开发环境
测试环境
预发布环境
线上环境

# 查看本地分支
[root@alvin-test-os data]# git branch 
* master

# 查看远程分支    
[root@alvin-test-os data]# git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

# 创建分支
[root@alvin-test-os data]# git checkout -b test
Switched to a new branch 'test'
[root@alvin-test-os data]# git branch 
  master
* test

# 将本地分支同步到远程分支
[root@alvin-test-os data]# git branch 
  master
* test
[root@alvin-test-os data]# git push -u origin test
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
remote: Create a pull request for 'test' on Gitee by visiting:
remote:     https://gitee.com/chenyang0910/data/pull/new/chenyang0910:test...chenyang0910:master
To git@gitee.com:chenyang0910/data.git
 * [new branch]      test -> test
Branch test set up to track remote branch test from origin.

# 切换分支
[root@alvin-test-os data]# git checkout  master
Switched to branch 'master'
[root@alvin-test-os data]# git branch 
* master
  test

# 标签:标签是一种特殊的分支,特点是只能够删除不能够修改

## 创建标签: 本地创建    远程仓库创建
git tag -a [tag名称] -m "解释"

## 拉去指定标签内容
git clone -b [标签名称|分支名称] [仓库地址]

创建本地仓库,关联上远程仓库,并实现脚本通过标签部署discuz

1、创建本地仓库
[root@kubernetes-master-01 mnt]# mkdir data
[root@kubernetes-master-01 mnt]# cd data/
[root@kubernetes-master-01 data]# git init
Initialized empty Git repository in /mnt/data/.git/
[root@kubernetes-master-01 data]# 

2、关联上远程仓库
    1、创建远程仓库
    2、将本地仓库关联上远程仓库
[root@kubernetes-master-01 data]# cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[root@kubernetes-master-01 data]# git remote add origin git@gitee.com:chenyang0910/discuz.git
[root@kubernetes-master-01 data]# cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@gitee.com:chenyang0910/discuz.git
    fetch = +refs/heads/*:refs/remotes/origin/*

3、实现脚本通过标签部署discuz
    1、准备代码
    2、提交的git暂存区
    3、配置用户名和邮箱
    4、提交
    5、推送(认证)
    6、创建标签
    7、编写部署脚本

[root@kubernetes-master-01 mnt]# cat deploy.sh 
#!/bin/bash
REPOASITORY=discuz-`date +%F_%H:%M:%S`
REPOASITORY_URL="git@gitee.com:chenyang0910/discuz.git"
REPOASITORY_TAG=$1
CURRENT_DIR=`pwd`
git clone -b ${REPOASITORY_TAG} ${REPOASITORY_URL} ${REPOASITORY}
# /usr/share/nginx/html
rm -rf /usr/share/nginx/html
ln -s ${CURRENT_DIR}/${REPOASITORY} /usr/share/nginx/html