一.理论概述

1.什么是gitlib

  Gitlab 是一个基于Git实现的在线代码仓库托管软件,你可以用Gitlab自己搭建一个类似于Github一样的系统平台,一般搭建gitlab私服就是用在公司的内部,

  Gitlab 功能就是能够对代码的提交审核和问题跟踪,这个对于软件工程质量的管理是至关重要的,而且GitLab拥有web界面,更加直观.安装GitLab建议4GB内存以上

  Gitlab分为社区版(CE) 和 企业版(EE)大多数的公司还是会选择社区版

  其实gitlab的原理就是git的原理,GitHub不是也是基于Git的吗,笔者在这篇文章介绍过

2.GitLab服务构成

分别是:

  1. Nginx:静态Web服务器
  2. gitlab-shell:用于处理Git命令和修改authorized keys列表
  3. gitlab-workhorse:轻量级的反向代理服务器(这个是个敏捷的反向代理,它会处理一些大的HTTP请求,比如文件的上传下载,其他的请求会反向代理给Gitlab Rails应用)
  4. logrotate:日志文件管理工具
  5. postgresql:数据库
  6. redis:缓存数据库
  7. sidekiq:用于在后台执行队列的任务
  8. unicorn:Gitlab Rails应用是托管在这个服务器上面的

3.Git对比SVN

Git SVN
代码管理方式 分布式,本地就可以用,保存历史痕迹,不用担心污染服务器 集中式
分支 Git中代码仓库只是一个文件快照,对分支做操作非常迅速 相当于是版本库中的文件的复制,操作分支速度较慢
代码管理 GitLab可以通过web界面很方便的管理权限等等 还是传统操作方式

更详细对比介绍参考

二.部署

1.简单操作GitLab

  • 部署GitLab
  1. [root@gitlab ~]# vim /etc/yum.repos.d/gitlab-ce.repo
  2. [gitlab-ce]
  3. name=Gitlab CE Repository
  4. baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
  5. gpgcheck=0
  6. enabled=1
  7. [root@gitlab ~]# yum clean all
  8. [root@gitlab ~]# yum -y install gitlab-ce
  9. #安装最新版本
  10. #yum install gitlab-ce-x.x.x
  11. #安装指定版本
  12. [root@gitlab ~]# vim /etc/gitlab/gitlab.rb
  13. external_url 'http://192.168.111.3'
  14. #修改配置文件,改为本机ip,或者可以解析情况下修改为域名
  15. [root@gitlab ~]# gitlab-ctl reconfigure
  16. #重新加载配置文件
  17. [root@gitlab ~]# cat /opt/gitlab/version-manifest.txt | head -1
  18. gitlab-ce 12.0.3
  19. #查看GitLab版本

汉化以及邮件配置参考文章

客户端浏览器输入192.168.111.3访问web界面测试

设置密码

然后使用root用户登录,密码为刚才自定义的

将在GitLab创建的仓库克隆到本地

  1. [root@gitlab ~]# git config --global user.name "joinbest"
  2. [root@gitlab ~]# git config --global user.email "joinbest@163.com"
  3. #这里配置的用户名和邮箱并不是说要在某服务器上注册,而是类似于一种标识符的存在

创建一个README文件并且同步到远程仓库

  1. [root@gitlab ~]# git clone http://192.168.111.3/root/joinbest.git
  2. 正克隆到 'joinbest'...
  3. warning: 您似乎克隆了一个空版本库。
  4. [root@gitlab ~]# cd joinbest
  5. [root@gitlab joinbest]# touch README.md
  6. [root@gitlab joinbest]# git add README.md
  7. [root@gitlab joinbest]# git commit -m "add README"
  8. [master(根提交) 2cb80d4] add README
  9. 1 file changed, 0 insertions(+), 0 deletions(-)
  10. create mode 100644 README.md
  11. [root@gitlab joinbest]# git push -u origin master
  12. Username for 'http://192.168.111.3': root #远程仓库用户
  13. Password for 'http://root@192.168.111.3': #远程仓库密码
  14. Counting objects: 3, done.
  15. Writing objects: 100% (3/3), 210 bytes | 0 bytes/s, done.
  16. Total 3 (delta 0), reused 0 (delta 0)
  17. To http://192.168.111.3/root/joinbest.git
  18. * [new branch] master -> master
  19. 分支 master 设置为跟踪来自 origin 的远程分支 master

  • GitLab常用命令
  1. sudo gitlab-ctl start
  2. # 启动所有 gitlab 组件;
  3. sudo gitlab-ctl stop
  4. # 停止所有 gitlab 组件;
  5. sudo gitlab-ctl restart
  6. # 重启所有 gitlab 组件;
  7. sudo gitlab-ctl status
  8. # 查看服务状态;
  9. sudo gitlab-ctl reconfigure
  10. # 启动服务;
  11. sudo vim /etc/gitlab/gitlab.rb
  12. # 修改默认的配置文件;
  13. gitlab-rake gitlab:check SANITIZE=true --trace
  14. # 检查gitlab;
  15. sudo gitlab-ctl tail
  16. # 查看日志;

