背景

遇到一次需要跨云迁移,乘此机会做一波工具迁移和升级,刚好涉及到gitlab;之前已在用gitlab版本为gitlab-ee-13.12.15-ee ,不过并没有付费用到相关企业级的功能,至此打算切回ce版本。


备份

官网备份参考文档: https://gitlab.cn/docs/jh/raketasks/backup_restore.html#备份极狐gitlab

已有gitlab版本高于12.2之上,直接使用以下命令备份即可,gitlab容量越大备份时间越长,当前备份完是生成20G 1734549028_2024_12_19_13.12.15-ee_gitlab_backup.tar 文件,执行备份整个过程预计15分钟左右等待备份完成(据说有小伙伴遇到过400G的数据,整个过程需要1小时起步才能备份完成)

### 备份命令
gitlab-backup create
### 备份默认路径
ls /var/opt/gitlab/backups
### 备份配置文件
cp /etc/gitlab/gitlab.rb /var/opt/gitlab/backups/
cp /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/ #该文件存储了 GitLab 运行所需的敏感信息和密钥,例如数据库密码、JWT 秘钥、CI/CD token、GitLab shell 秘钥等

记一次Gitlab 版本升级_gitlab


部署

注意:

1、当前使用的是腾讯云cvm TencentOS Server release 3.1 (Final),需要使用el8安装rpm,如果使用el7相关rpm会报错,官网下载地址如下:

https://packages.gitlab.com/gitlab/gitlab-ce    社区版本

https://packages.gitlab.com/gitlab/gitlab-ee    企业版

2、ee版本备份文件直接导入ce相同版本会不认,报错如下:

Inpacking backup ... done
itLab version mismatch:
Your current GitLab version (13.12.15) differs from the GitLab version in the backup!Please switch to the following version and try again:version: 13.12.15-ee
int: git checkout v13.12.15-ee

3、版本升级需要按照指定主版本逐步升级,不可随意跨版本升级,升级检测工具如下:

https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/

当前升级目标是17.7.0,期间需要升级版本如下:https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=13.12.15&distro=centos&edition=ce

记一次Gitlab 版本升级_gitlab_02

已下载ce rpm如下:

### rpm -Uvh 更新安装命令 每个版本升级都需要用到
rpm -Uvh gitlab-ce-13.12.15-ce.0.el8.x86_64.rpm
rpm -Uvh gitlab-ce-14.0.12-ce.0.el8.x86_64.rpm
rpm -Uvh gitlab-ce-14.3.6-ce.0.el8.x86_64.rpm
rpm -Uvh gitlab-ce-14.9.5-ce.0.el8.x86_64.rpm
rpm -Uvh gitlab-ce-14.10.5-ce.0.el8.x86_64.rpm   
rpm -Uvh gitlab-ce-15.0.5-ce.0.el8.x86_64.rpm
rpm -Uvh gitlab-ce-15.4.6-ce.0.el8.x86_64.rpm  
rpm -Uvh gitlab-ce-15.11.13-ce.0.el8.x86_64.rpm
rpm -Uvh gitlab-ce-16.3.9-ce.0.el8.x86_64.rpm
rpm -Uvh gitlab-ce-16.7.10-ce.0.el8.x86_64.rpm   
rpm -Uvh gitlab-ce-16.11.10-ce.0.el8.x86_64.rpm   
rpm -Uvh gitlab-ce-17.3.7-ce.0.el8.x86_64.rpm
rpm -Uvh gitlab-ce-17.5.4-ce.0.el8.x86_64.rpm
rpm -Uvh gitlab-ce-17.7.0-ce.0.el8.x86_64.rpm

3、需要先在对端安装相同ee版本,恢复ee版本的备份tar文件

4、gitlab各个大版本所对应的postgresql版本也不一样,具体参考官网如下

 https://gitlab.cn/docs/jh/administration/package_information/postgresql_versions.html

记一次Gitlab 版本升级_gitlab_03

查看当前postgresql版本命令如下:

gitlab-psql --version


准备在迁移机器上安装

配置:8C16G

系统: cvm TencentOS Server release 3.1 (Final)

存储:100G系统盘+600G数据盘,挂载在/data目录

首先准备:gitlab-ee-13.12.15-ee.0.el8.x86_64.rpm

yum install -y curl openssh-server postfix cronie
yum install -y gitlab-ee-13.12.15-ee.0.el8.x86_64.rpm

安装后默认路径如下

安装包的文件存储位置查找:rpm -qa gitlab-ee
/opt/gitlab/ ## 主目录
/etc/gitlab/ ## 放置配置文件
/var/opt/gitlab/ ## 各个组件
/var/log/gitlab/ ## 放置日志文件

执行配置:gitlab-ctl reconfigure
重启gitlab:gitlab-ctl restart
检查gitlab各组件状态:gitlab-ctl status

启动或者停止某个组件,例如:
gitlab-ctl stop nginx
gitlab-ctl start nginx
gitlab-ctl stop postgresql
gitlab-ctl start postgresql

自定义以下路径如下

mkdir -p /data/gitlab-all-in-one/{backups,git-data,var-opt-gitlab}
useradd git && chown -R git.git /data/gitlab-all-in-one

说明:

git-data:gitlab 代码数据目录。
backups:数据备份目录。
var-opt-gitlab:组件数据目录。


注意组件数据目录在配置文件中默认为:/var/opt/gitlab,为了与系统盘进行隔离以及数据存储目录统一,需要进行本地挂载处理:挂载指定路径:

echo '/data/gitlab-all-in-one/var-opt-gitlab  /var/opt/gitlab  none bind 0 0' >> /etc/fstab
mkdir /var/opt/gitlab
mount -a

注意:这里并不能通过软链进行处理,实测软链的方式会导致部分组件起不来


配置文件

external_url 'http://'
gitlab_rails['time_zone'] = 'Asia/Shanghai'

gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab-all-in-one/backups"
git_data_dirs({
  "default" => {
    "path" => "/data/gitlab-all-in-one/git-data"
   }
})
## Limit backup lifetime to 7 days - 604800 seconds
gitlab_rails['backup_keep_time'] = 604800

# disable projects features builds
gitlab_rails['gitlab_default_projects_features_builds'] = false

## LDAP ##
gitlab_rails['ldap_enabled'] = true
gitlab_rails['prevent_ldap_sign_in'] = false
gitlab_rails['ldap_servers'] = {
'main' => {
  'label' => 'LDAP',
  'host' =>  'xxx.xxx.xxx.xxx',
  'port' => 389,
  'uid' => 'uid',
  'encryption' => 'plain',
  'verify_certificates' => true,
  'bind_dn' => 'cn=admin,dc=xxx,dc=com',
  'password' => 'xxx',
  'verify_certificates' => true,
  'tls_options' => {
    'ca_file' => '',
    'ssl_version' => '',
    'ciphers' => '',
    'cert' => '',
    'key' => ''
  },
  'timeout' => 10,
  'active_directory' => true,
  'allow_username_or_email_login' => false,
  'block_auto_created_users' => false,
  'base' => 'ou=People,dc=xxx,dc=com',
  'user_filter' => '',
  'attributes' => {
    'username' => ['uid'],
    'email' => ['mail'],
    'name' => 'cn',
    'first_name' => 'givenName',
    'last_name' => 'sn'
  },
  'lowercase_usernames' => false,
# EE Only
  'group_base' => '',
  'admin_group' => '',
  'external_groups' => [],
  'sync_ssh_keys' => false
  }
}

## Email
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = ""
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "devops@"
gitlab_rails['smtp_password'] = "xxx"
gitlab_rails['smtp_domain'] = "devops"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'devops@'

nginx['enable'] = true
nginx['client_max_body_size'] = '512m'
nginx['redirect_http_to_https'] = true
#nginx['ssl_certificate'] = "/data/gitlab-all-in-one/ssl/_bundle.pem"
#nginx['ssl_certificate_key'] = "/data/gitlab-all-in-one/ssl/.key"

当前gitlab自身并未开启https,而是在前面CLB那里做的强跳。

gitlab.rb配置文件更新后需要执行以下命令:

注意: gitlab-ctl reconfigure 时候遇到logrotate这个位置一直卡折或者直接报错,或者报错如下:

### logrotate启动失败
[execute] fail: logrotate: runsv not running /opt/gitlab/bin/gitlab-ctl start
/opt/gitlab/embedded/bin/runsvdir-start &

