使用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失败后的自动重试次数
posted @ 2021-09-23 10:43  Yasg  阅读(515)  评论(0)    收藏  举报