Gitlab

安装

Docker 安装

YUM 源安装

vim /etc/yum.repos.d/gitlab-ce.repo

  1. [gitlab-ce]
  2. name=Gitlab CE Repository
  3. baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
  4. gpgcheck=0
  5. enabled=1
  1. yum clean all
  2. yum makecache
  3. #安装依赖
  4. yum -y install curl policycoreutils policycoreutils-python openssh-server openssh-clients postfix
  5. yum -y install gitlab-ce

RPM 文件安装

访问 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 下载 rpm 文件进行安装

  1. wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.1.5-ce.0.el7.x86_64.rpm
  2. rpm -ivh gitlab-ce-14.1.5-ce.0.el7.x86_64.rpm

使用官方提供的方法安装

  1. curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
  2. yum -y install gitlab-ce

配置

配置文件

/etc/gitlab/gitlab.rb
gitlab-ctl reconfigure
配置完成以后,网页访问设置root账户密码,登录,修改中文界面

  1. vim /etc/gitlab/gitlab.rb
  2. ### 基础配置 ###
  3. external_url 'https://gitlab.xxx.cn'
  4. #用户访问所使用的URL,域名或者IP地址
  5. gitlab_rails['time_zone'] = 'Asia/Shanghai'
  6. #时区
  7. ### SSH配置 ###
  8. gitlab_rails['gitlab_shell_ssh_port'] = 10222
  9. #使用SSH协议拉取代码所使用的连接端口。
  10. ### 邮箱配置 ###
  11. gitlab_rails['smtp_enable'] = true
  12. #启用SMTP邮箱功能,绑定一个第三方邮箱,用于邮件发送
  13. gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
  14. #设置SMTP服务器地址
  15. gitlab_rails['smtp_port'] = 465
  16. #设置SMTP服务器端口
  17. gitlab_rails['smtp_user_name'] = "xxx@xxx.cn"
  18. #设置邮箱账号
  19. gitlab_rails['smtp_password'] = "xxx"
  20. #设置邮箱密码
  21. gitlab_rails['smtp_authentication'] = "login"
  22. #设置邮箱账号密码身份验证方式,"login"表示采用账号密码的方式登陆
  23. gitlab_rails['smtp_enable_starttls_auto'] = true
  24. gitlab_rails['smtp_tls'] = true
  25. #设置开启SMTP邮件使用TLS传输加密协议传输邮件,以保证邮件安全传输
  26. gitlab_rails['gitlab_email_from'] = 'xxx@xxx.cn'
  27. #设置Gitlab来源邮箱地址,设置登陆所使用的邮箱地址
  28. ### WEB配置 ###
  29. nginx['enable'] = true
  30. #启用Nginx服务
  31. nginx['client_max_body_size'] = '250m'
  32. #设置客户端最大文件上传大小
  33. nginx['redirect_http_to_https'] = true
  34. #设置开启自动将HTTP跳转到HTTPS
  35. nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.cn.pem"
  36. #设置HTTPS所使用的证书
  37. nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.cn.key"
  38. #设置HTTPS所使用的证书密码
  39. nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2 TLSv1.3"
  40. #设置HTTPS所使用的TLS协议版本
  41. nginx['ssl_session_cache'] = "builtin:1000 shared:SSL:10m"
  42. #设置开启SSL会话缓存功能
  43. nginx['ssl_session_timeout'] = "5m"
  44. #设置SSL会话超时时间
  45. nginx['listen_addresses'] = ['*', '[::]']
  46. #设置Nginx监听地址,"*"表示监听主机上所有网卡的地址
  47. nginx['gzip_enabled'] = true
  48. #设置开启Nginx的传输压缩功能,以节约传输带宽,提高传输效率

当配置文件发生变化时,或者是第一次启动时,我们需要刷新配置。

  1. systemctl restart gitlab-runsvdir
  2. gitlab-ctl reconfigure
  3. gitlab-ctl restart
  4. gitlab-ctl status
  5. gitlab-ctl tail

通过 cat /etc/gitlab/initial_root_password 查看初始密码(文件在 24 小时后删除);
image.png
首次登录修改 root 账户密码,设置中文,关闭用户注册

SSH 密钥

用的是公钥,结合私钥进行验证,用户设置 -> SSH 密钥
image.png

Webhook

image.png

Jenkins

安装

Docker 安装

  1. docker search jenkins
  2. docker pull jenkins/jenkins
  3. mkdir -p /mnt/jenkins_home
  4. #需要修改下目录权限,因为当映射本地数据卷时,/data/jenkins_home/ 目录的拥有者为 root 用户,而容器中 jenkins 用户的 uid 为 1000。
  5. chown -R 1000:1000 /mnt/jenkins_home/
  6. docker run \
  7. --detach \
  8. --publish 8888:8080 \
  9. --publish 50000:50000 \
  10. --name jenkins \
  11. --restart unless-stopped \
  12. -v /mnt/jenkins_home:/var/jenkins_home \
  13. jenkins/jenkins

YUM 源安装

  1. yum install java-1.8.0-openjdk
  2. yum install java-11-openjdk
  3. wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
  4. 导入 rpm 密钥
  5. rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
  6. yum clean all
  7. yum makecache
  8. yum -y install jenkins