需要启动服务如下

### 组件
systemctl start plymouth-quit-wait.service
systemctl start gitlab-runsvdir.service
### 配置文件重载
gitlab-ctl reconfigure

### 启动
gitlab-ctl restart

### 查看gitlab组件是否正常
gitlab-ctl status

验证邮箱是否正常发送:

gitlab]# gitlab-rails console 
Notify.test_email('devops@', '邮件标题', '邮件正文').deliver_now

恢复备份文件

备份文件恢复不单单只是tar文件,还有包括/etc/gitlab/gitlab.rb和/etc/gitlab/gitlab-secrets.json。

gitlab.rb 主要用于定义 GitLab 实例的各项配置,包括服务端口、URL、存储路径、备份配置、邮件设置等。

gitlab-secrets.json 该文件存储了 GitLab 运行所需的敏感信息和密钥,例如数据库密码、JWT 秘钥、CI/CD token、GitLab shell 秘钥等;没有用导入导出的方式主要是为了保留密钥

准备恢复之前需要修改postgresql相关配置文件,要不然恢复会报错如下:

Removing all tables. Press Ctrl-C within 5 seconds to abort
2024-12-20 12:28:02 +0800 -- Cleaning the database ...
2024-12-20 12:28:05 +0800 -- done
2024-12-20 12:28:05 +0800 -- Restoring database ...
Restoring PostgreSQL database gitlabhq_production ... ERROR:  must be owner of extension pg_trgm
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension pg_trgm

解决方法:

### postgresql文件
vim /var/opt/gitlab/postgresql/data/postgresql.conf
  
listen_addresses = '*'    # what IP address(es) to listen on;
  
# 以下配置文件新增以下两行
vim /var/opt/gitlab/postgresql/data/pg_hba.conf
  
local   all         all                               trust
host    all         all                               127.0.0.1/32 trust

配置文件修改完后需要重启postgresql组件

gitlab-ctl restart postgresql

给postgresql添加用户:

su - gitlab-psql
 
/opt/gitlab/embedded/bin/psql -h 127.0.0.1 gitlabhq_production
 
gitlabhq_production=# ALTER USER gitlab WITH SUPERUSER;
 
ALTER ROLE
 
gitlabhq_production=# \q
 
exit


当前安装的 gitlab-ee-13.12.15-ee 版本恢复备份文件基本不会有问题,除非tar文件在备份的时候不玩这个或者有损坏

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始恢复备份,当前20GB 恢复需要15分钟左右,耐心等待
gitlab-backup restore BACKUP=1734549028_2024_12_19_13.12.15-ee

### 恢复配置文件
cp /var/opt/gitlab/backups/gitlab.rb /etc/gitlab/gitlab.rb 
cp /var/opt/gitlab/backups/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json  #该文件存储了 GitLab 运行所需的敏感信息和密钥,例如数据库密码、JWT 秘钥、CI/CD token、GitLab shell 秘钥等

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

### 查看服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace

### 顺便可以时刻关注postgresql版本
gitlab-psql --version


逐步gitlab版本升级步骤

gitlab-ee-13.12.15-ee转gitlab-ee-13.12.15-ce

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-13.12.15-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version


gitlab-ce-13.12.15-ce升级到gitlab-ce-14.0.12-ce

### 备份
gitlab-backup create

### 配置文件备份
cp /etc/gitlab/gitlab.rb /var/opt/gitlab/backups/
cp /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/ #该文件存储了 GitLab 运行所需的敏感信息和密钥,例如数据库密码、JWT 秘钥、CI/CD token、GitLab shell 秘钥等

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-14.0.12-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version

gitlab-ce-14.0.12-ce升级到gitlab-ce-14.3.6-ce

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-14.3.6-ce.0.el8.x86_64.rpm

gitlab-ctl reconfigure之后整个版本更新会提示以下引导,如下:

Running handlers:
There was an error running gitlab-ctl reconfigure:

rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash[migrate gitlab-rails database] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20241223-753948-1w66dbp" ----
STDOUT: == 20210317210338 AddValidRunnerRegistrars: migrating =========================
-- add_column(:application_settings, :valid_runner_registrars, :string, {:array=>true, :default=>["project", "group"]})
   -> 0.0136s
== 20210317210338 AddValidRunnerRegistrars: migrated (0.0136s) ================

== 20210601132134 RemovePartialIndexForHashedStorageMigration: migrating ======
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:projects, :id, {:name=>"index_on_id_partial_with_legacy_storage", :algorithm=>:concurrently})
   -> 0.0122s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- remove_index(:projects, {:name=>"index_on_id_partial_with_legacy_storage", :algorithm=>:concurrently, :column=>:id})
   -> 0.0160s
-- execute("RESET statement_timeout")
   -> 0.0002s
== 20210601132134 RemovePartialIndexForHashedStorageMigration: migrated (0.0291s)

== 20210602155056 AddMergeRequestDiffCommitUsers: migrating ===================
-- create_table(:merge_request_diff_commit_users, {:id=>:bigint})
-- quote_column_name(:name)
   -> 0.0000s
-- quote_column_name(:email)
   -> 0.0000s
   -> 0.0296s
-- quote_table_name("check_147358fc42")
   -> 0.0000s
-- quote_table_name("check_f5fa206cf7")
   -> 0.0000s
-- quote_table_name(:merge_request_diff_commit_users)
   -> 0.0000s
-- execute("ALTER TABLE \"merge_request_diff_commit_users\"\nADD CONSTRAINT \"check_147358fc42\" CHECK (char_length(\"name\") <= 512),\nADD CONSTRAINT \"check_f5fa206cf7\" CHECK (char_length(\"email\") <= 512)\n")
   -> 0.0016s
-- transaction_open?()
   -> 0.0000s
-- current_schema()
   -> 0.0001s
-- execute("ALTER TABLE merge_request_diff_commit_users\nADD CONSTRAINT merge_request_diff_commit_users_name_or_email_existence\nCHECK ( (COALESCE(name, '') != '') OR (COALESCE(email, '') != '') )\nNOT VALID;\n")
   -> 0.0003s
-- current_schema()
   -> 0.0001s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE merge_request_diff_commit_users VALIDATE CONSTRAINT merge_request_diff_commit_users_name_or_email_existence;")
   -> 0.0008s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210602155056 AddMergeRequestDiffCommitUsers: migrated (0.0515s) ==========

== 20210602155110 AddMergeRequestDiffCommitUserColumns: migrating =============
-- add_column(:merge_request_diff_commits, :commit_author_id, :bigint)
   -> 0.0012s
-- add_column(:merge_request_diff_commits, :committer_id, :bigint)
   -> 0.0007s
== 20210602155110 AddMergeRequestDiffCommitUserColumns: migrated (0.0020s) ====

== 20210602164044 ScheduleLatestPipelineIdPopulation: migrating ===============
== 20210602164044 ScheduleLatestPipelineIdPopulation: migrated (0.0000s) ======

== 20210604032738 CreateDastSiteProfilesBuilds: migrating =====================
-- create_table(:dast_site_profiles_builds, {:primary_key=>[:dast_site_profile_id, :ci_build_id], :comment=>"{\"owner\":\"group::dynamic analysis\",\"description\":\"Join table between DAST Site Profiles and CI Builds\"}"})
   -> 0.0087s
== 20210604032738 CreateDastSiteProfilesBuilds: migrated (0.0088s) ============

== 20210604034158 AddCiBuildIdFkToDastSiteProfilesBuilds: migrating ===========
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:dast_site_profiles_builds)
   -> 0.0044s
-- execute("ALTER TABLE dast_site_profiles_builds\nADD CONSTRAINT fk_a325505e99\nFOREIGN KEY (ci_build_id)\nREFERENCES ci_builds (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0041s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE dast_site_profiles_builds VALIDATE CONSTRAINT fk_a325505e99;")
   -> 0.0018s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210604034158 AddCiBuildIdFkToDastSiteProfilesBuilds: migrated (0.0127s) ==

== 20210604034354 AddDastSiteProfileIdFkToDastSiteProfilesBuilds: migrating ===
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:dast_site_profiles_builds)
   -> 0.0040s
