使用docker+gitlab 实现ci,cd 学习笔记
主要内容
- 使用docker搭建一套gitlab cd/cd环境
- 使用gitlab ci/cd解决各种项目集成,部署的难题
- 讲解ci/cd中涉及到的各个组件、流程、知识点
- 实践各种部署项目的流水线
起步
使用脚本安装docker 并通过--mirror制定到国内源
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
CentOS8 额外设置
由于 CentOS8 防火墙使用了 nftables,但 Docker 尚未支持 nftables, 我们可以使用如下设置使用 iptables:
更改 /etc/firewalld/firewalld.conf
FirewallBackend=iptables
或者执行如下命令:
$ firewall-cmd --permanent --zone=trusted --add-interface=docker0
$ firewall-cmd --reload
启动docker
$ sudo systemctl enable docker
$ sudo systemctl start docker
使用docker部署gitlab
docker pull gitlab/gitlab-ce
docker run --detach \
--hostname 121.36.251.154 \
--publish 443:443 --publish 80:80 --publish 222:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
docker安装gitlab-runner
docker pull gitlab/gitlab-runner
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner docker.io/gitlab/gitlab-runner register \
--non-interactive \
--executor "docker" \
--docker-image alpine:latest \
--url "http://121.36.251.154/" \
--registration-token "8WmCyboJsnpy131kys7R" \
--description "first-register-runner" \
--tag-list "test-cicd,dockercicd" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
一个简单的nginx用来存放页面
docker pull docker.io/nginx
启动并挂载出来
docker run --name nginx -dp 80:80 \
-v /home/docker-nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker-nginx/log:/var/log/nginx \
-v /home/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
nginx
安装code-server并设置密码
docker run -itd --name my-code -u root -p 8086:8080 \
-v /data/my-code:/home/coder/project -e PASSWORD=123456 codercom/code-server:latest --auth password
安装完成之后可以使用codeserve提交代码测试cicd流程
进入容器安装依赖
docker exec -it my-code /bin/bash
apt-get update
apt-get upgrade
apt-get install software_name
.gitlab-ci.yml 学习
我们就在这里介绍以下在流程中,起到工作式指令的配置文件.gitlab-ci.yml文件;
其核心作用是:将它放置于项目仓库的根目录,则仓库提交合并后,则会根据该配置文件进行一系列工作。
# 定义 stages
stages:
- package #打包
- build #构建docker镜像
- run #运行docker
variables:
TAG: microservice #镜像名称
# job
# 打包
package:
stage: package
script:
- mvn clean package -Dmaven.test.skip=true
- cp ./target/*.jar /home/gitlab-runner/docker_project/microservice.jar
only:
- master
# 构建镜像
docker-build:
stage: build
script:
- cd /home/gitlab-runner/docker_project
- docker build -t $TAG .
when: manual #手动
only:
- master
docker-build-log:
stage: build
script:
- echo "test"
when: manual #手动
only:
- master
# 运行容器
decker-run:
stage: run
script:
- docker rm -f $TAG || true
- docker run -d --name $TAG -p 1883:8080 $TAG
when: manual #手动
only:
- master
gitlab-ci.yml参数列表
| 值 | 是否必须 | 描述 |
|---|---|---|
| script | 必须 | 定义由Runner执行的shell脚本或命令 |
| extends | 非必须 | 定义此作业将继承的配置条目 |
| image | 非必须 | 需要使用的docker镜像,请查阅该文档 |
| services | 非必须 | 定义所需的docker服务,请查阅该文档 |
| stage | 非必须 | 定义一个工作场景阶段,默认是test |
| type | 非必须 | stage的别名,不赞成使用 |
| variables | 非必须 | 在job级别上定义的变量 |
| only | 非必须 | 定义job所引用的git分支 |
| except | 非必须 | 定义job所不适用的git分支 |
| tags | 非必须 | 定义job所适用的runner,tags为runner标签 |
| allow_failure | 非必须 | 允许任务失败,但是如果失败,将不会改变提交状态 |
| when | 非必须 | 定义了job什么时候执行,可以是on_success、on_failure、always和manual |
| dependencies | 非必须 | 定义了该job依赖哪一个job,如果设置该项,可以通过artifacts设置 |
| artifacts | 非必须 | 工件,在依赖项之间传递的东西,类似cache,但原理与cache不同 |
| cache | 非必须 | 定义需要被缓存的文件、文件夹列表 |
| before_script | 非必须 | 覆盖在作业之前执行的脚本或命令 |
| after_script | 非必须 | 覆盖在作业之后执行的脚本或命令 |
| environment | 非必须 | 定义让job完成部署的环境名称 |
| coverage | 非必须 | 定义job设置代码覆盖率 |
| retry | 非必须 | 定义job失败后的自动重试次数 |

浙公网安备 33010602011771号