三.项目实践:SVN代码迁移至GitLab

疑问点:项目迁移,新建一个Git项目,把SVN代码复制过去不就可以了吗?但是为了保留之前的历史提交记录,我们得用更安全保守可靠的方式来进行代码迁移

环境

主机名 ip 角色信息
gitlab 192.168.111.3 GitLab服务器
svn 192.168.111.4 SVN服务器

1.Linux下部署SVN服务器及简单实用

  1. [root@svn ~]# yum -y install subversion
  2. #安装
  3. [root@svn ~]# mkdir -p /application/svndata/joinbest
  4. [root@svn ~]# mkdir -p /application/svnpasswd
  5. #后面配置会用到
  6. [root@svn ~]# svnadmin create /application/svndata/joinbest/master
  7. [root@svn ~]# svnadmin create /application/svndata/joinbest/dev
  8. [root@svn ~]# svnadmin create /application/svndata/joinbest/test
  9. #创建分支
  10. [root@svn ~]# vim /application/svndata/joinbest/master/conf/svnserve.conf
  11. anon-access = none
  12. #不允许匿名访问
  13. auth-access = write
  14. #通过授权的用户允许写操作
  15. password-db = /application/svnpasswd/passwd
  16. #用户以及密码文件
  17. authz-db = /application/svnpasswd/authz
  18. #授权文件
  19. [root@svn ~]# cp /application/svndata/joinbest/master/conf/svnserve.conf /application/
  20. svndata/joinbest/dev/conf/cp:是否覆盖"/application/svndata/joinbest/dev/conf/svnserve.conf" yes
  21. [root@svn ~]# cp /application/svndata/joinbest/master/conf/svnserve.conf
  22. /application/svndata/joinbest/test/conf/cp:是否覆盖"/application/svndata/joinbest/test/conf/svnserve.conf" yes
  23. #每个分支都需要配置,直接复制过去
  24. [root@svn ~]# cp /application/svndata/joinbest/master/conf/passwd /application/svnpasswd/
  25. [root@svn ~]# cp /application/svndata/joinbest/master/conf/authz /application/svnpasswd/
  26. #复制到我们制定的目录里使用
  27. [root@svn ~]# vim /application/svnpasswd/passwd
  28. [users]
  29. manager=123456
  30. dev=123456
  31. tom=123
  32. bob=123
  33. #格式为"用户名=密码"
  34. [root@svn ~]# vim /application/svnpasswd/authz
  35. [groups]
  36. testgroup=tom,bob
  37. #在[groups]标签下定义一个组,并且定义包含哪些用户
  38. [joinbest/master:/]
  39. manager = rw
  40. dev = r
  41. #该标签表示joinbest仓库下的master分支,各个用户的权限,manager用户有读和写,dev用户只有读权限
  42. [joinbest/dev:/]
  43. dev = rw
  44. manager = r
  45. [joinbest/test:/]
  46. @testgroup = r
  47. manager = rw
  48. [root@svn ~]# svnserve -d -r /application/svndata/
  49. [root@svn ~]# ps aux | grep svn
  50. root 59559 0.0 0.0 197684 1040 ? Ss 15:34 0:00 svnserve -d -r /application/svndata/
  51. #启动