-- execute("ALTER TABLE dast_site_profiles_builds\nADD CONSTRAINT fk_94e80df60e\nFOREIGN KEY (dast_site_profile_id)\nREFERENCES dast_site_profiles (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0022s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE dast_site_profiles_builds VALIDATE CONSTRAINT fk_94e80df60e;")
   -> 0.0026s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210604034354 AddDastSiteProfileIdFkToDastSiteProfilesBuilds: migrated (0.0111s)

== 20210604051330 CreateDastScannerProfilesBuilds: migrating ==================
-- create_table(:dast_scanner_profiles_builds, {:primary_key=>[:dast_scanner_profile_id, :ci_build_id], :comment=>"{\"owner\":\"group::dynamic analysis\",\"description\":\"Join table between DAST Scanner Profiles and CI Builds\"}"})
   -> 0.0058s
== 20210604051330 CreateDastScannerProfilesBuilds: migrated (0.0059s) =========

== 20210604051742 AddCiBuildIdFkToDastScannerProfilesBuilds: migrating ========
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:dast_scanner_profiles_builds)
   -> 0.0039s
-- execute("ALTER TABLE dast_scanner_profiles_builds\nADD CONSTRAINT fk_e4c49200f8\nFOREIGN KEY (ci_build_id)\nREFERENCES ci_builds (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0014s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE dast_scanner_profiles_builds VALIDATE CONSTRAINT fk_e4c49200f8;")
   -> 0.0010s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210604051742 AddCiBuildIdFkToDastScannerProfilesBuilds: migrated (0.0091s)

== 20210604051917 AddDastScannerProfileIdFkToDastScannerProfilesBuilds: migrating
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:dast_scanner_profiles_builds)
   -> 0.0039s
-- execute("ALTER TABLE dast_scanner_profiles_builds\nADD CONSTRAINT fk_5d46286ad3\nFOREIGN KEY (dast_scanner_profile_id)\nREFERENCES dast_scanner_profiles (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0004s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE dast_scanner_profiles_builds VALIDATE CONSTRAINT fk_5d46286ad3;")
   -> 0.0019s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210604051917 AddDastScannerProfileIdFkToDastScannerProfilesBuilds: migrated (0.0082s)

== 20210604133651 ScheduleMergeRequestDiffUsersBackgroundMigration: migrating =
== 20210604133651 ScheduleMergeRequestDiffUsersBackgroundMigration: migrated (0.0000s)

== 20210609202501 ScheduleBackfillDraftStatusOnMergeRequests: migrating =======
== 20210609202501 ScheduleBackfillDraftStatusOnMergeRequests: migrated (0.0000s)

== 20210610042700 RemoveClustersApplicationsFluentdTable: migrating ===========
-- drop_table(:clusters_applications_fluentd)
   -> 0.0189s
== 20210610042700 RemoveClustersApplicationsFluentdTable: migrated (0.0190s) ==

== 20210610153556 DeleteLegacyOperationsFeatureFlags: migrating ===============
-- execute("DELETE FROM operations_feature_flags WHERE version = 1")
   -> 0.0024s
== 20210610153556 DeleteLegacyOperationsFeatureFlags: migrated (0.0024s) ======

== 20210611082822 AddPagesFileEntriesToPlanLimits: migrating ==================
-- add_column(:plan_limits, :pages_file_entries, :integer, {:default=>200000, :null=>false})
   -> 0.0022s
== 20210611082822 AddPagesFileEntriesToPlanLimits: migrated (0.0027s) =========

== 20210611101034 AddDevopsAdoptionSastDast: migrating ========================
-- add_column(:analytics_devops_adoption_snapshots, :sast_enabled_count, :integer)
   -> 0.0010s
-- add_column(:analytics_devops_adoption_snapshots, :dast_enabled_count, :integer)
   -> 0.0002s
== 20210611101034 AddDevopsAdoptionSastDast: migrated (0.0012s) ===============

== 20210614124111 AddDevopsAdoptionSastDastIndexes: migrating =================
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:ci_job_artifacts, [:project_id, :created_at], {:where=>"file_type = 5", :name=>"index_ci_job_artifacts_sast_for_devops_adoption", :algorithm=>:concurrently})
   -> 0.0024s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index(:ci_job_artifacts, [:project_id, :created_at], {:where=>"file_type = 5", :name=>"index_ci_job_artifacts_sast_for_devops_adoption", :algorithm=>:concurrently})
   -> 0.0121s
-- execute("RESET statement_timeout")
   -> 0.0001s
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:ci_job_artifacts, [:project_id, :created_at], {:where=>"file_type = 8", :name=>"index_ci_job_artifacts_dast_for_devops_adoption", :algorithm=>:concurrently})
   -> 0.0028s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index(:ci_job_artifacts, [:project_id, :created_at], {:where=>"file_type = 8", :name=>"index_ci_job_artifacts_dast_for_devops_adoption", :algorithm=>:concurrently})
   -> 0.0099s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210614124111 AddDevopsAdoptionSastDastIndexes: migrated (0.0286s) ========

== 20210614142311 AddRunningContainerScanningMaxSizeToPlanLimits: migrating ===
-- add_column(:plan_limits, :ci_max_artifact_size_running_container_scanning, :integer, {:null=>false, :default=>0})
   -> 0.0011s
== 20210614142311 AddRunningContainerScanningMaxSizeToPlanLimits: migrated (0.0012s)

== 20210615064342 AddIssueIdToRequirement: migrating ==========================
-- add_column(:requirements, :issue_id, :bigint, {:null=>true})
   -> 0.0008s
== 20210615064342 AddIssueIdToRequirement: migrated (0.0019s) =================

== 20210615234935 FixBatchedMigrationsOldFormatJobArguments: migrating ========
== 20210615234935 FixBatchedMigrationsOldFormatJobArguments: migrated (0.0147s)

== 20210616110748 AddIssueIndexToRequirement: migrating =======================
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:requirements, :issue_id, {:name=>"index_requirements_on_issue_id", :unique=>true, :algorithm=>:concurrently})
   -> 0.0019s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index(:requirements, :issue_id, {:name=>"index_requirements_on_issue_id", :unique=>true, :algorithm=>:concurrently})
   -> 0.0047s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210616110748 AddIssueIndexToRequirement: migrated (0.0077s) ==============

== 20210616111311 AddIssueRequirementForeignKey: migrating ====================
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:requirements)
   -> 0.0039s
-- execute("ALTER TABLE requirements\nADD CONSTRAINT fk_85044baef0\nFOREIGN KEY (issue_id)\nREFERENCES issues (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0018s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE requirements VALIDATE CONSTRAINT fk_85044baef0;")
   -> 0.0179s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210616111311 AddIssueRequirementForeignKey: migrated (0.0262s) ===========

== 20210616134905 AddTimestampToSchemaMigration: migrating ====================
-- add_column(:schema_migrations, :finished_at, :timestamptz)
   -> 0.0013s
-- change_column_default(:schema_migrations, :finished_at, #<Proc:0x00007f1ab1008fe8 /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20210616134905_add_timestamp_to_schema_migration.rb:9 (lambda)>)
   -> 0.0018s
== 20210616134905 AddTimestampToSchemaMigration: migrated (0.0031s) ===========

== 20210616145254 AddPartialIndexForCiBuildsToken: migrating ==================
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:ci_builds, :token, {:unique=>true, :where=>"token IS NOT NULL", :name=>"index_ci_builds_on_token_partial", :algorithm=>:concurrently})
   -> 0.0074s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index(:ci_builds, :token, {:unique=>true, :where=>"token IS NOT NULL", :name=>"index_ci_builds_on_token_partial", :algorithm=>:concurrently})
   -> 0.0322s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210616145254 AddPartialIndexForCiBuildsToken: migrated (0.0405s) =========

== 20210616154808 RemoveCiBuildProtectedIndex: migrating ======================
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:ci_builds, :protected, {:name=>"index_ci_builds_on_protected", :algorithm=>:concurrently})
   -> 0.0069s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- remove_index(:ci_builds, {:name=>"index_ci_builds_on_protected", :algorithm=>:concurrently, :column=>:protected})
   -> 0.0091s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210616154808 RemoveCiBuildProtectedIndex: migrated (0.0174s) =============

== 20210616185947 AddMailgunSettingsToApplicationSetting: migrating ===========
-- add_column(:application_settings, :encrypted_mailgun_signing_key, :binary)
   -> 0.0012s
