写点什么

Gitlab CI 之单元测试和代码扫描

用户头像
雪雷
关注
发布于: 2020 年 08 月 21 日
Gitlab CI之单元测试和代码扫描

一 代码扫描


1.1 sonarqube 规范


由于项目较多,sonarqube 的 token 在用户下定义,这样多项目就可以公用这一个 token


1.2 变量


  • SONAR_TOKEN:sonarqube token,在 sonarqube 服务器创建在用户下,所有项目统一用此 token,该变量设置在 gitlab 服务端环境变量中。 * *

  • SONAR_HOST:sonarqube 服务器地址,在该变量设置在 gitlab 服务端环境变量中。


  • PROJECT_NAME:项目名称,放在全局变量中


1.3 CI 文件


.scan:  script:    - echo -e "\033[5;35;40m code scan \033[0m"    - sonar-scanner -Dsonar.projectKey=${PROJECT_NAME} -Dsonar.sources=. -Dsonar.host.url=${SONAR_HOST} -Dsonar.login=${SONAR_TOKEN}  retry:    max: 2    when:      - always  #parallel: 2  allow_failure: true
复制代码


二 单元测试


将单元测试集成在 CI 的 test stage 中,然后将 deploy pages 集成在 deploy 步骤中。


2.1 Gitlab Pages 开启


开启 gitlab pages 需要在 gitlab 服务端配置进行开启,需要配合 gitlab CI 来完成,需要注意,名字必须为 pages,stage 必须为 deploy。Gitlab pages 会一直去在开启了 gitlab pages,这个存储库的 public 目录找静态文件现实在 gitlab pages 中,注意:这个 public 是指存储库的 public,与项目结构无关。换言之,这个 public 目录不可见。


  • 启用 gitlab pages


编辑/etc/gitlab/gitlab.rb,启用 gitlab page


gitlab_pages['access_control'] = truepages_external_url "http://xx.xx.xx.xx"gitlab_pages['enable'] = true
复制代码


执行gitlab-ctl reconfigure生效启用 pages,


  • 使用 IP 加端口方式访问


但是如果你不想那么麻烦还得配置域名的话,这里也有解决方法,由于 GitLab Pages 服务是部署到 Nginx 中,我们可以同配置 Nginx 来通过 IP 地址访问。


首先要找啊找,找到 Pages 的发布位置,和 GitLab 内置 Nginx 的位置,分别如下:


1、Pages 部署目录:/var/opt/gitlab/gitlab-rails/shared/pages


2、内置 Nginx 目录:/var/opt/gitlab/nginx


使用 IP 加端口方式访问,需要配置 gitlab nginx,编辑配置文件/var/opt/gitlab/nginx/conf/gitlab-pages.conf


server {  listen *:80;  server_name  ~^(?<group>.*)$;  server_tokens off; ## Don't show the nginx version number, a security best practice
## Disable symlink traversal disable_symlinks on; access_log /var/log/gitlab/nginx/gitlab_pages_access.log gitlab_access; error_log /var/log/gitlab/nginx/gitlab_pages_error.log;
# Pass everything to pages daemon location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto http; proxy_cache off; root /var/opt/gitlab/gitlab-rails/shared/pages/devops; #proxy_pass http://localhost:8090; } error_page 403 /403.html; error_page 404 /404.html;}
复制代码


使用 restart 来重新生效gitlab-ctl restart nginx


2.2 执行单元测试


执行单元测试生产 html 报告,生成页面文件在 coverage 目录中。


test-dev:  image: python:3.6  variables:    RUN_PY: runtests.py    PROJECT_NAME: smartant_api_linux    PROJECT_GROUP: devops  tags:    - devops-dev-runner  stage: test-scan  script:    - echo -e "\033[5;35;40m code scan \033[0m"    - cd /builds/${PROJECT_GROUP}/${PROJECT_NAME}    - pip install --default-timeout=500 -r requirements/requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com			# 安装环境依赖    - cd test && coverage run --include=../application.py,../logs.py,../libs/*.py,../views/*.py  --omit="test_*.py" ${RUN_PY} && echo 0 || echo 0				# 执行单元测试    - coverage report -m    - coverage html -d ../coverage	# 生产报告    - ls -l    - pwd  artifacts:    paths:      - coverage				# 将报告存储在制品中  only:    - dev  retry:    max: 2    when:      - always  allow_failure: true
复制代码


2.3 部署 pages


上一步已经完成了单元测试并根据单元测试完成覆盖 html 文件生成,在此部署将 pages 进行部署,注意:名字必须为 pages,且 stage 为 deploy,其中该步骤依赖于生成静态文件的 stage,并将制品在该步骤中进行传递,重命名为 public,由于之前已经配置了 nginx,此刻,利用 IP 端口就能访问到 public 下面的文件。


pages:  variables:    PROJECT_NAME: smartant_api_linux  tags:    - devops-dev-runner  stage: deploy  dependencies:    - test-dev  script:    - echo -e "\033[5;35;40m deploy gitlab page \033[0m"    - mv coverage/ public/  artifacts:    expire_in: 3 days    paths:      - public/  only:    - dev
复制代码



访问:通过项目名称+ public 进行访问。



参考链接


  • https://about.gitlab.com/blog/2016/11/03/publish-code-coverage-report-with-gitlab-pages/

  • https://docs.gitlab.com/ee/user/project/pages/index.html

  • https://gitlab.com/pages

  • https://www.youtube.com/watch?v=dD8c7WNcc6s

  • https://my.oschina.net/doctorlzr1988/blog/3044964

  • https://docs.gitlab.com/ee/ci/yaml/#include

  • https://docs.gitlab.com/ee/ci/yaml/includes.html


发布于: 2020 年 08 月 21 日阅读数: 106
用户头像

雪雷

关注

stay hungry stay foolish 2019.08.16 加入

Devops,python,shell,云原生,云架构,kubernetes https://github.com/redhatxl

评论

发布
暂无评论
Gitlab CI之单元测试和代码扫描