报错:“Delta RPMs disabled because /usr/bin/applydeltarpm not installed.”,执行 yum install deltarpm 继续安装
PS.如果报错:No Presto metadata available for Jenkins,这是没有重建 YUM 源缓存,重建继续安装;或者浏览器直接访问 https://get.jenkins.io/redhat/ 下载 rpm 文件安装:

  1. wget https://get.jenkins.io/redhat/jenkins-2.313-1.1.noarch.rpm
  2. rpm -ivh jenkins-2.313-1.1.noarch.rpm

image.png

  1. yum install -y epel-release
  2. yum install -y daemonize

配置文件:/etc/sysconfig/jenkins
程序目录:/usr/lib/jenkins/
rpm -ql jenkins 查询安装路径
注意:如果要修改端口,先修改网页再更改配置文件,否则无法访问。

升级

  1. systemctl stop jenkins
  2. cp /usr/lib/jenkins/jenkins.war /usr/lib/jenkins/jenkins.war.2.288
  3. wget https://updates.jenkins.io/download/war/2.300/jenkins.war
  4. mv jenkins.war /usr/lib/jenkins/jenkins.war
  5. systemctl start jenkins

配置

相关命令

  1. systemctl daemon-reload
  2. systemctl status jenkins
  3. systemctl start jenkins
  4. systemctl stop jenkins
  5. systemctl enable jenkins

初始化

网页访问初始化http://IP:8080/,解锁 Jenkins
cat /var/lib/jenkins/secrets/initialAdminPassword
然后安装相应的插件

邮件通知

安装 Email Extension Template 插件
设置系统管理员邮件地址
移动到邮件通知
image.png
配置要通知的 Job,构建后操作
image.png

汉化不完全

安装好插件 Locale 和 Localization: Chinese (Simplified) 后,先设置为 zh_US 重新启动,再设置回来
其他插件重启 Jenkins 后,又出现了部分中文简体不翻译的情况;方法如下,可以完美修复。

  1. 将语言设定为 zh_US,Jenkins 切换为英文;
  2. 调用 restart 重启 Jenkins:http://域名/restart
  3. 再次语言设定为 zh_CN,刷新即可。

    备份和迁移

    网页登录,系统管理->配置,查看并主目录:/var/jenkins_home,打包需要备份的目录和文件即可

构建

所在服务器需要安装 git 客户端:yum -y install git

Git

服务器生成 SSH 密钥:ssh-keygen -t rsa -b 4096,顺便拷贝到目标服务器做免密码登录:ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip
然后服务器的私钥用来创建 SSH 凭据,点击下图红框按钮进行添加:
image.png
选中“SSH Username with private key”,然后下拉到“Private Key”部分,点击“Add”进行添加。
cat /root/.ssh/id_rsa
image.png

image.png
Gitlab 设置部署密钥
cat /root/.ssh/id_rsa.pub
image.png
image.png

NodeJS

系统管理->全局工具配置->NodeJS->NodeJS 安装,选择需要的版本即可。
npm install —registry=https://registry.npm.taobao.org
image.png

.NET

1.安装插件与环境

编译.NET应用程序可通过微软提供的 MSBuild 工具,先安装插件:MSBuild。
注意:Jenkins 服务器需安装 MSBuild,Windows 系统可以安装 VS 开发工具,构建出问题的时候打开 VS 调试。https://dotnet.microsoft.com/download
Linux 系统先安装 Core 也有 https://docs.microsoft.com/zh-cn/dotnet/core/install/linux

安装 Mono

https://www.mono-project.com/download/stable/#download-lin-centos

  1. rpmkeys --import "http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x3fa7e0328081bff6a14da29aa6a19b38d3d831ef"
  2. su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'
  3. yum install mono-devel mono-complete

上述第一步导入密钥失败,跳过也能安装,后续会自动导入。
image.png

2.全局配置

插件安装完毕后,进入系统管理->全局工具配置(ConfigureTools)找到 MSBuild 配置选项,并点击“新增 MSBuild”按钮:
image.png

运行 **whereis xbuild** 查看 Jenkins 中 Path to MSBuild 的位置:
image.png

报错

Host key verification failed

cat /etc/passwd 可以看到 Jenkins 普通用户无法执行某些系统命令并且没有为 Jenkins生成过密钥对,也没有将公钥拷到目标服务器上。

  1. sed -i 's/jenkins:\/bin\/false/jenkins:\/bin\/bash/g' /etc/passwd
  2. su jenkins
  3. ssh-keygen -t rsa -b 4096
  4. ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub root@IP

/usr/bin/xbuild is not a directory on the Jenkins master (but perhaps it exists on some agents)

Active: active (exited)

image.png
权限问题:
JENKINS_USER=”jenkins” 改为 root

  1. chown -R jenkins:jenkins /var/lib/jenkins
  2. chown -R jenkins:jenkins /var/cache/jenkins
  3. chown -R jenkins:jenkins /var/log/jenkins

上述三个文件夹里面没文件,使用 journalctl -xu jenkins 命令查看错误信息无果,直接运行 war 文件成功;

  1. cd /usr/lib/jenkins/
  2. java -jar /usr/lib/jenkins/jenkins.war

应该是内存不够后台杀进程,添加 swap,并修改 vm.swappiness=30
创建并挂载交换分区
非 root 用户无法监听 80 端口,需要修改的的话,使用 root 运行

Webhook 报错 403

全局设置 -> 关闭防止跨站请求(高版本需要添加以下启动参数):

  1. vim /etc/sysconfig/jenkins
  2. -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true

image.png
image.png

Jenkins 安全设置后报“HTTP Status 404 j_acegi_security_check”,导致无法登录

vim /var/lib/jenkins/congi.xml
false
image.png

备份