本文共 9524 字,大约阅读时间需要 31 分钟。
tags:
categories:
# 安装依赖sudo yum install -y git vim gcc glibc-static telnetsudo yum install -y curl policycoreutils-python openssh-serversudo systemctl enable sshdsudo systemctl start sshdsudo yum install postfixsudo systemctl enable postfixsudo systemctl start postfix# 设置gitlab安装源sudo mkdir -p /etc/yum.repos.d/sudo tee /etc/yum.repos.d/gitlab-ce.repo <<-'EOF'[gitlab-ce]name=Gitlab CE Repositorybaseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/gpgcheck=0enabled=1EOF# 安装GitLab 本地测试,则可以像下面一样, 设置一个example的域名sudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ce# 然后记得在本地你的笔记本设置host C:\Windows\System32\drivers\etc # 192.168.211.10 gitlab.example.com# 如果不想设置域名可以直接sudo yum install -y gitlab-ce# 安装后可以对gitlab进行配置 第一次不配置就不启动sudo gitlab-ctl reconfigure# 查看运行进程 是否存在(不存在的话 可以看下配置加载没) 如果存在 主机浏览器输入看到界面http://gitlab.example.com/# 修改gitlab的常用配置 重新加载sudo vim /etc/gitlab/gitlab.rbsudo gitlab-ctl reconfigure
创建一个demo组,在组中创建一个HelloWorld的Project工程。并添加README.md文件。
本地使用Git工具进行第一次下载代码。
git clone http://gitlab.example.com/demo/Helloworld.git
# 安装Docker 我环境中已经有docker 就不用安装了sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]}EOFsudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo yum install -y yum-utils lvm2 git vim gcc glibc-static telnet bridge-utils net-tools bind-utils wget device-mapper-persistent-data nfs-utilssudo yum install -y docker-ce# 安装gitlab ci runnercurl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bashsudo yum install gitlab-ci-multi-runner -y# 查看是否运行正常sudo gitlab-ci-multi-runner status# 设置Docker权限# 为了能让gitlab-runner能正确的执行docker命令,需要把gitlab-runner用户添加到docker group里, 然后重启docker和gitlab ci runnersudo usermod -aG docker gitlab-runnersudo service docker restartsudo gitlab-ci-multi-runner restart
# 先在GitLab CI服务器上添加GitLab服务器host # 192.168.211.10 gitlab.example.comsudo vi /etc/hosts# 查看帮助奥gitlab-ci-multi-runner -h# 注册sudo gitlab-ci-multi-runner register# 1. 提示输入GitLab服务器http://gitlab.example.com/# 2. 输入gitlab-ci token查看 看下图7s6AgGVqPMTo4QsYLyHV# 3. 输入描述 随便输入 不写也行# 4. 输入tag 提示逗号隔开 我们写两个test, demo# 5. 是否untags build 默认否 直接enter# 6. 是否只为这一个工程服务 默认否 直接enter# 7. 选择执行方式这里选shell。Please enter the executor: shell, ssh, virtualbox, docker-ssh+machine, kubernetes, docker, docker-ssh, parallels, docker+machine:shell# 注册成功 查看runnergitlab-ci-multi-runner list
# 按照stages的顺序执行 先执行build job2stages: - build - test - deployjob1: stage: test tags: - demo script: - echo "I am job1" - echo "I am in test stage" job2: stage: build tags: - demo script: - echo "I am job2" - echo "I am in build stage" job3: stage: deploy tags: - demo script: - echo "I am job3" - echo "I am in deploy stage"
导入之前github中的之前使用的python项目到gitlab中。
克隆gitlab上代码到本地。和上面一样使用http协议
# 构建镜像docker build -t flask-demo # 运行容器docker run -d -p 5000:5000 flask-demo# 检查风格tox
docker pull andyshinn/dnsmasqdocker run -d -p 53:53/tcp -p 53:53/udp --cap-add=NET_ADMIN --name dns-server andyshinn/dnsmasq
docker exec -it dns-server /bin/sh# 首先配置上行的真正的dns服务器地址,毕竟你只是个本地代理,不了解外部规则。创建文件:vi /etc/resolv.dnsmasq#添加内容:nameserver 114.114.114.114nameserver 8.8.8.8# 配置本地解析规则,这才是我们的真实目的。新建配置文件vi /etc/dnsmasqhosts# 添加解析规则,其中192.168.211.10是gitlab服务器地址192.168.211.10 gitlab.example.com# 修改dnsmasq配置文件,指定使用上述我们自定义的配置文件,vi /etc/dnsmasq.conf# 修改下述两个配置resolv-file=/etc/resolv.dnsmasqaddn-hosts=/etc/dnsmasqhosts#回到宿主,重启dns-server容器服务。docker restart dns-server# 这时候这台docker host就是一个DNS服务器了,假如他的地址是192.168.99.100
# 注册sudo gitlab-ci-multi-runner register# 1. 提示输入GitLab服务器http://gitlab.example.com/# 2. 输入gitlab-ci token查看 看下图7s6AgGVqPMTo4QsYLyHV# 3. 输入描述 随便输入 不写也行# 4. 输入tag 提示逗号隔开 我们写两个python2.7# 5. 是否untags build 默认否 直接enter# 6. 是否只为这一个工程服务 默认否 直接enter# 7. 选择执行方式这里选shell。Please enter the executor: shell, ssh, virtualbox, docker-ssh+machine, kubernetes, docker, docker-ssh, parallels, docker+machine:docker# 8. 输入docker imagepython2.7# 注册成功 查看runnersudo gitlab-ci-multi-runner listsudo gitlab-ci-multi-runner verify
面板中启用runner
在gitlab-ci中提前拉取镜像。
修改gitlab-ci.yml。触发CI pipline(如果失败,看看是不是下载python库的原因,如果是在Dockerfile 加上豆瓣源 -i https://pypi.douban.com/simple)
variables: GIT_SSL_NO_VERIFY: "1"stages: - style - testpep8: stage: style image: python:2.7 script: - pip install tox -i https://pypi.douban.com/simple - tox -e pep8 tags: - python27unittest-py27: stage: test image: python:2.7 script: - pip install tox -i https://pypi.douban.com/simple - tox -e py27 tags: - python27unittest-py34: stage: test image: python:3.4 script: - pip install tox -i https://pypi.douban.com/simple - tox -e py34 tags: - python34
# 注册sudo gitlab-ci-multi-runner register# 1. 提示输入GitLab服务器http://gitlab.example.com/# 2. 输入gitlab-ci token查看 看下图7s6AgGVqPMTo4QsYLyHV# 3. 输入描述 随便输入 不写也行# 4. 输入tag 提示逗号隔开 我们写两个maven# 5. 是否untags build 默认否 直接enter# 6. 是否只为这一个工程服务 默认否 直接enter# 7. 选择执行方式这里选shell。Please enter the executor: shell, ssh, virtualbox, docker-ssh+machine, kubernetes, docker, docker-ssh, parallels, docker+machine:docker# 8. 输入docker imagemaven:latest# 注册成功 查看runnersudo gitlab-ci-multi-runner listsudo gitlab-ci-multi-runner verify
docker-deploy: stage:deploy script : - docker build -t flask-demo - if [ $(docker ps -aq --filter name=web) ];then docker rm -f web;fi - docker run -d -p 5000:5000 --name=web flask-demo tags: - demo
docker-deploy: stage:deploy script : - docker build -t flask-demo - if [ $(docker ps -aq --filter name=web) ];then docker rm -f web;fi - docker run -d -p 5000:5000 --name=web flask-demo tags: - demo only: - master
# 在上面安装docker的gitlab-DNS上运行 docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2# docker registry 绑定了到本地的80端口。 接下来我们配置DNS server,假如我们这台运行registry的机器地址是192.168.99.100,然后我们找到上次配置gitlab ci的那个dns containerdocker exec -it dns-server /bin/sh# 添加一条新的记录# more /etc/dnsmasqhosts192.168.211.10 gitlab.example.com192.168.99.100 registry.example.com# 然后重启containerdocker restart dns-server# 最后我们去gitlab-ci服务器,ping一下ping registry.example.com
# 修改文件 指向自己的私有仓库 registry.example.comsudo tee /etc/docker/daemon.json <<-'EOF'{ "insecure-registries":["registry.example.com:5000"] }EOF# 先拉去busyboxdocker pull busybox# 重新打上标签docker tag busybox registry.example.com:5000/busybox# 重启后生效 源文件修改生效sudo systemctl restart docker# 上传到自己的私有仓库 成功如下#The push refers to repository [registry.example.com:5000/busybox]5b0d2d635df8: Pushed# latest: digest: sha256:a2490cec4484ee6c1068ba3a05f89934010c85242f736280b35343483b2264b6 sidocker push registry.example.com:5000/busybox
docker-deploy: stage:deploy script : - docker build -t registry.example.com:5000/flask-demo . - docker push registry.example.com:5000/flask-demo - if [ $(docker ps -aq --filter name=web) ];then docker rm -f web;fi - docker run -d -p 5000:5000 --name=web flask-demo tags: - demo only: - masterdocker-image-release: stage:release script: - docker build -t registry.example.com:5000/flask-demo:$CI_ COMMIT_TAG . - docker push registry.example.com:5000/flask-demo:$CI_COMMIT_TAG tags: - demo only: - tags
pep8: stage: style image: python:2.7 script: - pip install tox -i https://pypi.douban.com/simple - tox -e pep8 tags: - python27 except: - tags
转载地址:http://zund.baihongyu.com/