Era 项目组 Git 自动 CI/CD 工作流

准备工作#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 更新软件源
$ apt update && apt upgrade -y

# 安装依赖
$ apt install -y curl zip git

# 配置时区
$ timedatectl set-timezone Asia/Taipei && date

# 修改主机名
$ hostname eraServer0xff  # 即时生效
$ echo "eraServer0xff" > /etc/hostname  # 永久生效 (某些 VPS 可能不允许修改 重启后会复原)

# 查看架构
$ arch
x86_64 # i386

GitLab Runner#

安装 GitLab Runner#

手动安装:

1
2
3
4
$ curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386
$ chmod +x /usr/local/bin/gitlab-runner
$ useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
$ gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

通过软件包安装:

1
2
$ curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash
$ apt-get install gitlab-runner -y

注册 GitLab Runner#

访问 gitgud.io 项目组 获取 Token。

1
2
3
4
5
6
7
8
9
$ gitlab-runner register \
    --url https://gitgud.io/ \
    --registration-token "TOKEN" \
    --executor "shell" \
    --description "Era Deployment Runner n代目" \
    --maintenance-note "Whatever" \
    --tag-list "CDN,deploy" \
    --run-untagged="true" \
    --access-level="ref_protected"

启动 GitLab Runner#

1
$ gitlab-runner stop && gitlab-runner start

其他问题#

如果 Pipeline 在 Preparing environment 这一步报错:

ERROR: Job failed: prepare environment: exit status 1. Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information

尝试修复:

1
2
3
4
$ vim /home/gitlab-runner/.bash_logout  # 注释掉以下内容
#if [ "$SHLVL" = 1 ]; then
#    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
#fi

或者直接 rm /home/gitlab-runner/.bash_logout 删掉该文件。

此方法来自 gitlab-runner issue #26605

OneDriveUploader#

安装 OneDriveUploader#

1
2
$ curl -L --output /usr/local/bin/onedrive-uploader https://raw.githubusercontent.com/MoeClub/OneList/master/OneDriveUploader/i386/linux/OneDriveUploader
$ chmod +x /usr/local/bin/onedrive-uploader

配置 OneDriveUploader#

访问 这个链接 登录用来做网盘的微软帐号,拿到形如 http://loaclhost*** 的响应地址。

1
2
3
4
5
6
$ su - gitlab-runner
$ onedrive-uploader -ms -a "http://loaclhost***"
$ mv ~/auth.json ~/onedrive_auth.json
$ chmod 600 ~/onedrive_auth.json
$ su -
$ ln -s /home/gitlab-runner/onedrive_auth.json /root/onedrive_auth.json

使用 OneDriveUploader#

1
$ onedrive-uploader -c "~/onedrive_auth.json" -s "test_file.zip"

详细使用方法见 说明文档

Cloudflare R2#

众所周知,CF 的 R2 兼容 Amazon S3 API。

绑定和代码调用略。

服务器使用 AWS CLI 进行上传。

安装 AWS CLI#

1
2
3
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ ./aws/install

配置 AWS CLI#

1
2
3
4
5
$ aws configure
AWS Access Key ID [None]: <access_key_id>
AWS Secret Access Key [None]: <access_key_secret>
Default region name [None]: auto
Default output format [None]: json

使用 AWS CLI#

列出对象:

1
2
$ aws s3api list-buckets --endpoint-url https://<accountid>.r2.cloudflarestorage.com
$ aws s3api list-objects-v2 --endpoint-url https://<accountid>.r2.cloudflarestorage.com --bucket sdk-example

注册临时资源:

1
$ aws s3 presign --endpoint-url https://<accountid>.r2.cloudflarestorage.com s3://sdk-example/ferriswasm.png --expires-in 3600

上传文件:

1
$ aws s3api put-object --key "filename" --body "filename.zip" --endpoint-url https://<accountid>.r2.cloudflarestorage.com --bucket sdk-example

版本更新 API 配套脚本#

详见 说明文档

配置脚本#

1
2
3
4
5
$ su - gitlab-runner
$ git clone https://github.com/1ackbfun/era-info-api.git -b script ~/era_games_data
$ chmod +x ~/era_games_data/update
$ echo "TOKEN" > ~/era_games_data/ERA_API_TOKEN
$ chmod 600 ~/era_games_data/ERA_API_TOKEN

使用脚本#

1
$ ~/era_games_data/update

更新脚本#

1
$ rm update && git pull && chmod +x update

lackbfun © 2021 - 2024