如何配置GitLab CI/CD的.yml文件将HTML报告部署至Nginx服务器
问题描述
我在GitLab某Job的artifacts文件夹下生成了HTML报告,希望将其部署到Nginx托管的Web服务器(http://some_domain_name:8080)上。当前我的.gitlab-ci.yml文件配置如下:
job: artifacts: name: "artifact_name" paths: - artifacts expire_in: 7 days
我可通过以下API下载artifacts并提取HTML报告:
curl --location --output artifacts.zip --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts"
请问是否可通过配置.yml文件,将artifacts文件夹中的HTML文件直接部署到该Nginx服务器?
解决方案
完全可以直接通过.gitlab-ci.yml配置实现部署,无需手动调用API下载。核心思路是新增一个部署阶段的Job,依赖生成artifacts的Job,再通过文件传输工具将HTML文件推送至Nginx服务器的网站根目录。
具体配置步骤
配置服务器SSH密钥到GitLab变量
将目标Nginx服务器的SSH私钥(用于免密登录)添加到项目的Settings > CI/CD > Variables中,变量名建议设为SSH_PRIVATE_KEY,同时开启Protected和Masked选项保障安全。修改
.gitlab-ci.yml添加部署Job
在原有配置基础上补充部署逻辑,示例如下:stages: - build - deploy build_job: stage: build artifacts: name: "artifact_name" paths: - artifacts expire_in: 7 days # 此处保留你原有生成HTML报告的构建命令 deploy_to_nginx: stage: deploy dependencies: - build_job # 关联构建Job,自动拉取其生成的artifacts before_script: # 配置SSH免密登录环境 - mkdir -p ~/.ssh - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan <你的Nginx服务器IP> >> ~/.ssh/known_hosts script: # 用scp将artifacts内的文件同步到Nginx网站根目录(示例路径为/usr/share/nginx/html) - scp -r artifacts/* <服务器登录用户名>@<你的Nginx服务器IP>:/usr/share/nginx/html/ # 若追求增量更新效率,可替换为rsync: # - rsync -avz artifacts/* <服务器登录用户名>@<你的Nginx服务器IP>:/usr/share/nginx/html/ only: - main # 仅在main分支触发部署,可根据需求调整分支规则
注意事项
- 确保Nginx服务器防火墙允许GitLab Runner的IP访问SSH端口(默认22)。
- 确认Nginx网站根目录的权限,保证部署用户拥有写入权限。
- 若使用
rsync,需确保目标服务器已安装该工具,否则使用scp即可。
内容的提问来源于stack exchange,提问作者ashish_k
相关产品推荐
相关产品推荐