-- add_column(:application_settings, :encrypted_mailgun_signing_key_iv, :binary)
   -> 0.0003s
-- add_column(:application_settings, :mailgun_events_enabled, :boolean, {:default=>false, :null=>false})
   -> 0.0025s
== 20210616185947 AddMailgunSettingsToApplicationSetting: migrated (0.0041s) ==

== 20210617022324 CreateIncidentManagementPendingAlertEscalations: migrating ==
-- execute("\nCREATE TABLE incident_management_pending_alert_escalations (\n  id bigserial NOT NULL,\n  rule_id bigint,\n  alert_id bigint NOT NULL,\n  schedule_id bigint NOT NULL,\n  process_at timestamp with time zone NOT NULL,\n  created_at timestamp with time zone NOT NULL,\n  updated_at timestamp with time zone NOT NULL,\n  status smallint NOT NULL,\n  PRIMARY KEY (id, process_at)\n) PARTITION BY RANGE (process_at);\n\nCREATE INDEX index_incident_management_pending_alert_escalations_on_alert_id\n  ON incident_management_pending_alert_escalations USING btree (alert_id);\n\nCREATE INDEX index_incident_management_pending_alert_escalations_on_rule_id\n  ON incident_management_pending_alert_escalations USING btree (rule_id);\n\nCREATE INDEX index_incident_management_pending_alert_escalations_on_schedule_id\n  ON incident_management_pending_alert_escalations USING btree (schedule_id);\n\nALTER TABLE incident_management_pending_alert_escalations ADD CONSTRAINT fk_rails_fcbfd9338b\n  FOREIGN KEY (schedule_id) REFERENCES incident_management_oncall_schedules(id) ON DELETE CASCADE;\n\nALTER TABLE incident_management_pending_alert_escalations ADD CONSTRAINT fk_rails_057c1e3d87\n  FOREIGN KEY (rule_id) REFERENCES incident_management_escalation_rules(id) ON DELETE SET NULL;\n\nALTER TABLE incident_management_pending_alert_escalations ADD CONSTRAINT fk_rails_8d8de95da9\n  FOREIGN KEY (alert_id) REFERENCES alert_management_alerts(id) ON DELETE CASCADE;\n")
   -> 0.0104s
== 20210617022324 CreateIncidentManagementPendingAlertEscalations: migrated (0.0114s)

== 20210617161348 CascadeDeleteFreezePeriods: migrating =======================
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:ci_freeze_periods)
   -> 0.0040s
-- execute("ALTER TABLE ci_freeze_periods\nADD CONSTRAINT fk_2e02bbd1a6\nFOREIGN KEY (project_id)\nREFERENCES projects (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0034s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE ci_freeze_periods VALIDATE CONSTRAINT fk_2e02bbd1a6;")
   -> 0.0031s
-- execute("RESET statement_timeout")
   -> 0.0001s
-- foreign_keys(:ci_freeze_periods)
   -> 0.0038s
-- remove_foreign_key(:ci_freeze_periods, :projects, {:column=>:project_id, :name=>"fk_rails_2e02bbd1a6"})
   -> 0.0070s
== 20210617161348 CascadeDeleteFreezePeriods: migrated (0.0240s) ==============

== 20210617180131 MigrateUsagePingSidekiqQueue: migrating =====================
== 20210617180131 MigrateUsagePingSidekiqQueue: migrated (0.0007s) ============

== 20210621043337 RenameServicesToIntegrations: migrating =====================
-- execute("LOCK services IN ACCESS EXCLUSIVE MODE")
   -> 0.0001s
-- execute("DROP TRIGGER IF EXISTS trigger_has_external_wiki_on_insert ON services")
   -> 0.0006s
-- execute("DROP TRIGGER IF EXISTS trigger_has_external_wiki_on_update ON services")
   -> 0.0001s
-- execute("DROP TRIGGER IF EXISTS trigger_has_external_wiki_on_delete ON services")
   -> 0.0001s
-- execute("DROP TRIGGER IF EXISTS trigger_has_external_issue_tracker_on_insert ON services")
   -> 0.0001s
-- execute("DROP TRIGGER IF EXISTS trigger_has_external_issue_tracker_on_update ON services")
   -> 0.0001s
-- execute("DROP TRIGGER IF EXISTS trigger_has_external_issue_tracker_on_delete ON services")
   -> 0.0003s
-- transaction()
-- rename_table(:services, :integrations)
   -> 0.0252s
-- execute("CREATE VIEW services AS SELECT * FROM integrations")
   -> 0.0062s
   -> 0.0315s
-- execute("CREATE TRIGGER trigger_has_external_wiki_on_insert\nAFTER INSERT ON integrations\nFOR EACH ROW\nWHEN (NEW.active = TRUE AND NEW.type = 'ExternalWikiService' AND NEW.project_id IS NOT NULL)\nEXECUTE FUNCTION set_has_external_wiki();\n")
   -> 0.0036s
-- execute("CREATE TRIGGER trigger_has_external_wiki_on_update\nAFTER UPDATE ON integrations\nFOR EACH ROW\nWHEN (NEW.type = 'ExternalWikiService' AND OLD.active != NEW.active AND NEW.project_id IS NOT NULL)\nEXECUTE FUNCTION set_has_external_wiki();\n")
   -> 0.0003s
-- execute("CREATE TRIGGER trigger_has_external_wiki_on_delete\nAFTER DELETE ON integrations\nFOR EACH ROW\nWHEN (OLD.type = 'ExternalWikiService' AND OLD.project_id IS NOT NULL)\nEXECUTE FUNCTION set_has_external_wiki();\n")
   -> 0.0002s
-- execute("CREATE OR REPLACE FUNCTION set_has_external_issue_tracker()\nRETURNS TRIGGER AS\n$$\nBEGIN\nUPDATE projects SET has_external_issue_tracker = (\n  EXISTS\n  (\n    SELECT 1\n    FROM integrations\n    WHERE project_id = COALESCE(NEW.project_id, OLD.project_id)\n      AND active = TRUE\n      AND category = 'issue_tracker'\n  )\n)\nWHERE projects.id = COALESCE(NEW.project_id, OLD.project_id);\nRETURN NULL;\n\nEND\n$$ LANGUAGE PLPGSQL\n")
   -> 0.0011s
-- execute("CREATE TRIGGER trigger_has_external_issue_tracker_on_insert\nAFTER INSERT ON integrations\nFOR EACH ROW\nWHEN (NEW.category = 'issue_tracker' AND NEW.active = TRUE AND NEW.project_id IS NOT NULL)\nEXECUTE FUNCTION set_has_external_issue_tracker();\n")
   -> 0.0004s
-- execute("CREATE TRIGGER trigger_has_external_issue_tracker_on_update\nAFTER UPDATE ON integrations\nFOR EACH ROW\nWHEN (NEW.category = 'issue_tracker' AND OLD.active != NEW.active AND NEW.project_id IS NOT NULL)\nEXECUTE FUNCTION set_has_external_issue_tracker();\n")
   -> 0.0002s
-- execute("CREATE TRIGGER trigger_has_external_issue_tracker_on_delete\nAFTER DELETE ON integrations\nFOR EACH ROW\nWHEN (OLD.category = 'issue_tracker' AND OLD.active = TRUE AND OLD.project_id IS NOT NULL)\nEXECUTE FUNCTION set_has_external_issue_tracker();\n")
   -> 0.0002s
== 20210621043337 RenameServicesToIntegrations: migrated (0.0391s) ============

== 20210621044000 RenameServicesIndexesToIntegrations: migrating ==============
-- execute("ALTER INDEX IF EXISTS \"index_services_on_project_and_type_where_inherit_null\" RENAME TO \"index_integrations_on_project_and_type_where_inherit_null\"\n")
   -> 0.0003s
-- execute("ALTER INDEX IF EXISTS \"index_services_on_project_id_and_type_unique\" RENAME TO \"index_integrations_on_project_id_and_type_unique\"\n")
   -> 0.0001s
-- execute("ALTER INDEX IF EXISTS \"index_services_on_template\" RENAME TO \"index_integrations_on_template\"\n")
   -> 0.0001s
-- execute("ALTER INDEX IF EXISTS \"index_services_on_type\" RENAME TO \"index_integrations_on_type\"\n")
   -> 0.0001s
