gitlab 安装

安装文档 https://docs.gitlab.cn/jh/install/docker.html

因为我的电脑内存不够,所以安装版本低的 小于10 不怎么吃内存

 1docker run --detach \
 2  --hostname 127.0.0.1 \
 3  --publish 8881:443 --publish 8882:80 --publish 8883:22 \
 4  --name gitlab \
 5  --restart always \
 6  --volume `pwd`/config:/etc/gitlab \
 7  --volume `pwd`/logs:/var/log/gitlab \
 8  --volume `pwd`/data:/var/opt/gitlab \
 9  gitlab/gitlab-ce:9.3.10-ce.0
10  
11  
12#root 123456

jenkins 安装 、使用

jenkins: cicd工具,自动集成,自动部署

官网: https://www.jenkins.io/

1/var/jenkins_home jenkins的家目录 包含了jenkins的所有配置。
2 以后要注意备份 /var/jenkins_home (以文件的方式固化的)

docker安装

1docker run \
2-u root \
3-d \
4-p 8880:8080 \
5-p 50000:50000 \
6-v /Users/mac/code/dockerdata/jenkins-data:/var/jenkins_home \
7-v /etc/localtime:/etc/localtime:ro \
8-v /var/run/docker.sock:/var/run/docker.sock \
9--restart=always jenkinsci/blueocean

ps

1自己构建镜像 RUN的时候就把时区设置好 #如果是别人的镜像,docker hub,UTC; 容器运行时 , 
2-v /etc/localtime:/etc/localtime:ro

浏览器输入:http://127.0.0.1:8880/ 等待初始化完毕 ,一般需要几分钟

密码

1cat /Users/mac/code/dockerdata/jenkins-data/secrets

非docker安装

1java -jar jenkins.war --httpPort=8884
2#  /Users/mac/.jenkins  目录
3
4# root alalal123

安装插件

配置项目

  • 新建项目, 自由风格

  • 选择git, 填写地址 和 认证

    1Repository URL: ssh://git@127.0.0.1:8883/code/gosky.git       (gitlab 本地docker搭建的ssh 端口 8883   )
    
  • 填写构建shell

  • 构建触发器 (可选 ,可以手动构建)

  • build

  • 构建后的操作 ,可以部署到远程去

凭证管理

  • 用户名密码的方式,如github,gitlab 的用户名密码

  • 如github的 项目私钥

  • 如ssh 登录服务器 账户密码登录 或者 私钥方式

    (私钥方式没搞定,不知道是啥原因)

python 项目代码持续集成demo

编写代码

|-jenkins

|– jenkins.py

|–test

|—-test_jenkins.py

简单示例

1cd jenkins
2
3export PYTHONPATH=`pwd` 

jenkins.py

 1#coding=utf-8
 2import flask
 3
 4app = flask.Flask(__name__)
 5@app.route('/')
 6def index():
 7    return 'hello world'
 8
 9
10if __name__ == '__main__':
11    app.debug = True
12    app.run(port=6000)

test_jenkins.py

1python3.7 test/test_jenkins.py
 1# coding=utf-8
 2
 3import unittest
 4from jenkins import app
 5
 6class TestJenkins(unittest.TestCase):
 7    def setUp(self):
 8        self.client = app.test_client()
 9
10    def test_index(self):
11        res = self.client.get('/')
12        self.assertEqual(res.data.decode('utf-8'), 'hello world')
13
14if __name__ == '__main__':
15    unittest.main()

覆盖率测试

1pip3 install coverage   
2pip3 install nose   
3# 查看单元测试报告 和 覆盖率报告
4nosetests --with-coverage --with-xunit --cover-package=jenkins --cover-erase  && coverage xml

提交代码到远程

1git remote add origin ssh://git@127.0.0.1:8883/code/pythondemo.git

创建持续集成任务

  1. 安装一些插件 (git,violations 一些语言的link,cobertura 覆盖率)

  2. 配置任务详情

  • 构建触发器

    • 勾上 Poll SCM 不填写,就是当postcommit的时候会构建 (webhook)
    • Build when a change is pushed to GitLab. GitLab webhook URL: http://127.0.0.1:8884/project/pythonweb
  • 构建环境: Delete workspace before build starts (删除久的环境)

  • 构建 选择 shell

    1jenkins机器和我代码在同台服务器,用绝对路径,因为我用了虚拟环境
    2
    3/Users/mac/code/jenkins/.virtualenv/bin/nosetests --with-coverage --with-xunit --cover-package=jenkins --cover-erase  && /Users/mac/code/jenkins/.virtualenv/bin/coverage xml || exit 0
    
  • 构建后操作

    1Publish Cobertura Coverage Report (覆盖率报告)     填上    coverage.xml
    2Publish JUnit test result report   (单元测试报告)  填上     nosetests.xml
    
  • 配置jenkins机器的python环境 (和我的再一个机器,用绝对路径即可)

  • 手动构建:

    Cobertura Coverage Report

    Packages: 100% Files: 100% Classes: 100% Lines: 71% Conditionals: 100%

    Test Result (没有失败)

  • 配置gitlab通知jenkins

    jenkins webhook 地址和 secret 填到 pythondemo 项目的webhook 中 (目前 一个docker桥接,一个本机暂时网络没通,忽律此问题)