2.Linux下SVN客户端进行测试及简单使用

  1. [root@gitlab ~]# yum install -y subversion
  2. #安装
  3. [root@gitlab ~]# svn checkout svn://192.168.111.4/joinbest/master ./master
  4. 认证领域: <svn://192.168.111.4:3690> ea5d88c8-24e7-41d8-b26d-a646288dc380
  5. root”的密码:
  6. 认证领域: <svn://192.168.111.4:3690> ea5d88c8-24e7-41d8-b26d-a646288dc380
  7. 用户名: manager
  8. manager”的密码:
  9. -----------------------------------------------------------------------
  10. 注意! 你的密码,对于认证域:
  11. <svn://192.168.111.4:3690> ea5d88c8-24e7-41d8-b26d-a646288dc380
  12. 只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
  13. 可以保存加密后的密码。请参阅文档以获得详细信息。
  14. 你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
  15. 来避免再次出现此警告。
  16. -----------------------------------------------------------------------
  17. 保存未加密的密码(yes/no)?yes
  18. 取出版本 0
  19. #将文件checkout到本地目录
  20. [root@gitlab ~]# svn checkout svn://192.168.111.4/joinbest/dev ./dev
  21. [root@gitlab ~]# svn checkout svn://192.168.111.4/joinbest/test ./test
  • 添加代码文件
  1. [root@gitlab ~]# ll | grep -E 'test|dev|master'
  2. drwxr-xr-x 3 root root 18 7 7 18:20 dev
  3. drwxr-xr-x 3 root root 18 7 7 18:17 master
  4. drwxr-xr-x 3 root root 18 7 7 18:21 test
  5. [root@gitlab dev]# cd /root/dev/
  6. [root@gitlab dev]# echo testdev > dev.txt
  7. [root@gitlab dev]# svn add dev.txt
  8. A dev.txt
  9. [root@gitlab dev]# svn commit -m '2019年7月7日18:29:42' dev.txt
  10. [root@gitlab dev]# cd /root/master
  11. [root@gitlab master]# echo testmaster > master.txt
  12. [root@gitlab master]# svn add master.txt
  13. A master.txt
  14. [root@gitlab master]# svn commit -m '2019年7月7日18:29:42' master.txt
  15. 正在增加 master.txt
  16. 传输文件数据.
  17. 提交后的版本为 1
  18. [root@gitlab master]#cd /root/test
  19. [root@gitlab test]# echo testtest > test.txt
  20. [root@gitlab test]# svn add test.txt
  21. A test.txt
  22. [root@gitlab test]# svn commit -m '2019年7月7日18:29:42' test.txt
  23. 正在增加 test.txt
  24. 传输文件数据.
  25. 提交后的版本为 1
  26. 正在增加 dev.txt
  27. 传输文件数据.
  28. 提交后的版本为 1
  29. [root@gitlab dev]#
  30. [root@gitlab dev]# cd ../master/
  31. [root@gitlab test]# svn list svn://192.168.111.4/joinbest/master
  32. master.txt
  33. [root@gitlab test]# svn list svn://192.168.111.4/joinbest/dev
  34. dev.txt
  35. [root@gitlab test]# svn list svn://192.168.111.4/joinbest/test
  36. test.txt
  37. #svn服务端也有了这些文件了

更多的命令了解参考这篇文章

3.先将SVN服务器上代码迁移至Git

