0x00 需求
在Confluence中查看Git上的最新markdwon文件 .
0x01 思路
Jenkins中添加 webhook, 當有commit 事件發生時, 啓動腳本.
腳本邏輯:
1.直接下載相應文件, 不需要整庫clone/update.
2.轉html格式,並存儲到Confluence, 因爲Confluence對markdown支持性不太友好
0x02 遇到的問題及解決
- md轉html
- 使用
pandoc
工具可以解決
- 使用
- json文件中引號轉義
- 使用
jq
工具, 加參數-R
解決
- 使用
- echo 換行問題
- 使用
-n
參數可以讓echo 輸出後不換行
- 使用
0x03 代碼實現
#!/bin/bash
GIT_SERVER="https://your-git-server"
CONF_SERVER="https://your-confluence-server"
GIT_TOKEN="your-access-token"
CONF_USER="admin"
CONF_PWD="password"
project_id=''
file_path=''
page_id=''
# 1.下載原始信息
echo '1.下載原始信息'
curl -s --header "PRIVATE-TOKEN: ${GIT_TOKEN}" ${GIT_SERVER}/api/v4/projects/${projectId}/repository/files/${file_path}/raw?ref=master" > ./before.md
# 2.把markdown 轉換成 html格式
pandoc -f markdown -t html5 < ./before.md -o after.html
# 3.把Html源碼中的引號進行轉義
content=`jq -R . < ./after.md `
# 3.提取當前Confluence內容版本號
echo '2.提取版本號'
curr_version=`curl -s -u $CONF_USER:$CONF_PWD -XGET --header 'Accept: application/json' '${CONF_SERVER}/rest/api/content/${page_id}' | jq .version.number`
new_version=`expr $curr_version + 1`
echo '新版本' + $new_version
# 4.把更新參數信息導出爲臨時JSON文件
echo -n '{"type":"page","title":"default-title","body":{"storage":{"value":' > ./tmp.json
echo -n $content >> ./tmp.json
echo -n ',"representation":"storage"}},"version":{"number": ' >> ./tmp.json
echo -n $new_version >> ./tmp.json
echo -n '}}' >> ./tmp.json
# 5.更新內容更新
echo '3.同步 Confluence'
curl -s -u $CONF_USER:$CONF_PWD -X PUT -H 'Content-Type: application/json' ${CONF_SERVER}/rest/api/content/${page_id}-d @./tmp.json | jq .id
echo '同步完成'