-- execute("ALTER INDEX IF EXISTS \"index_services_on_type_and_instance_partial\" RENAME TO \"index_integrations_on_type_and_instance_partial\"\n")
   -> 0.0001s
-- execute("ALTER INDEX IF EXISTS \"index_services_on_type_and_template_partial\" RENAME TO \"index_integrations_on_type_and_template_partial\"\n")
   -> 0.0001s
-- execute("ALTER INDEX IF EXISTS \"index_services_on_type_id_when_active_and_project_id_not_null\" RENAME TO \"index_integrations_on_type_id_when_active_and_project_id_not_null\"\n")
   -> 0.0001s
-- execute("ALTER INDEX IF EXISTS \"index_services_on_unique_group_id_and_type\" RENAME TO \"index_integrations_on_unique_group_id_and_type\"\n")
   -> 0.0001s
== 20210621044000 RenameServicesIndexesToIntegrations: migrated (0.0010s) =====

== 20210621084632 AddSummaryToTimelogs: migrating =============================
-- add_column(:timelogs, :summary, :text)
   -> 0.0052s
== 20210621084632 AddSummaryToTimelogs: migrated (0.0052s) ====================

== 20210621090030 AddTextLimitToTimelogsSummary: migrating ====================
-- transaction_open?()
   -> 0.0000s
-- current_schema()
   -> 0.0001s
-- execute("ALTER TABLE timelogs\nADD CONSTRAINT check_271d321699\nCHECK ( char_length(summary) <= 255 )\nNOT VALID;\n")
   -> 0.0003s
-- current_schema()
   -> 0.0001s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE timelogs VALIDATE CONSTRAINT check_271d321699;")
   -> 0.0015s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210621090030 AddTextLimitToTimelogsSummary: migrated (0.0047s) ===========

== 20210621091830 AddDevopsAdoptionSnapshotDependencyScanning: migrating ======
-- add_column(:analytics_devops_adoption_snapshots, :dependency_scanning_enabled_count, :integer)
   -> 0.0004s
== 20210621091830 AddDevopsAdoptionSnapshotDependencyScanning: migrated (0.0004s)

== 20210621111747 AddCiArtifactsDevopsAdoptionIndex: migrating ================
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:ci_job_artifacts, [:file_type, :project_id, :created_at], {:name=>"index_ci_job_artifacts_on_file_type_for_devops_adoption", :where=>"file_type IN (5,6,8,23)", :algorithm=>:concurrently})
   -> 0.0027s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index(:ci_job_artifacts, [:file_type, :project_id, :created_at], {:name=>"index_ci_job_artifacts_on_file_type_for_devops_adoption", :where=>"file_type IN (5,6,8,23)", :algorithm=>:concurrently})
   -> 0.0074s
-- execute("RESET statement_timeout")
   -> 0.0007s
== 20210621111747 AddCiArtifactsDevopsAdoptionIndex: migrated (0.0114s) =======

== 20210621155328 ReplaceProjectAuthorizationsProjectIdIndex: migrating =======
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:project_authorizations, [:project_id, :user_id], {:name=>"index_project_authorizations_on_project_id_user_id", :algorithm=>:concurrently})
   -> 0.0009s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index(:project_authorizations, [:project_id, :user_id], {:name=>"index_project_authorizations_on_project_id_user_id", :algorithm=>:concurrently})
   -> 0.0172s
-- execute("RESET statement_timeout")
   -> 0.0001s
-- transaction_open?()
   -> 0.0000s
-- indexes(:project_authorizations)
   -> 0.0010s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- remove_index(:project_authorizations, {:algorithm=>:concurrently, :name=>"index_project_authorizations_on_project_id"})
   -> 0.0030s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210621155328 ReplaceProjectAuthorizationsProjectIdIndex: migrated (0.0247s)

== 20210621164210 DropRemoveOnCloseFromLabels: migrating ======================
-- column_exists?(:labels, :remove_on_close)
   -> 0.0019s
-- remove_column(:labels, :remove_on_close)
   -> 0.0016s
== 20210621164210 DropRemoveOnCloseFromLabels: migrated (0.0049s) =============

== 20210621223000 StealBackgroundJobsThatReferenceServices: migrating =========
== 20210621223000 StealBackgroundJobsThatReferenceServices: migrated (0.0058s)

== 20210621223242 FinalizeRenameServicesToIntegrations: migrating =============
-- transaction()
-- execute("DROP VIEW IF EXISTS services")
   -> 0.0011s
   -> 0.0012s
== 20210621223242 FinalizeRenameServicesToIntegrations: migrated (0.0012s) ====

== 20210622041846 FinalizePushEventPayloadsBigintConversion: migrating ========
== 20210622041846 FinalizePushEventPayloadsBigintConversion: migrated (0.0007s)

== 20210622045705 FinalizeEventsBigintConversion: migrating ===================
-- transaction_open?()
   -> 0.0000s
-- index_exists?("events", :id_convert_to_bigint, {:unique=>true, :name=>"index_events_on_id_convert_to_bigint", :algorithm=>:concurrently})
   -> 0.0032s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index("events", :id_convert_to_bigint, {:unique=>true, :name=>"index_events_on_id_convert_to_bigint", :algorithm=>:concurrently})
   -> 0.0435s
-- execute("RESET statement_timeout")
   -> 0.0002s
-- transaction_open?()
   -> 0.0000s
-- index_exists?("events", [:project_id, :id_convert_to_bigint], {:name=>"index_events_on_project_id_and_id_convert_to_bigint", :algorithm=>:concurrently})
   -> 0.0032s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index("events", [:project_id, :id_convert_to_bigint], {:name=>"index_events_on_project_id_and_id_convert_to_bigint", :algorithm=>:concurrently})
   -> 0.0473s
-- execute("RESET statement_timeout")
   -> 0.0002s
-- transaction_open?()
   -> 0.0000s
-- index_exists?("events", [:project_id, :id_convert_to_bigint], {:order=>{:id_convert_to_bigint=>:desc}, :where=>"action = 7", :name=>"index_events_on_project_id_and_id_bigint_desc_on_merged_action", :algorithm=>:concurrently})
   -> 0.0036s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index("events", [:project_id, :id_convert_to_bigint], {:order=>{:id_convert_to_bigint=>:desc}, :where=>"action = 7", :name=>"index_events_on_project_id_and_id_bigint_desc_on_merged_action", :algorithm=>:concurrently})
   -> 0.0115s
-- execute("RESET statement_timeout")
   -> 0.0001s
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:push_event_payloads)
   -> 0.0039s
-- execute("LOCK TABLE events, push_event_payloads IN SHARE ROW EXCLUSIVE MODE")
   -> 0.0001s
-- execute("ALTER TABLE push_event_payloads\nADD CONSTRAINT fk_36c74129da_tmp\nFOREIGN KEY (event_id)\nREFERENCES events (id_convert_to_bigint)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0013s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE push_event_payloads VALIDATE CONSTRAINT fk_36c74129da_tmp;")
   -> 0.0125s
-- execute("RESET statement_timeout")
   -> 0.0007s
-- execute("LOCK TABLE events, push_event_payloads IN ACCESS EXCLUSIVE MODE")
   -> 0.0001s
-- quote_table_name("events")
   -> 0.0000s
-- quote_column_name(:id)
   -> 0.0000s
-- quote_column_name("id_tmp")
   -> 0.0000s
-- execute("ALTER TABLE \"events\" RENAME COLUMN \"id\" TO \"id_tmp\"")
   -> 0.0002s
-- quote_table_name("events")
   -> 0.0000s
-- quote_column_name(:id_convert_to_bigint)
   -> 0.0000s
-- quote_column_name(:id)
   -> 0.0000s
-- execute("ALTER TABLE \"events\" RENAME COLUMN \"id_convert_to_bigint\" TO \"id\"")
   -> 0.0001s
-- quote_table_name("events")
   -> 0.0000s
-- quote_column_name("id_tmp")
   -> 0.0000s
-- quote_column_name(:id_convert_to_bigint)
   -> 0.0000s
-- execute("ALTER TABLE \"events\" RENAME COLUMN \"id_tmp\" TO \"id_convert_to_bigint\"")
   -> 0.0008s
-- quote_table_name("trigger_69523443cc10")
   -> 0.0000s
-- execute("ALTER FUNCTION \"trigger_69523443cc10\" RESET ALL")
   -> 0.0002s