yum安装Git没有git-svn功能,需要用到源码安装的Git

  1. [root@gitlab ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel -y
  2. #依赖包
  3. #cd /usr/local/src
  4. #wget https://www.kernel.org/pub/software/scm/git/git-1.9.4.tar.gz
  5. #tar xf git-1.9.4.tar.gz
  6. #cd git-1.9.4
  7. #make prefix=/usr/local/git all
  8. #make prefix=/usr/local/git install
  9. #rm -rf /usr/bin/git
  10. #ln -s /usr/local/git/bin/git /usr/bin/git
  11. [root@gitlab git-1.9.4]# git version
  12. git version 1.9.4
  13. [root@gitlab git-1.9.4]# yum -y install subversion-perl perl-Digest-MD5
  14. #代码迁移要用到这些

创建svn代码备份到本地的目录

  1. [root@gitlab git-1.9.4]# mkdir /backup
  2. [root@gitlab git-1.9.4]# cd /backup/

克隆svn分支

  1. [root@gitlab backup]# git svn clone --no-metadata svn://192.168.111.4/joinbest/master/ /backup/master/
  2. #根据提示输入相应密码
  3. [root@gitlab backup]# git svn clone --no-metadata svn://192.168.111.4/joinbest/test/ /backup/test/
  4. [root@gitlab backup]# git svn clone --no-metadata svn://192.168.111.4/joinbest/dev/ /backup/dev/
  5. [root@gitlab backup]# tree
  6. .
  7. ├── dev
  8.    └── dev.txt
  9. ├── master
  10.    └── master.txt
  11. └── test
  12. └── test.txt
  13. [root@gitlab backup]# cat dev/dev.txt
  14. testdev
  15. [root@gitlab backup]# cat master/master.txt
  16. testmaster
  17. #可以看到代码已经克隆完整

在GitLab创建新仓库,并且将分支添加到GitLab上

推送代码到GitLab上

  1. [root@gitlab ~]# cd /backup/master/
  2. [root@gitlab master]# git branch
  3. * master
  4. [root@gitlab master]# git branch joinbest
  5. [root@gitlab master]# git checkout joinbest
  6. 切换到分支 'joinbest'
  7. [root@gitlab master]# git branch
  8. * joinbest
  9. master
  10. #新建一个分支,这样提交到GitLab上的分支名称会是joinbest这个可以自定义
  11. [root@gitlab master]# git add *
  12. [root@gitlab master]# git commit -m "master commit"
  13. 位于分支 joinbest
  14. 无文件要提交,干净的工作区
  15. [root@gitlab master]# git remote add origin http://192.168.111.3/root/pro.git
  16. [root@gitlab master]# git push -u origin joinbest
  17. Username for 'http://192.168.111.3': root
  18. Password for 'http://root@192.168.111.3':
  19. Counting objects: 3, done.
  20. Writing objects: 100% (3/3), 252 bytes | 0 bytes/s, done.
  21. Total 3 (delta 0), reused 0 (delta 0)
  22. remote:
  23. remote: The private project root/pro was successfully created.
  24. remote:
  25. remote: To configure the remote, run:
  26. remote: git remote add origin http://192.168.111.3/root/pro.git
  27. remote:
  28. remote: To view the project, visit:
  29. remote: http://192.168.111.3/root/pro
  30. remote:
  31. To http://192.168.111.3/root/pro.git
  32. * [new branch] joinbest -> joinbest
  33. 分支 joinbest 设置为跟踪来自 origin 的远程分支 joinbest
  1. [root@gitlab master]# cd /backup/dev/
  2. [root@gitlab dev]# git branch
  3. * master
  4. [root@gitlab dev]# git branch joinbest_dev
  5. [root@gitlab dev]# git checkout joinbest_dev
  6. 切换到分支 'joinbest_dev'
  7. [root@gitlab dev]#
  8. [root@gitlab dev]# git add *
  9. [root@gitlab dev]# git commit -m "dev branch commit"
  10. 位于分支 joinbest_dev
  11. 无文件要提交,干净的工作区
  12. [root@gitlab dev]# git remote add origin http://192.168.111.3/root/pro.git
  13. [root@gitlab dev]# git push -u origin joinbest_dev
  14. Username for 'http://192.168.111.3': root
  15. Password for 'http://root@192.168.111.3':
  16. Counting objects: 3, done.
  17. Writing objects: 100% (3/3), 244 bytes | 0 bytes/s, done.
  18. Total 3 (delta 0), reused 0 (delta 0)
  19. remote:
  20. remote: To create a merge request for joinbest_dev, visit:
  21. remote: http://192.168.111.3/root/pro/merge_requests/new?merge_request%5Bsource_branch%5D=joinbest_dev
  22. remote:
  23. To http://192.168.111.3/root/pro.git
  24. * [new branch] joinbest_dev -> joinbest_dev
  25. 分支 joinbest_dev 设置为跟踪来自 origin 的远程分支 joinbest_dev
  1. [root@gitlab dev]# cd /backup/test/
  2. [root@gitlab test]# git branch
  3. * master
  4. [root@gitlab test]# git branch test
  5. [root@gitlab test]# git checkout test
  6. 切换到分支 'test'
  7. [root@gitlab test]# git add *
  8. [root@gitlab test]# git commit -m "test branch commit"
  9. 位于分支 test
  10. 无文件要提交,干净的工作区
  11. [root@gitlab test]#
  12. [root@gitlab test]# git remote add origin http://192.168.111.3/root/pro.git
  13. [root@gitlab test]# git push -u origin test
  14. Username for 'http://192.168.111.3': root
  15. Password for 'http://root@192.168.111.3':
  16. Counting objects: 3, done.
  17. Writing objects: 100% (3/3), 248 bytes | 0 bytes/s, done.
  18. Total 3 (delta 0), reused 0 (delta 0)
  19. remote:
  20. remote: To create a merge request for test, visit:
  21. remote: http://192.168.111.3/root/pro/merge_requests/new?merge_request%5Bsource_branch%5D=test
  22. remote:
  23. To http://192.168.111.3/root/pro.git
  24. * [new branch] test -> test
  25. 分支 test 设置为跟踪来自 origin 的远程分支 test

四.项目实践:GitLab之间的代码迁移(环境迁移)

主机名 ip 角色信息
labtest 192.168.111.3 测试环境GitLab
lab 192.168.111.4 生产环境GitLab

labtest还是用上面已经搭建好的GitLab环境

  • 部署GitLab
  1. [root@lab ~]# vim /etc/yum.repos.d/gitlab-ce.repo
  2. [gitlab-ce]
  3. name=Gitlab CE Repository
  4. baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
  5. gpgcheck=0
  6. enabled=1
  7. [root@lab ~]# yum clean all
  8. [root@lab ~]# yum -y install gitlab-ce
  9. #安装最新版本
  10. #yum install gitlab-ce-x.x.x
  11. #安装指定版本
  12. [root@lab ~]# vim /etc/gitlab/gitlab.rb
  13. external_url 'http://192.168.111.4'
  14. #修改配置文件,改为本机ip,或者可以解析情况下修改为域名
  15. [root@lab ~]# gitlab-ctl reconfigure
  16. #重新加载配置文件
  17. [root@lab ~]# cat /opt/gitlab/version-manifest.txt | head -1
  18. gitlab-ce 12.0.3
  19. #查看GitLab版本

在labtest将用到的配置文件复制到lab机器上

  1. [root@labtest ~]# cp /etc/gitlab/gitlab.rb{,.bak}
  2. [root@labtest ~]# cp /var/opt/gitlab/nginx/conf/nginx.conf{,.bak}
  3. [root@labtest ~]# cp /etc/postfix/main.cf{,.bak}
  4. [root@labtest ~]# scp /etc/gitlab/gitlab.rb root@192.168.111.4:/etc/gitlab/
  5. [root@labtest ~]# scp /var/opt/gitlab/nginx/conf/nginx.conf root@192.168.111.4:/var/opt/gitlab/nginx/conf/
  6. [root@labtest ~]# scp /etc/postfix/main.cf root@192.168.111.4:/etc/postfix/
  1. [root@labtest ~]# vim +334 /etc/gitlab/gitlab.rb
  2. gitlab_rails['backup_path'] = "/var/opt/gitlab/backup"
  3. #待会我们使用备份工具时,输出文件的保存路径
  4. gitlab_rails['backup_keep_time'] = 604800
  5. #备份文件的保存时间,604800为7天
  6. [root@labtest ~]# gitlab-ctl reconfigure
  7. #重新加载配置
  1. [root@labtest backup]# cd /backup/
  2. [root@labtest backup]# gitlab-rake gitlab:backup:create
  3. #使用以上命令会在/var/opt/gitlab/backup目录下创建一个名称类似为1562501710_2019_07_07_12.0.3_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1393513186是备份创建的日期.
  4. [root@labtest backup]# pwd
  5. /var/opt/gitlab/backup
  6. [root@labtest backup]# ls
  7. 1562501710_2019_07_07_12.0.3_gitlab_backup.tar
  • Gitlab 自动备份

也可以通过crontab使用备份命令实现自动备份:

  1. sudo su -
  2. crontab -e

加入以下, 实现每天凌晨2点进行一次自动备份:

  1. 0 2 * * * cd /backup/ && /opt/gitlab/bin/gitlab-rake gitlab:backup:create
  • Gitlab迁移

迁移如同备份与恢复的步骤一样, 只需要将老服务器/var/opt/gitlab/backup目录下的备份文件拷贝到新服务器上即可(如果你没修改过默认备份目录的话). 但是需要注意的是新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同. 比如新服务器安装的是最新的7.60版本的Gitlab, 那么迁移之前, 最好将老服务器的Gitlab 升级为7.60在进行备份.

  1. [root@labtest backup]# scp /var/opt/gitlab/backup/1562501710_2019_07_07_12.0.3_gitlab_backup.tar root@192.168.111.4:/root/

在另一台机器将该备份移动到指定目录下

  1. [root@lab ~]# mv /root/1562501710_2019_07_07_12.0.3_gitlab_backup.tar /var/opt/gitlab/backups/
  2. [root@lab ~]# chmod 777 /var/opt/gitlab/backups/1562501710_2019_07_07_12.0.3_gitlab_backup.tar
  3. [root@lab ~]# gitlab-ctl stop unicorn
  4. ok: down: unicorn: 0s, normally up
  5. [root@lab ~]# gitlab-ctl stop sidekiq
  6. ok: down: sidekiq: 1s, normally up
  7. #将数据库和队列先关闭
  8. [root@lab ~]# gitlab-rake gitlab:backup:restore
  9. #使用该命令在111.4进行恢复,有询问时输入yes即可
  10. [root@lab ~]# gitlab-ctl start
  11. #重新开启

GitLab修改root用户密码

五.总结

  1. 不满意太多了,但是似乎总是觉得自己没有精力去将它修改的好一点

GitLab初识以及代码迁移的更多相关文章

  1. Gitlab来做代码review

    Gitlab来做代码review 代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现 ...

  2. Jenkins教程(七)实现 GitLab 提交/合并代码触发构建

    楔子 最近公司推行统一构建平台(基于 Jenkins + Kubernetes 插件创建 slave),原来部门自建的 Jenkins 不让用了. 迁移上统一构建平台的最大阻力是前端模块发布的问题: ...

  3. EF CodeFirs 代码迁移、数据迁移

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    标题叫EF CodeFirs 代码迁移.数据迁移. ...

  4. [chrome插件分享] gitlab-tree 更方便的浏览Gitlab上的代码

    说明 经常玩Github的人肯定都知道大名鼎鼎的octotree吧,这款chrome插件可以说是浏览代码的神器,利用左侧的树形菜单可以很方便的打开目录.浏览文件等,加上Github全站本身使用了pja ...

  5. Python3中的新特性(3)——代码迁移与2to3

    1.将代码移植到Python2.6 建议任何要将代码移植到Python3的用户首先将代码移植到Python2.6.Python2.6不仅与Python2.5向后兼容,而且支持Python3中的部分新特 ...

  6. 将 Objective-C 代码迁移到 Swift(Swift 2.0更新)-b

    本节内容包括: 为你的Objective-c代码做好迁移准备 (Preparing Your Objective-C Code for Migration) 迁移过程(The Migration Pr ...

  7. ubuntu下lamp环境配置及将window代码迁移至linux系统

    因为最近要用需要去实现项目中的一个功能,比较好的做法就是在http://i.cnblogs.com/EditPosts.aspx?opt=1linux中实现.所以最近就将自己的代码全部迁移到linux ...

  8. 为什么你需要将代码迁移到ASP.NET Core 2.0?

    随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Stu ...

  9. jenkins如何获取gitlab上的代码

    如何安装jenkins和gitlab我就不重复了,请自行搜索我的博客 那么,jenkins如何获取gitlab上的代码呢? 具体配置步骤如下 1.在gitlab上配置个人访问令牌.注意事项:姓名那里需 ...

随机推荐

  1. time zone list

    GMT UTC WET WET CET CET MET CET ECT CET EET EET MIT Pacific/Apia HST Pacific/Honolulu AST America/An ...

  2. 如何让winrar5压缩的文件能用低版本winrar打开

    https://jingyan.baidu.com/article/39810a2348ab24b636fda681.html 在压缩文件格式选项处点选[RAR4]选项,即之前版本的winrar支持的 ...

  3. 正确删除k8s版本jenkins的pod

    1.kubectl delete -f jenkins-deployment.yaml 或者先删除pod,再删除对应的depllyment 这两步都要执行否则删除pod不管用 2.删除数据目录下的数据 ...

  4. 《Netty实战》源码运行及本地环境搭建

     1.源码路径: GitHub - zzzvvvxxxd/netty-in-action-cn: Netty In Action 中文版 ,中文唯一正版<Netty实战>的代码清单 下载后 ...

  5. Django 之验证和授权

    一.验证和授权概述 Django有一个内置的授权系统.他用来处理用户.分组.权限以及基于cookie的会话系统.Django的授权系统包括验证和授权两个部分.验证是验证这个用户是否是他声称的人(比如用 ...

  6. Java创建线程的两种方法

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  7. synchrnized 和lock的区别

  8. phaser三个学生做题目

    3个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束 public cl ...

  9. ABP中的AutoMapper

    在我们的业务中经常需要使用到类型之间的映射,特别是在和前端页面进行交互的时候,我们需要定义各种类型的Dto,并且需要需要这些Dto和数据库中的实体进行映射,对于有些大对象而言,需要赋值太多的属性,这样 ...

  10. linux服务器搭建lnmp php 微擎环境备用

    以前的时候装个php环境各种的配置麻烦啊,于是乎我就像搜搜一键安装php环境,果然 lamp 和phpstudy 两个环境软件都支持,最后发现lamp 还合胃口就选择了lamp https://lnm ...