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工具,自动集成,自动部署
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
安装插件
-
默认要装的插件全部装上
-
ssh插件
-
- Send build artifacts over SSH (部署到远程用)
-
Gitlab
配置项目
-
新建项目, 自由风格
-
选择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
创建持续集成任务
-
安装一些插件 (git,violations 一些语言的link,cobertura 覆盖率)
-
配置任务详情
-
构建触发器
- 勾上 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环境 (和我的再一个机器,用绝对路径即可)
-
手动构建:
Packages: 100% Files: 100% Classes: 100% Lines: 71% Conditionals: 100%
Test Result (没有失败)
-
配置gitlab通知jenkins
jenkins webhook 地址和 secret 填到 pythondemo 项目的webhook 中 (目前 一个docker桥接,一个本机暂时网络没通,忽律此问题)