-- execute("ALTER SEQUENCE events_id_seq OWNED BY ")
   -> 0.0002s
-- change_column_default("events", :id, #<Proc:0x00007f1ab1cab318 /opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20210622045705_finalize_events_bigint_conversion.rb:68 (lambda)>)
   -> 0.0020s
-- change_column_default("events", :id_convert_to_bigint, 0)
   -> 0.0018s
-- execute("ALTER TABLE events DROP CONSTRAINT events_pkey CASCADE")
   -> 0.0012s
-- rename_index("events", "index_events_on_id_convert_to_bigint", "events_pkey")
   -> 0.0001s
-- execute("ALTER TABLE events ADD CONSTRAINT events_pkey PRIMARY KEY USING INDEX events_pkey")
   -> 0.0002s
-- execute("DROP INDEX index_events_on_project_id_and_id")
   -> 0.0001s
-- rename_index("events", "index_events_on_project_id_and_id_convert_to_bigint", "index_events_on_project_id_and_id")
   -> 0.0001s
-- execute("DROP INDEX index_events_on_project_id_and_id_desc_on_merged_action")
   -> 0.0001s
-- rename_index("events", "index_events_on_project_id_and_id_bigint_desc_on_merged_action", "index_events_on_project_id_and_id_desc_on_merged_action")
   -> 0.0001s
-- quote_table_name(:push_event_payloads)
   -> 0.0000s
-- quote_column_name("fk_36c74129da_tmp")
   -> 0.0000s
-- quote_column_name("fk_36c74129da")
   -> 0.0000s
-- execute("ALTER TABLE \"push_event_payloads\"\nRENAME CONSTRAINT \"fk_36c74129da_tmp\" TO \"fk_36c74129da\"\n")
   -> 0.0001s
== 20210622045705 FinalizeEventsBigintConversion: migrated (0.1690s) ==========

== 20210622135221 AddForeignKeyForEnvironmentIdToEnvironments: migrating ======
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:deployments)
   -> 0.0040s
-- execute("ALTER TABLE deployments\nADD CONSTRAINT fk_009fd21147\nFOREIGN KEY (environment_id)\nREFERENCES environments (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0009s
== 20210622135221 AddForeignKeyForEnvironmentIdToEnvironments: migrated (0.0076s)

== 20210622141148 ScheduleDeleteOrphanedDeployments: migrating ================
== 20210622141148 ScheduleDeleteOrphanedDeployments: migrated (0.0000s) =======

== 20210623074226 AddUsagePingFeaturesEnabledToApplicationSettings: migrating =
-- add_column(:application_settings, :usage_ping_features_enabled, :boolean, {:default=>false, :null=>false})
   -> 0.0010s
== 20210623074226 AddUsagePingFeaturesEnabledToApplicationSettings: migrated (0.0010s)

== 20210623123722 AddPresentOnDefaultBranchToVulnerabilities: migrating =======
-- add_column(:vulnerabilities, :present_on_default_branch, :boolean, {:default=>true, :null=>false})
   -> 0.0010s
== 20210623123722 AddPresentOnDefaultBranchToVulnerabilities: migrated (0.0029s)

== 20210623133635 CreateErrorTrackingErrors: migrating ========================
-- create_table(:error_tracking_errors, {})
-- quote_column_name(:name)
   -> 0.0000s
-- quote_column_name(:description)
   -> 0.0000s
-- quote_column_name(:actor)
   -> 0.0000s
-- quote_column_name(:platform)
   -> 0.0000s
   -> 0.0121s
-- quote_table_name("check_18a758e537")
   -> 0.0000s
-- quote_table_name("check_c739788b12")
   -> 0.0000s
-- quote_table_name("check_b5cb4d3888")
   -> 0.0000s
-- quote_table_name("check_fe99886883")
   -> 0.0000s
-- quote_table_name(:error_tracking_errors)
   -> 0.0000s
-- execute("ALTER TABLE \"error_tracking_errors\"\nADD CONSTRAINT \"check_18a758e537\" CHECK (char_length(\"name\") <= 255),\nADD CONSTRAINT \"check_c739788b12\" CHECK (char_length(\"description\") <= 1024),\nADD CONSTRAINT \"check_b5cb4d3888\" CHECK (char_length(\"actor\") <= 255),\nADD CONSTRAINT \"check_fe99886883\" CHECK (char_length(\"platform\") <= 255)\n")
   -> 0.0004s
== 20210623133635 CreateErrorTrackingErrors: migrated (0.0145s) ===============

== 20210623163342 AddIndexToComplianceManagementFrameworksPipelineConfiguration: migrating
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:compliance_management_frameworks, :id, {:name=>"index_compliance_frameworks_id_where_frameworks_not_null", :where=>"pipeline_configuration_full_path IS NOT NULL", :algorithm=>:concurrently})
   -> 0.0017s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index(:compliance_management_frameworks, :id, {:name=>"index_compliance_frameworks_id_where_frameworks_not_null", :where=>"pipeline_configuration_full_path IS NOT NULL", :algorithm=>:concurrently})
   -> 0.0048s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210623163342 AddIndexToComplianceManagementFrameworksPipelineConfiguration: migrated (0.0071s)

== 20210624112821 AddDevopsAdoptionCoverageFuzzing: migrating =================
-- add_column(:analytics_devops_adoption_snapshots, :coverage_fuzzing_enabled_count, :integer)
   -> 0.0004s
== 20210624112821 AddDevopsAdoptionCoverageFuzzing: migrated (0.0004s) ========

== 20210624180613 AddLastSyncedAtToLicenses: migrating ========================
-- add_column(:licenses, :last_synced_at, :datetime_with_timezone)
   -> 0.0008s
== 20210624180613 AddLastSyncedAtToLicenses: migrated (0.0008s) ===============

== 20210625094554 CreateErrorTrackingErrorEvents: migrating ===================
-- create_table(:error_tracking_error_events, {})
-- quote_column_name(:description)
   -> 0.0000s
-- quote_column_name(:environment)
   -> 0.0000s
-- quote_column_name(:level)
   -> 0.0000s
   -> 0.0113s
-- quote_table_name("check_92ecc3077b")
   -> 0.0000s
-- quote_table_name("check_f4b52474ad")
   -> 0.0000s
-- quote_table_name("check_c67d5b8007")
   -> 0.0000s
-- quote_table_name(:error_tracking_error_events)
   -> 0.0000s
-- execute("ALTER TABLE \"error_tracking_error_events\"\nADD CONSTRAINT \"check_92ecc3077b\" CHECK (char_length(\"description\") <= 255),\nADD CONSTRAINT \"check_f4b52474ad\" CHECK (char_length(\"environment\") <= 255),\nADD CONSTRAINT \"check_c67d5b8007\" CHECK (char_length(\"level\") <= 255)\n")
   -> 0.0011s
== 20210625094554 CreateErrorTrackingErrorEvents: migrated (0.0138s) ==========

== 20210627204936 AddPlanLimitsMaxSizeClusterImageScanningColumn: migrating ===
-- add_column(:plan_limits, :ci_max_artifact_size_cluster_image_scanning, :integer, {:null=>false, :default=>0})
   -> 0.0007s
== 20210627204936 AddPlanLimitsMaxSizeClusterImageScanningColumn: migrated (0.0007s)

== 20210628124505 ResetJobTokenScopeEnabled: migrating ========================
-- remove_column(:project_ci_cd_settings, :job_token_scope_enabled)rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active':       {:job_class_name=>"CopyColumnUsingBackgroundMigrationJob", :table_name=>"ci_builds", :column_name=>"id", :job_arguments=>[["id", "stage_id"], ["id_convert_to_bigint", "stage_id_convert_to_bigint"]]}

Finalize it manualy by running

        sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_builds,id,'[["id"\, "stage_id"]\, ["id_convert_to_bigint"\, "stage_id_convert_to_bigint"]]']

