参考Wesley·zk 的博客,网址:https://www.cnblogs.com/szk5043/articles/9854712.html
参考Gitlab官网:https://docs.gitlab.com/ee/ci/
一、Docker构建镜像
Gitlab CI/CD 被 .gitlab-ci.yml 文件配置,需要放在版本库的根目录下。该脚本被GitLab Runner.执行。
before_script:
- apt-get install rubygems ruby-dev -y
run-test:
script:
- ruby --version
before_script 将安装 应用运行时的依赖,一个工作叫 run-test,将打印ruby的版本信息。
# docker镜像
image: ruby:2.1 需要的docker镜像
# 依赖的docker服务
services:
- postgres
# 开始执行脚本前所需执行脚本
before_script:
- bundle install
# 脚本执行完后的钩子,执行所需脚本
after_script:
- rm secrets
# 该ci pipeline适合的场景
stages:
- build
- test
- deploy
# 定义的任务1
job1:
# 场景为构建
stage: build
# 所需执行的脚本
script:
- execute-script-for-job1
# 在哪个分支上可用
only:
- master
# 指定哪个ci runner跑该工作
tags:
- docker
实例:
stages: ##场景
- build
- csvnbuild
job_build:
image: tophatdave/grails-2.4.4 ##需要使用的docker镜像
stage: build
script: #需要执行的脚本
- cd svnedge
- cd conf
- cd ../../
- grails war
- find . -name svnedge-5.2.0.war -type f | xargs -i mv {} ./csvndocker/conf/csvn.war
- cd csvndocker
- cd conf
- ls -l
only: # 定义job所引用的git分支
- master
tags: # 定义job所适用的runner
- docker
cache: #定义需要被缓存的文件、文件夹列表
paths:
- svnedge/csvn.war
artifacts: # 工件,在依赖项之间传递的东西
paths:
- svnedge/csvndocker
job_build_csvn:
stage: csvnbuild
script:
- ls -l
- cd svnedge
- ls -l
- docker build --no-cache -t "xxx/csvn:v2" .
- docker push "rxxxx/csvn:v2"
only:
- master
tags:
- dockerbuild
在csvnbuild阶段,其中有一个场景为:csvndocker,其中的
docker build阶段为:从 dockerfile 构建一个镜像。
docker build --no-cache -t "xxx/csvn:v2" . # 构建镜像 ,不使用缓存。
--no-cache | Do not use cache when building the image |
--tag , -t | Name and optionally a tag in the ‘name:tag’ format |
二、 执行Dockerfile文件
FROM:指定基础镜像,必须为第一个命令
如FROM ip:5200/docker-jdk
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
MAINTAINER: 维护者信息
RUN:构建镜像时执行的命令
如RUN cd /etc/apt/ && cp sources.list sources.list.bak
COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
EXPOSE 2333 8080 3306 暴露端口
ADD:将本地文件添加到容器中
VOLUME:用于指定持久化目录
USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户
USER csvn
CMD:构建容器后调用,也就是在容器启动时才进行调用
CMD ["/root/run.sh","run"]