本文通过Docker + Gitlab + Gitlab CI实现容器的自动化部署。
环境如下:
ip | role | domain |
---|---|---|
192.168.1.51 | prod server | none |
192.168.1.55 | dns | none |
192.168.1.56 | gitlab ci/dev server | none |
192.168.1.57 | gitlab server | gitlab.lzxlinux.cn |
192.168.1.59 | harbor server | harbor.lzxlinux.cn |
注意:为了方便后面实验,建议自定义的域名不要与外部域名冲突,否则在连接外网情况下容易解析错误。
Flask项目CI示例
通过gitlab和gitlab ci进行flask项目CI演示。
- 添加docker runner:
# gitlab-ci-multi-runner register \
--tls-ca-file=/etc/gitlab/ssl/gitlab.lzxlinux.cn.crt \
--url "https://gitlab.lzxlinux.cn/" \
--registration-token "4kr9ZmLMWasYxqB2tSzQ" \
--name "docker-python2.7" \
--tag-list "python2.7" \
--run-untagged="false" \
--locked="false" \
--executor "docker" \
--docker-image python:2.7
# gitlab-ci-multi-runner register \
--tls-ca-file=/etc/gitlab/ssl/gitlab.lzxlinux.cn.crt \
--url "https://gitlab.lzxlinux.cn/" \
--registration-token "4kr9ZmLMWasYxqB2tSzQ" \
--name "docker-python3.7" \
--tag-list "python3.7" \
--run-untagged="false" \
--locked="false" \
--executor "docker" \
--docker-image python:3.7
# gitlab-ci-multi-runner list
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
worker4 Executor=shell Token=aLzTn6bfk1tXNBLRBbSD URL=https://gitlab.lzxlinux.cn/
docker-python2.7 Executor=docker Token=xBRbYbafrCbxCqcZVrpe URL=https://gitlab.lzxlinux.cn/
docker-python3.7 Executor=docker Token=mc4yojxLhokcVqeBzxxd URL=https://gitlab.lzxlinux.cn/
- 新建项目
flask-demo
:
从github导入项目到gitlab中,
- 新建文件
.gitlab-ci.yml
:
stages:
- style
- test
pep8:
stage: style
script:
- pip install tox
- tox -e pep8
tags:
- python2.7 #指定对应标签的runner执行
unittest-py27:
stage: test
script:
- pip install tox
- tox -e py27
tags:
- python2.7
unittest-py37:
stage: test
script:
- pip install tox
- tox -e py37
tags:
- python3.7
- 查看运行情况:
打开CI/CD
→ 流水线
,
pep8代码格式检查成功
单元测试python2.7成功
单元测试python3.7成功
- 流水线通用配置:
自定义流水线配置,查看流水线状态和覆盖率报告。
设置
→ CI/CD
→ Pipeline status
→ Coverage report
,
分别拷贝markdown部分到README.md
中,同时针对代码设置测试覆盖率解析
,
最后我们就可以在项目的README.md
中看到流水线状态和覆盖率报告,
Flask项目CI/CD示例
在上面的基础上,通过gitlab和gitlab ci进行flask项目CI/CD演示,即增加部署操作。
- 编辑
Dockerfile
:
FROM python:2.7.17-alpine
LABEL author="LZX <admin@lzxlinux.cn>"
RUN apk add --no-cache gcc musl-dev openssl-dev libffi-dev
COPY . /skeleton
WORKDIR /skeleton
RUN pip install -i https://pypi.mirrors.ustc.edu.cn/simple -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["sh", "scripts/dev.sh"]
- 修改
.gitlab-ci.yml
:
stages:
- style
- test
- deploy
pep8