For more information, check the documentation

        https://docs.gitlab.com/ee/user/admin_area/monitoring/background_migrations.html#database-migrations-failing-because-of-batched-background-migration-not-finished
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:1109:in `ensure_batched_background_migration_is_finished'
/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20210701141346_finalize_ci_builds_stage_id_bigint_conversion.rb:11:in `up'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:31:in `ddl_transaction'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:61:in `block (3 levels) in <top (required)>'
/opt/gitlab/embedded/bin/bundle:23:in `load'
/opt/gitlab/embedded/bin/bundle:23:in `<main>'

Caused by:
Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active':       {:job_class_name=>"CopyColumnUsingBackgroundMigrationJob", :table_name=>"ci_builds", :column_name=>"id", :job_arguments=>[["id", "stage_id"], ["id_convert_to_bigint", "stage_id_convert_to_bigint"]]}

Finalize it manualy by running

        sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_builds,id,'[["id"\, "stage_id"]\, ["id_convert_to_bigint"\, "stage_id_convert_to_bigint"]]']

For more information, check the documentation

        https://docs.gitlab.com/ee/user/admin_area/monitoring/background_migrations.html#database-migrations-failing-because-of-batched-background-migration-not-finished
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:1109:in `ensure_batched_background_migration_is_finished'
/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20210701141346_finalize_ci_builds_stage_id_bigint_conversion.rb:11:in `up'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:31:in `ddl_transaction'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:61:in `block (3 levels) in <top (required)>'
/opt/gitlab/embedded/bin/bundle:23:in `load'
/opt/gitlab/embedded/bin/bundle:23:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

   -> 0.0004s
-- add_column(:project_ci_cd_settings, :job_token_scope_enabled, :boolean, {:default=>false, :null=>false})
   -> 0.0004s
== 20210628124505 ResetJobTokenScopeEnabled: migrated (0.0022s) ===============

== 20210628154900 CreateDetachedPartitionsTable: migrating ====================
-- create_table(:detached_partitions, {})
-- quote_column_name(:table_name)
   -> 0.0000s
   -> 0.0059s
-- quote_table_name("check_aecee24ba3")
   -> 0.0000s
-- quote_table_name(:detached_partitions)
   -> 0.0000s
-- execute("ALTER TABLE \"detached_partitions\"\nADD CONSTRAINT \"check_aecee24ba3\" CHECK (char_length(\"table_name\") <= 63)\n")
   -> 0.0002s
== 20210628154900 CreateDetachedPartitionsTable: migrated (0.0082s) ===========

== 20210629031900 AssociateExistingDastBuildsWithVariables: migrating =========
== 20210629031900 AssociateExistingDastBuildsWithVariables: migrated (0.0026s)

== 20210629101712 RemoveDeprecatedModsecurityColumns: migrating ===============
-- column_exists?(:clusters_applications_ingress, :modsecurity_enabled)
   -> 0.0013s
-- remove_column(:clusters_applications_ingress, :modsecurity_enabled)
   -> 0.0038s
-- column_exists?(:clusters_applications_ingress, :modsecurity_mode)
   -> 0.0013s
-- remove_column(:clusters_applications_ingress, :modsecurity_mode)
   -> 0.0010s
== 20210629101712 RemoveDeprecatedModsecurityColumns: migrated (0.0076s) ======

== 20210629104933 DropIndexOnCiBuildsForToken: migrating ======================
-- transaction_open?()
   -> 0.0000s
-- indexes(:ci_builds)
   -> 0.0064s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- remove_index(:ci_builds, {:algorithm=>:concurrently, :name=>:index_ci_builds_on_token})
   -> 0.0027s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210629104933 DropIndexOnCiBuildsForToken: migrated (0.0098s) =============

== 20210629153519 AddIndexToBulkImportEntitiesOnBulkImportIdAndStatus: migrating
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:bulk_import_entities, [:bulk_import_id, :status], {:name=>"index_bulk_import_entities_on_bulk_import_id_and_status", :algorithm=>:concurrently})
   -> 0.0018s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index(:bulk_import_entities, [:bulk_import_id, :status], {:name=>"index_bulk_import_entities_on_bulk_import_id_and_status", :algorithm=>:concurrently})
   -> 0.0071s
-- execute("RESET statement_timeout")
   -> 0.0001s
-- transaction_open?()
   -> 0.0000s
-- indexes(:bulk_import_entities)
   -> 0.0017s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- remove_index(:bulk_import_entities, {:algorithm=>:concurrently, :name=>"index_bulk_import_entities_on_bulk_import_id"})
   -> 0.0043s
-- execute("RESET statement_timeout")
   -> 0.0001s
== 20210629153519 AddIndexToBulkImportEntitiesOnBulkImportIdAndStatus: migrated (0.0162s)

== 20210630025020 MigratePushEventPayloadsEventIdBackToIntegerForGitlabCom: migrating
== 20210630025020 MigratePushEventPayloadsEventIdBackToIntegerForGitlabCom: migrated (0.0000s)

== 20210630144339 AddInviteEmailSuccessToMembers: migrating ===================
== 20210630144339 AddInviteEmailSuccessToMembers: migrated (0.0000s) ==========

== 20210630222522 AddCustomersDotJwtSigningKeyToApplicationSettings: migrating
-- add_column(:application_settings, :encrypted_customers_dot_jwt_signing_key, :binary)
   -> 0.0007s
-- add_column(:application_settings, :encrypted_customers_dot_jwt_signing_key_iv, :binary)
   -> 0.0003s
== 20210630222522 AddCustomersDotJwtSigningKeyToApplicationSettings: migrated (0.0010s)

== 20210630224625 GenerateCustomersDotJwtSigningKey: migrating ================
== 20210630224625 GenerateCustomersDotJwtSigningKey: migrated (0.3523s) =======

== 20210701033622 FinalizeCiBuildsNeedsBigintConversion: migrating ============
-- transaction_open?()
   -> 0.0000s
-- index_exists?("ci_build_needs", [:build_id_convert_to_bigint, :name], {:unique=>true, :name=>"index_ci_build_needs_on_build_id_convert_to_bigint_and_name", :algorithm=>:concurrently})
   -> 0.0011s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- add_index("ci_build_needs", [:build_id_convert_to_bigint, :name], {:unique=>true, :name=>"index_ci_build_needs_on_build_id_convert_to_bigint_and_name", :algorithm=>:concurrently})
   -> 0.0035s
-- execute("RESET statement_timeout")
   -> 0.0001s
-- transaction_open?()
   -> 0.0000s
-- foreign_keys("ci_build_needs")
   -> 0.0039s
-- execute("LOCK TABLE ci_builds, ci_build_needs IN SHARE ROW EXCLUSIVE MODE")
   -> 0.0001s
-- execute("ALTER TABLE ci_build_needs\nADD CONSTRAINT fk_rails_3cf221d4ed_tmp\nFOREIGN KEY (build_id_convert_to_bigint)\nREFERENCES ci_builds (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0005s
-- execute("SET statement_timeout TO 0")
   -> 0.0001s
-- execute("ALTER TABLE ci_build_needs VALIDATE CONSTRAINT fk_rails_3cf221d4ed_tmp;")
   -> 0.0027s
-- execute("RESET statement_timeout")
   -> 0.0001s
-- execute("LOCK TABLE ci_builds, ci_build_needs IN ACCESS EXCLUSIVE MODE")
   -> 0.0001s
-- quote_table_name("ci_build_needs")
   -> 0.0000s
-- quote_column_name(:build_id)
   -> 0.0000s
-- quote_column_name("build_id_tmp")
   -> 0.0000s
-- execute("ALTER TABLE \"ci_build_needs\" RENAME COLUMN \"build_id\" TO \"build_id_tmp\"")
   -> 0.0001s
-- quote_table_name("ci_build_needs")
   -> 0.0000s
-- quote_column_name(:build_id_convert_to_bigint)
   -> 0.0000s
-- quote_column_name(:build_id)
   -> 0.0000s
-- execute("ALTER TABLE \"ci_build_needs\" RENAME COLUMN \"build_id_convert_to_bigint\" TO \"build_id\"")
   -> 0.0001s
-- quote_table_name("ci_build_needs")
   -> 0.0000s
-- quote_column_name("build_id_tmp")
   -> 0.0000s
-- quote_column_name(:build_id_convert_to_bigint)
   -> 0.0000s
-- execute("ALTER TABLE \"ci_build_needs\" RENAME COLUMN \"build_id_tmp\" TO \"build_id_convert_to_bigint\"")
   -> 0.0001s
-- quote_table_name("trigger_21e7a2602957")
   -> 0.0000s
-- execute("ALTER FUNCTION \"trigger_21e7a2602957\" RESET ALL")
   -> 0.0001s
-- change_column_default("ci_build_needs", :build_id, nil)
   -> 0.0011s
-- change_column_default("ci_build_needs", :build_id_convert_to_bigint, 0)
   -> 0.0008s
-- execute("DROP INDEX index_ci_build_needs_on_build_id_and_name")
   -> 0.0002s
-- rename_index("ci_build_needs", "index_ci_build_needs_on_build_id_convert_to_bigint_and_name", "index_ci_build_needs_on_build_id_and_name")
   -> 0.0001s
-- remove_foreign_key("ci_build_needs", {:name=>"fk_rails_3cf221d4ed"})
   -> 0.0043s
-- quote_table_name("ci_build_needs")
   -> 0.0000s
-- quote_column_name("fk_rails_3cf221d4ed_tmp")
   -> 0.0000s
-- quote_column_name("fk_rails_3cf221d4ed")
   -> 0.0000s
-- execute("ALTER TABLE \"ci_build_needs\"\nRENAME CONSTRAINT \"fk_rails_3cf221d4ed_tmp\" TO \"fk_rails_3cf221d4ed\"\n")
   -> 0.0001s
== 20210701033622 FinalizeCiBuildsNeedsBigintConversion: migrated (0.0262s) ===

== 20210701111627 AddUpvotesCountToIssues: migrating ==========================
-- add_column(:issues, :upvotes_count, :integer, {:default=>0, :null=>false})
   -> 0.0006s
== 20210701111627 AddUpvotesCountToIssues: migrated (0.0013s) =================

== 20210701111909 BackfillIssuesUpvotesCount: migrating =======================
-- Scheduled 0 BackfillUpvotesCountOnIssues jobs with a maximum of 5000 records per batch and an interval of 120 seconds.

The migration is expected to take at least 0 seconds. Expect all jobs to have completed after 2024-12-23 17:31:38 +0800."
== 20210701111909 BackfillIssuesUpvotesCount: migrated (0.0151s) ==============

== 20210701141346 FinalizeCiBuildsStageIdBigintConversion: migrating ==========
STDERR:
---- End output of "bash"  "/tmp/chef-script20241223-753948-1w66dbp" ----
Ran "bash"  "/tmp/chef-script20241223-753948-1w66dbp" returned 1


Warnings:
The version of the running redis service is different than what is installed.
Please restart redis to start the new version.

sudo gitlab-ctl restart redis

Running handlers complete
Chef Infra Client failed. 32 resources updated in 30 seconds

Warnings:
The version of the running redis service is different than what is installed.
Please restart redis to start the new version.

sudo gitlab-ctl restart redis

===
There was an error running gitlab-ctl reconfigure. Please check the output above for more
details.
===

按照引导操作即可,如下:

### 引导执行命令
sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_builds,id,'[["id"\, "stage_id"]\, ["id_convert_to_bigint"\, "stage_id_convert_to_bigint"]]']

sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_builds,id,'[["id"\, "stage_id"]\, ["id_convert_to_bigint"\, "stage_id_convert_to_bigint"]]']

# 官方命令 14.3.6 https://gitlab.cn/docs/jh/user/admin_area/monitoring/background_migrations.html#%E6%89%8B%E5%8A%A8%E5%AE%8C%E6%88%90%E6%89%B9%E9%87%8F%E5%90%8E%E5%8F%B0%E8%BF%81%E7%A7%BB
sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,events,id,'[["id"]\, ["id_convert_to_bigint"]]']
sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,push_event_payloads,event_id,'[["event_id"]\, ["event_id_convert_to_bigint"]]']

### 数据库迁移
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-rake db:migrate

### 查看迁移任务是否完成 ;预计10分钟左右,如果还有down的状态那么需要重新执行,直到所有都up为止
gitlab-rake db:migrate:status
gitlab-ctl reconfigure

### 顺便可以时刻关注postgresql版本
gitlab-psql --version
gitlab-ctl restart

### 查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 查看实时日志
gitlab-ctl tail


gitlab-ce-14.3.6-ce升级到gitlab-ce-14.9.5-ce

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-14.9.5-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version

gitlab-ce-14.9.5-ce升级到gitlab-ce-14.10.5-ce

注意: 手动升级组件postgresql,pg-upgrade命令依赖的是 /opt/gitlab/embedded/nodes/xxx.json 整个路径下json文件;每次版本升级gitlab会根据组件要求去这里拿相应组件版本来升级,json文件生成是来源于gitlab-ctl reconfigure之后会自动产生,每次升级完一个版本都需要 restart 重启一次习惯

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-14.10.5-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 升级组件postgresql
gitlab-ctl pg-upgrade -V 13

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version


gitlab-ce-14.10.5-ce升级到gitlab-ce-15.0.5-ce

### 备份
gitlab-backup create

### 配置文件备份
cp /etc/gitlab/gitlab.rb /var/opt/gitlab/backups/
cp /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/ #该文件存储了 GitLab 运行所需的敏感信息和密钥,例如数据库密码、JWT 秘钥、CI/CD token、GitLab shell 秘钥等

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-15.0.5-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version

gitlab-ce-15.0.5-ce升级到gitlab-ce-15.4.6-ce

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-15.4.6-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version

gitlab-ce-15.4.6-ce升级到gitlab-ce-15.11.13-ce

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-15.11.13-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version


gitlab-ce-15.11.13-ce升级到gitlab-ce-16.3.9-ce

### 升级之前备份一次
gitlab-backup create

### 配置文件备份
cp /etc/gitlab/gitlab.rb /var/opt/gitlab/backups/
cp /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/ #该文件存储了 GitLab 运行所需的敏感信息和密钥,例如数据库密码、JWT 秘钥、CI/CD token、GitLab shell 秘钥等

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-16.3.9-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version

gitlab-ce-16.3.9-ce升级到gitlab-ce-16.7.10-ce

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-16.7.10-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version


gitlab-ce-16.7.10-ce升级到gitlab-ce-16.11.10-ce

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-16.11.10-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version

注意: 整个版本下postgresql版本变化有相应清理历史文件的引导如下

### 引导删除旧版postgresql相关文件
sudo rm -rf /var/opt/gitlab/postgresql/data.13
sudo rm -f /var/opt/gitlab/postgresql-version.old


gitlab-ce-16.11.10-ce升级到gitlab-ce-17.3.7-ce

### 备份一次
gitlab-backup create

### 配置文件备份
cp /etc/gitlab/gitlab.rb /var/opt/gitlab/backups/
cp /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/ #该文件存储了 GitLab 运行所需的敏感信息和密钥,例如数据库密码、JWT 秘钥、CI/CD token、GitLab shell 秘钥等

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-17.3.7-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version


gitlab-ce-17.3.7-ce升级到gitlab-ce-17.5.4-ce

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-17.5.4-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version


gitlab-ce-17.5.4-ce升级到gitlab-ce-17.7.0-ce

### 关闭以下组件
gitlab-ctl stop nginx &&  gitlab-ctl stop sidekiq && gitlab-ctl stop puma

### 开始直接更新覆盖
rpm -Uvh gitlab-ce-17.7.0-ce.0.el8.x86_64.rpm

### 重启组件
gitlab-ctl start nginx && gitlab-ctl start sidekiq && gitlab-ctl start puma

### 查看当前版本
rpm -qa gitlab-ce
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

### 所有组件重启一次
gitlab-ctl reconfigure
gitlab-ctl restart

###查看升级后服务状态
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true

### 顺便可以时刻关注postgresql版本
gitlab-psql --version
psql (PostgreSQL) 14.11

### 备份一次
gitlab-backup create

### 配置文件备份
cp /etc/gitlab/gitlab.rb /var/opt/gitlab/backups/
cp /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/ #该文件存储了 GitLab 运行所需的敏感信息和密钥,例如数据库密码、JWT 秘钥、CI/CD token、GitLab shell 秘钥等

记一次Gitlab 版本升级_git_04

记一次Gitlab 版本升级_git_05

本次跨多个大版本升级并没有每升级一个版本做一次备份gitlab-backup create操作,在每个主要版本的最后一个版本再备份动作,14.xx版本以后基本都不会有太多步骤变化,按照步骤操作即可。


最后添加每天自动备份


# 添加以下行以安排每天凌晨 2 点的备份
# CRON=1如果没有任何错误,环境设置会指示备份脚本隐藏所有进度输出。建议这样做以减少 cron 垃圾邮件
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1