Skip to content

Commit 12c6276

Browse files
authored
Create secret_artifact_test.yml
1 parent e443aa9 commit 12c6276

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
name: Secret and Artifact Leakage Test
2+
3+
on:
4+
workflow_dispatch: # 手动触发
5+
6+
jobs:
7+
test:
8+
runs-on: self-hosted
9+
steps:
10+
# 1. 检出代码仓库
11+
- name: Checkout Repository
12+
uses: actions/checkout@v2
13+
14+
# 2. 缓存 Node.js 依赖(如果有 package-lock.json)
15+
- name: Cache Node modules
16+
uses: actions/cache@v2
17+
with:
18+
path: node_modules
19+
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
20+
21+
# 3. 设置 Node.js 环境
22+
- name: Setup Node.js
23+
uses: actions/setup-node@v2
24+
with:
25+
node-version: '14'
26+
27+
# 4. 安装 npm 依赖(如果 package.json 存在)
28+
- name: Install npm dependencies
29+
run: |
30+
if [ -f package.json ]; then
31+
npm install
32+
else
33+
echo "No package.json found. Skipping npm install."
34+
fi
35+
36+
# 5. 安全使用 Secret:通过环境变量引用
37+
- name: Safe Secret Usage (Env Variable)
38+
env:
39+
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
40+
run: |
41+
echo "Safe usage: DB_PASSWORD is $DB_PASSWORD"
42+
# GitHub 会自动将 DB_PASSWORD 的值屏蔽为 ***
43+
44+
# 6. 不安全使用 Secret:直接作为参数传递
45+
- name: Unsafe Secret Usage (Inline)
46+
run: echo "Unsafe usage-- DB_PASSWORD is ${{ secrets.DB_PASSWORD }}"
47+
# 此方式风险较高,部分 CLI 工具可能将完整值输出到日志中
48+
49+
# 7. 将 Secret 写入文件(模拟 Artifact 中泄露敏感信息)
50+
- name: Write Secret to File
51+
run: echo "Secret in file-- ${{ secrets.DB_PASSWORD }}" > secret.txt
52+
53+
# 8. 上传包含 Secret 的文件作为 Artifact
54+
- name: Upload Secret File Artifact
55+
uses: actions/upload-artifact@v2
56+
with:
57+
name: secret-artifact
58+
path: secret.txt
59+
60+
# 9. 缓存 pip 依赖(如果有 requirements.txt)
61+
- name: Cache pip packages
62+
uses: actions/cache@v2
63+
with:
64+
path: ~/.cache/pip
65+
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
66+
67+
# 10. 设置 Python 环境
68+
- name: Setup Python
69+
uses: actions/setup-python@v2
70+
with:
71+
python-version: '3.8'
72+
73+
# 11. 安装 pip 依赖(如果 requirements.txt 存在)
74+
- name: Install pip dependencies
75+
run: |
76+
if [ -f requirements.txt ]; then
77+
pip install -r requirements.txt
78+
else
79+
echo "No requirements.txt found. Skipping pip install."
80+
fi
81+
82+
# 12. Docker 构建:构建当前目录下的 Docker 镜像
83+
- name: Build Docker Image
84+
run: |
85+
if [ -f Dockerfile ]; then
86+
docker build -t secret-tester:latest .
87+
else
88+
echo "No Dockerfile found. Skipping Docker build."
89+
fi
90+
91+
# 13. 将构建的 Docker 镜像保存为 tar 包
92+
- name: Save Docker Image to Tarball
93+
run: |
94+
if docker image inspect secret-tester:latest > /dev/null 2>&1; then
95+
docker save secret-tester:latest -o secret-tester.tar
96+
else
97+
echo "Docker image not built. Skipping save."
98+
fi
99+
100+
# 14. 上传 Docker 镜像 tar 包作为 Artifact(可选)
101+
- name: Upload Docker Image Artifact
102+
uses: actions/upload-artifact@v2
103+
with:
104+
name: docker-image-artifact
105+
path: secret-tester.tar
106+
107+
# 15. 推送 Docker 镜像到 GitHub Container Registry (GHCR)
108+
- name: Push Docker Image to GHCR
109+
env:
110+
# 需在仓库 Secrets 中设置 CR_PAT (GitHub Personal Access Token)
111+
CR_PAT: ${{ secrets.CR_PAT }}
112+
run: |
113+
# 登录到 GHCR,使用 GitHub 用户名和 PAT
114+
echo $CR_PAT | docker login ghcr.io -u ${{ github.actor }} --password-stdin
115+
116+
# 输出当前镜像列表(调试用)
117+
docker images
118+
119+
# 标记镜像为 GHCR 格式(格式:ghcr.io/用户名/镜像名:标签)
120+
docker tag secret-tester:latest ghcr.io/${{ github.repository_owner }}/secret-tester:latest
121+
122+
# 再次输出镜像信息以确认标签更改
123+
docker images
124+
125+
# 推送镜像
126+
docker push ghcr.io/${{ github.repository_owner }}/secret-tester:latest

0 commit comments

Comments
 (0)