GitLab-CI将项目Wiki自动部署到文档中心

概述

公司的GitLab中,有一个存放所有技术文档的Wiki仓库,按照目录分门别类,包括API文档,编码规范,技术专题文档等,通过与Gollum进行持续部署.

然而在GitLab中,每个项目都有自己的Wiki库, 所以在将项目文档合并更新到总Wiki仓库时,同步更新比较麻烦,通过充分使用GitLab的持续集成功能, 将项目Wiki与Wiki仓库集成, 从而实现了Wiki的自动部署,

同步时,自动同步的提交信息和提交人信息

步骤

配置SSH

  • GitLab中在使用SSH的时候, 会生成公钥和私钥对

  • 将公钥添加到gitlab上, 以便于该用于可以拉取代码

  • CI/CD Piplines中设置 Secret Variables, 这里名为 SSH_PRIVATE_KEY

SSH_PRIVATE_KEY 值为私钥.

编写 .gitlab-ci.yml 文件, 注入私钥, 通过ssh执行远程命令

创建一个分支, 如docs, 在该分支中添加 gitlab-ci.yml文件, 实现wiki自动提交, 内容形如以下内容:

复制代码
image: zacksleo/docker-composer:develop

before_script:
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" > deploy.key
    - chmod 0600 deploy.key
    - ssh-add deploy.key
    - rm -f deploy.key
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

build-docs:
    stage: deploy
   variables:
       GIT_STRATEGY: none
   dependencies: []
    script:
       # 定义变量: 项目Wiki的Git地址,项目(目录)别名
       - export WIKI_REPO=git@domain.com:project.wiki.git && export PROJECT_NAME=$CI_PROJECT_NAME
       # 创建临时目录, 用于存放和合并git文档
       - mkdir ~/tmp && cd ~/tmp
       # 克隆项目wiki
       - git --git-dir=~/tmp/$PROJECT_NAME.wiki.git clone --depth=1 $WIKI_REPO $PROJECT_NAME
       # 删除.git 只保留纯文档, 获取最近的提交日志,用户邮箱和名称  
       - cd $PROJECT_NAME && export GIT_LOG=`git log -1 --pretty=%B` && export GIT_EMAIL=`git log -1 --pretty=%ae` && export GIT_USERNAME=`git log -1 --pretty=%an` && rm -rf .git && cd ..
       # 注册Git账号
       - git config --global user.email $GIT_EMAIL && git config --global user.name $GIT_USERNAME       
       # 克隆联络Wiki
       - git clone git@domain.com:orgs/wiki.git
       # 删除旧wiki, 增加新wiki
       - rm -rf wiki/api/$PROJECT_NAME && mv -f $PROJECT_NAME wiki/api
       # 增加提交日志并提交
       - cd wiki && git add . && git commit -m "$PROJECT_NAME:$GIT_LOG" && git push origin master
       # 删除临时目录
       - rm -rf ~/tmp
    only:
        - docs

其中, 将WIKI_REPO后面的git@domain.com:project.wiki.git替换为项目wiki的git地址,
$CI_PROJECT_NAME替换为项目英文别名(如不改则使用当前GitLab的项目名), 用于在文档中心的api下面创建相关目录。

其他地方不需要修改。

注意: 项目wiki的git地址与项目的git地址不相同, 请在Wiki右侧中的Clone repository 找到

创建 Triggers Token

打开项目的 CI/CD Pipelines 选项, 找到 Triggers, 点击添加一个Token, 并从下方的 Use webhook 段落找到触发URL, 如

https://domain.com/api/v4/projects/74/ref/REF_NAME/trigger/pipeline?token=TOKEN

将TOKEN替换为上述Triggers中获取的Token, 将 REF_NAME 替换分分支名称 docs, 得到最终URL

配置 Webhooks

打开项目的 integrations 选项, 在URL中, 填写上一步中拿到的URL

相关文档

  • \[GitLab-CI使用Docker进行持续部署\]

  • \[使用Git和Gollum搭建Wiki系统\]

相关推荐
A__tao11 分钟前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
A__tao2 小时前
Elasticsearch Mapping 一键生成 Proto 文件(支持嵌套 + 注释过滤)
大数据·elasticsearch·jenkins
Devin~Y2 小时前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
REDcker4 小时前
Jenkins 开源 CI/CD 平台概览与版本演进
ci/cd·开源·jenkins
Elastic 中国社区官方博客6 小时前
使用 Jina-VLM 小型多语言视觉语言模型来和图片对话
大数据·人工智能·elasticsearch·语言模型·自然语言处理·jina
LDG_AGI6 小时前
【搜索引擎】Elasticsearch(二):基于function_score的搜索排序
数据库·人工智能·深度学习·elasticsearch·机器学习·搜索引擎·推荐算法
历程里程碑7 小时前
Protobuf总结
大数据·数据结构·elasticsearch·链表·搜索引擎
ACGkaka_7 小时前
ES 学习(七)性能陷阱
大数据·学习·elasticsearch
LDG_AGI9 小时前
【搜索引擎】Elasticsearch(三):基于script_score的自定义搜索排序
大数据·人工智能·深度学习·elasticsearch·机器学习·搜索引擎·推荐算法
Elastic 中国社区官方博客9 小时前
如何使用 Mastra 和 Elasticsearch 构建具备代理能力的 AI 应用
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索