|
|
6 anos atrás | |
|---|---|---|
| src | 6 anos atrás | |
| .gitignore | 6 anos atrás | |
| LICENSE | 6 anos atrás | |
| README.md | 6 anos atrás | |
| app.sh | 6 anos atrás | |
| config.yml | 6 anos atrás | |
| pom.xml | 6 anos atrás |
基于GitLab、Jenkins与Docker的自动化编程考试系统后端部分
推荐使用Linux操作系统并在宿主机安装docker,所有依赖实例除NGINX外都使用docker运行,其中Jenkins实例推荐将宿主机的docker二进制文件和docker unix socket映射至容器中
一个GitLab实例
docker run -d --name moocoder-gitlab -p 8081:80 --restart always -v /srv/moocoder/gitlab/config:/etc/gitlab:Z -v /srv/moocoder/gitlab/log:/var/log/gitlab:Z -v /srv/moocoder/gitlab/data:/var/opt/gitlab:Z gitlab/gitlab-ce:10.8.0-ce.0
一个Jenkins实例
docker run -d --name moocoder-jenkins -p 8082:8080 --restart always -v /srv/moocoder/jenkins:/var/jenkins_home:Z -v /usr/bin/docker:/usr/bin/docker:Z -v /var/run/docker.sock:/var/run/docker.sock:Z -u root jenkins/jenkins:2.124
注意:最新版本的Jenkins官方Docker镜像缺少docker二进制文件所依赖的运行库libltdl,需要使用apt install libltdl-dev进行安装
其他:由于Jenkins Workspace中的文件均为临时性文件,当磁盘负担较重时可以使用-v /dev/shm/jenkins:/var/jenkins_home/workspace:Z来使用内存进行加速
一个Docker Registry实例
docker run -d --name moocoder-registry -p 5000:5000 --restart always -v /srv/moocoder/registry:/var/lib/registry:Z library/registry:2.6.2
一个NGINX实例
配置GitLab
为GitLab自带的NGINX增加一个反向代理服务,用于为WebHook请求增加X-Moocoder-Secret头
修改GitLab的配置文件,示例: ```diff # nginx['custom_gitlab_server_config'] = "location ^~ /foo-namespace/bar-project/raw/ {\n deny all;\n}\n"
nginx['custom_nginx_config'] = "include /etc/gitlab/webhook-proxy.conf;"
* 增加新的NGINX配置文件,示例:
server { listen 3000 default_server; listen [::]:3000 default_server; server_name _;
location / {
proxy_pass http://backend_host:8090;
proxy_set_header X-Moocoder-Secret backend_secret;
} } ```
Allow requests to the local network from hooks and services配置Jenkins
MOOCODER_HOST和MOOCODER_SECRETMOOCODER的Credential,内容为GitLab管理员用户的账号密码配置Docker
配置NGINX,主要用于拦截部分外部请求和分流Git请求,示例:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location ~ .*\.(js|css|ico|woff2)$ {
include /etc/nginx/proxy_params;
proxy_pass http://localhost:8090;
proxy_cache moocoder;
expires 7d;
add_header Cache "$upstream_cache_status";
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
proxy_hide_header Pragma;
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 2d;
}
location ~ /internal/ {
return 403;
}
location ~ / {
include /etc/nginx/proxy_params;
if ($request_uri ~* (info/refs|git-upload-pack|git-receive-pack)) {
proxy_pass http://localhost:8081;
}
proxy_pass http://localhost:8090;
}
}
配置好后端项目config.yml中的各项参数
(可选)配置防火墙,拦截对部分端口的访问
GPLv3