categories: date: 2024-04-08 18:47:50 cover: discription: keywords: password: message: gitlab web 端配置 编写流水线脚本 .gitlab-ci.yml
1.登录 gitlab web 端,找到要自动发布的项目并点击进入。然后点击项目首页下面的 CI/CD 配置
,如图:
2.进入到 流水线编辑器
页面后,在下面的 编辑
模板栏中修改内容为:
1 2 3 4 5 6 7 8 9 stages: - deploy deploy-job: stage: deploy environment: production script: - echo "Deploying application..." - echo "Application successfully deployed." - /home/gitlab-runner/dep.sh
如图:
最后点击下提交更改!
获取 runner 安装和注册信息 1.回到项目主页,点击左侧导航栏中的 设置
—> CI/CD
,如下图:
2.进入 CI/CD 设置
页面后,找到下面的 Runner
配置项,点击后面的 展开
安就,然后在 项目 runner
下面点击 新建项目 runner
旁的三个点,接着在谈出的 注册令牌
窗口点击 显示 runner 安装和注册说明
:
上图中可以看到第3步旁边有个 runner ,那是我之前创建过了的
3.接着就在弹出的 安装 Runner
窗口得到 runner
安装的命令及注册的 token 信息,如下:
远端 hexo 服务器 以下操作都是在 hexo 服务器上以 root 身份执行
Runner 安装 1.执行命令安装 runner:
1 curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
2.赋予 gitlab-runner
命令可执行权限:
1 chmod +x /usr/local/bin/gitlab-runner
3.创建运行 runner 的用户(注意:需要创建它的家目录和允许登录系统):
1 useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
4.安装 runner 并指定工作目录:
1 gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
注意: 这里先不要启动 gitlab-runner 服务(也就是先不要执行 gitlab-runner start
命令)
5.创建 gitlab-runner 的启动脚本文件 /lib/systemd/system/gitlab-runner.service
,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 cat << 'EOF' > /lib/systemd/system/gitlab-runner.service[Unit] Description=GitLab Runner ConditionFileIsExecutable=/usr/bin/gitlab-runner After=syslog.target network.target [Service] StartLimitInterval=5 StartLimitBurst=10 ExecStart=/usr/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--user" "gitlab-runner" Restart=always RestartSec=120 EnvironmentFile=-/etc/sysconfig/gitlab-runner [Install] WantedBy=multi-user.target EOF
Runner 注册 1.接上面的,继续执行注册命令:
1 gitlab-runner register --url https://gitlab.lxxxxxr.com/ --registration-token GR1348941AiRUeB6TXzy7xKUXUq_9
注意: 如果在注册的过程中,出现了下面这样的错误,那么请将 http
修改成 https
即可(首先,确保你访问 gitlab 是使用的 https)!
1 2 ERROR: Verifying runner... failed runner=xs_3R4MHy status=GET https://gitlab.lxxxxxr.com/api/v4/runners/verify: 401 PANIC: Failed to verify the runner.
2.启动 gitlab-runner 服务:
1 systemctl start gitlab-runner.service
如果你的 gitlab 服务器放在一个没有公网 IP 的内网环境,且使用 Frpc 做了代理访问,那么就需要注意下面的配置。当然了,如果你的 gitlab 服务器有公网,那就略过这部分!
由于我的 gitlab 是在内网环境,加上联通又没有给单独配置公网 IP,所以,只能依靠自己搭建内网穿透服务进行内网映射!
1.编辑 /etc/gitlab-runner/config.toml 文件。将其修改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 concurrent = 1 check_interval = 0 shutdown_timeout = 0 [session_server] session_timeout = 1800 [[runners]] name = "hexo" url = "https://gitlab.linuser.com" clone_url = "https://gitlab.linuser.com" id = 10 token = "glrt-xs_3R4MHyu_x_rcaiVV7" token_obtained_at = 2023-07-17T10:24:13Z token_expires_at = 0001-01-01T00:00:00Z executor = "shell" [runners.cache] MaxUploadedArchiveSize = 0
2.删除 gitlab-runner 家目录下的 .bash_logout.sh 文件:
1 rm /home/gitlab-runner/.bash_logout
不删该文件会导致自动发布失败,报错信息为:
1 2 3 4 5 6 7 8 Running with gitlab-runner 16.1.0 (b72e108d) on hexo xs_3R4MHy, system ID: s_78501ab433a4 Preparing the "shell" executor 00:00 Using Shell (bash) executor... Preparing environment 00:00 ERROR: Job failed: prepare environment: exit status 1. Check https://docs.gitlab.com/runner/shells/index.html
声明 : gitlab-runner 安装配置好后,它默认会将项目的代码自动克隆到定义的 work-direcotry 目录里面,无需我们再次手动去获取代码或者打包
添加 hexo 管理脚本 1.创建 hexo 的启动脚本文件 /lib/systemd/system/hexo.service
,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 cat << 'EOF' > /lib/systemd/system/hexo.service[Unit] Description=Hexo Blog Service After=network.target [Service] Type=simple Environment=PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/nodejs/bin WorkingDirectory=/data/hexo/blog ExecStart=/usr/local/nodejs/lib/node_modules/hexo-cli/bin/hexo server -p 80 ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill -SIGINT $MAINPID Restart=always [Install] WantedBy=multi-user.target EOF
2.执行命令加载脚本
赋予 gitlab-runner 用户 systemctl 权限 编辑 /etc/sudoers
,在该文件中添加一行配置内容(这一行内容最好放在 root 用户配置那一行的上面),如下:
1 gitlab-runner ALL=(ALL) NOPASSWD:/usr/bin/systemctl
创建发布脚本 1.在开始之前,别忘记了修改 hexo 网站根目录的所属主和组为 gitlab-runner:
1 chown -R gitlab-runner:gitlab-runner /data/hexo
2.先切换到 gitlab-runner 用户下
3.在该用户的家目录下创建脚本文件 dep.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 cat << EOF > ~/dep.sh #!/usr/bin/env bash # gitlab-runner 会自动将 gitlab 上的 Hexo 项目克隆到 gitlab-runner 安装时指定的 work-directory 目录下(由于我的项目只需要动到 source 目录,所以这里直接指定要变动的目录) work_dir="$(find ~/builds/* -type d -iname source |head -n 1)" # hexo 站点静态文件存放目录(即文章和图片上传的目录) blog_dir='/data/hexo/blog/source' # 判断下 \${blog_dir} 是否存在,存在的话,直接删除里面所有内容 if [ -d \${blog_dir} ]; then rm -rf \${blog_dir}/* fi # 重新复制 cp -rf \${work_dir}/* \${blog_dir}/ # 进入 hexo 站点根目录: cd /data/hexo/blog # 重启 hexo sudo systemctl reload hexo.service EOF
自动发布测试 接下来就将项目拉到本地,然后在项目 source/_post
目录下创建 .md
文件,编辑完内容后进行提交。稍等几秒,看看创建的内容是否能被访问!