docker学习05 - 配置docker持续交付

docker DI

1.1 安装gitlab
1.1.1 docker-compose.yml文件
version: '3.1'
services:
 gitlab:
  image: 'twang2218/gitlab-ce-zh:11.1.4'
  container_name: "gitlab"
  restart: always
  privileged: true
  hostname: 'gitlab'
  environment:
   TZ: 'Asia/Shanghai'
   GITLAB_OMNIBUS_CONFIG: |
    external_url 'http://172.16.195.134'
    gitlab_rails['time_zone'] = 'Asia/Shanghai'
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['gitlab_shell_ssh_port'] = 22
  ports:
   - '80:80'
   - '443:443'
   - '22:22'
  volumes:
   - /usr/local/gitlab/compose01/config:/etc/gitlab
   - /usr/local/gitlab/compose01/data:/var/opt/gitlab
   - /usr/local/gitlab/compose01/logs:/var/log/gitlab
1.1.2 由于 gitlab 有22 端口的占用,与 ssh 冲突了,所以需要改ssh的 端口
[root@centOS compose01]# vi /etc/ssh/sshd_config

# 修改服务器 ssh端口
Port 60022

# 重启ssh服务
[root@centOS compose01]# systemctl restart sshd
1.1.3 由于 新添加 的 60022 端口不是linux 默认添加的,所以需要从防火墙开放这个端口
# 修改防火墙配置
iptables -I INPUT  -p tcp --dport 60022 -j ACCEPT 

# 保存到 iptables 文件中
service iptables save

# 如果 /etc/sysconfig/下没有iptables 文件,需要安装一下 
yum install iptables-services
# 设置开机自启 
systemctl enable iptables
# 启动防火墙 
systemctl start iptables
1.1.4 在浏览器中输入 ip
1.1.5 配置

首先设置新的密码

我们这设置的是root123456

默认的用户名是root

登录成功 !!!

1.2 搭建gitlab-runner
1.2.1 什么是gitlab-runner
1.2.2 如何获取gitlab-runner镜像

如果我们之前配置的docker远程镜像仓库不包含gitlab-runner镜像,可以通过配置其他的镜像仓库来得到这个镜像。

1.2.3 修改/etc/docker/ 目录下的 daemon.json 文件(可选操作,我没有配置)
# 需要创建 /etc/docker/daemon.json,并添加如下内容
{
	# 设置私服的地址
	"registry-mirrors":["https://registry.docker-cn.com"],
	# 设置公司内部私服的ip和端口号
	"insecure-registries":["ip:port"]
}
1.2.4 重启docker服务
# 重新加载配置文件
systemctl daemon-reload
# 重启docker
systemctl restart docker
1.2.5 创建gitlab-runner通过目录
mkdir /usr/local/gitlab/gitlab_runner
mkdir /usr/local/gitlab/gitlab_runner/config
mkdir /usr/local/gitlab/gitlab_runner/config/gitlab_runner
mkdir /usr/local/gitlab/gitlab_runner/environment

# 创建单位文件结构为 如果没有tree命令,可以使用yum -y install tree 命令安装
[root@centOS gitlab]# tree gitlab_runner/
gitlab_runner/
├── config
│   └── gitlab_runner
├── docker-compose.yml
└── environment
    ├── apache-maven-3.6.3-bin.tar.gz
    ├── Dockerfile
    └── jdk-8u221-linux-x64.tar.gz
1.2.6 创建docker-compose.yml文件
version: '3.1'
services:
  gitlab-runner:
    restart: always
    build: environment
    container_name: gitlab-runner
    privileged: true
    volumes:
      - ./config/gitlab_runner:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
      - /bin/docker:/bin/docker
1.2.7 传送环境文件
# 下载好 linux 版本的 jdk和maven,传送到environment目录下
1.2.8 创建dockerfile文件
# 在environment目录下创建dockerfile文件
vi Dockerfile

# 填写以下值
version: '3.1'
FROM gitlab/gitlab-runner
# 指定作者
# MAINTAINER Lusifer <topsale@vip.qq.com>

# 安装 Docker Compose
WORKDIR /usr/local/bin
RUN wget https://raw.githubusercontent.com/topsale/resources/master/docker/docker-compose
RUN chmod +x docker-composes

# 安装 Java
RUN mkdir -p /usr/local/java
WORKDIR /usr/local/java
COPY jdk-8u221-linux-x64.tar.gz /usr/local/java
RUN tar -zxvf jdk-8u221-linux-x64.tar.gz && \
    rm -fr jdk-8u221-linux-x64.tar.gz

# 安装 Maven
RUN mkdir -p /usr/local/maven
WORKDIR /usr/local/maven
# RUN wget https://raw.githubusercontent.com/topsale/resources/master/maven/apache-maven-3.6.3-bin.tar.gz
COPY apache-maven-3.6.3-bin.tar.gz /usr/local/maven
RUN tar -zxvf apache-maven-3.6.3-bin.tar.gz && \
    rm -fr apache-maven-3.6.3-bin.tar.gz
# COPY settings.xml /usr/local/maven/apache-maven-3.6.3/conf/settings.xml

# 配置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.6.3
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

WORKDIR /

1.2.9 在宿主机重启docker后执行授予权限的命令
# 为了指定宿主机docker一个执行权限 
[root@centOS gitlab_runner]# sudo chown root:root /var/run/docker.sock
1.2.10 在 /usr/local/gitlab/gitlab_runner 目录下执行 docker-compose up -d --build ,构想镜像和启动容器
1.2.11 给刚刚运行的容器添加一个权限
docker exec -it gitlab-runner usermod -aG root gitlab-runner
1.2.12 在 gitlab 上创建一个项目
1.2.13 注册runner信息到gitlab
1.2.14 进入创建的项目,在设置目录下点击ci/di
1.2.15 展开Runner项
1.2.15.1 获取到在服务器中需要的参数

上图中的 第2项和第3项 是要用到的url和令牌

1.2.15.2 配置gitlab-runner 参数

在gitlab-runner服务器上执行下列命令

docker exec -it gitlab-runner gitlab-runner register

# 输入 GitLab 地址  上图中的第二项
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://172.16.195.134/

# 输入 GitLab Token  上图中的第三项
Please enter the gitlab-ci token for this runner:
rEoYGJSNMwJ5Xt_mSSvy

# 然后runner会让我们填一些描述置类的 

# 输入 Runner 的说明
Please enter the gitlab-ci description for this runner:
可以为空
 
# 设置 Tag,可以用于指定在构建规定的 tag 时触发 ci
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
 
# 这里选择 true ,可以用于代码上传后直接执行(根据版本,也会没有次选项)
Whether to run untagged builds [true/false]:
true
 
# 这里选择 false,可以直接回车,默认为 false(根据版本,也会没有次选项)
Whether to lock Runner to current project [true/false]:
false
 
# 选择 runner 执行器,这里我们选择的是 shell
Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh:
shell
1.2.16 查看日志
# 使用命令查看docker-compose命令,会发现日志报错误

docker-compose logs -f

gitlab-runner    | ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory  builds=0
gitlab-runner    | ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory  builds=0
gitlab-runner    | ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory  builds=0

# 但是不用怕,这是因为还没有把gitlab 和 gitlab-runner 关联起来,当下面的步骤完成后,就会正常了
gitlab-runner    | Configuration loaded                                builds=0
1.2.17 配置完成后,刷新gitlab 下 项目的runner 界面,会刷线出来一些新的东西,如
1.2.18 点击旁边的编辑,勾选运行没有标签的作业这一项,然后直接保存修改,这样,gitlab-runner就和gitlab 关联好了,并且和项目绑定在一起。
1.3 测试gitlab-runner
1.3.1 创建一个 maven 项目
  1. 打开idea -> 点击new product -> 选择maven项目 -> 不用选archetype,直接点next -> 填写一些项目相关的信息 -> 点完成

  2. pom.xml文件添加 打包方式 <packaging>war</packaging>

  3. 添加 web.xml文件 :

  4. 配置启动项和tomcat

    1. 第一步: 配置启动项
    2. 点击+,选择tomcat server
    3. 右侧 server下 配置 application server,选择本地的tomcat安装包
    4. 点击 deployment,把项目的war包放到tomcat目录下
  5. 启动项目

    1. 点击启动,如果在mac下没有配置tomcat的启动权限,会报错

      Cannot run program "/Applications/SoftWore/server/tomcat01/apache-tomcat-8.5.57/bin/catalina.sh ...
      
    2. 解决办法,到bin 目录下,给.sh 文件配置 启动权限

      ➜  bin chmod 777 *.sh
      
  1. 给项目配置gitlab地址

    1. 点击idea上面vcs,选择import into ver… -> create git repo… -> 选择项目文件夹

    2. 创建上传忽略文件 :

    3. 添加忽略文件的格式

      # Created by .ignore support plugin (hsz.mobi)
      .idea
      target
      *.im
      
    4. 配置远程仓库地址

    5. 提交代码到远程仓库

      1. 首次提交到gitlab的时候有可能出现推送错误,是因为我们我们提交前没有先从远程仓库pull代码,当我们推送的时候就报错了

      2. 解决的方式,先创建一个分支,把当前代码提交到新建的分支里,提交成功后,把新建的分支与原分支合并

        # 创建新的分支 
        testci git:(develop) git branch develop2
        # 推送到新分支 
        testci git:(develop) git push -u origin develop2
        # 切换分支
        testci git:(develop) git checkout master
        
        git fetch origin
        git checkout -b dev origin/dev
        git checkout master
        git merge --no-off dev
        git push origin master
        
    6. 编写gitlab-ci.yml文件

      1. 在项目与pom.xml文件同一路径下,创建一个 .gitlab-ci.yml文件

      2. 编写内容为

        # 要保证 stages 参数与 下面 stage 上层 以及 stage 对应的值相同 即 三个A 要相同
        #stages:
        #  - A
        #A:
        #  stage: A 
        
        stages:
          - test
        
        test:
          stage: test
          script:
            - echo my first test ci   # 作用是打印处这段话
        
      3. 使用git 提交&推送到gitlab上

      4. 从gitlab页面点击左侧的ci/cd,选择流水线,会发现出现了一个

      5. 点击 已通过 按钮

      6. 点击 下面流水线 下的 test 可以看到一个黑窗口,并且窗口中有打印刚才在 .gitlab-ci.yml中配置的 参数

      7. 出现了以上的代码,说明这个文件可以正常运行,下面就需要在.gitlag-ci.yml文件中配置 docker相关信息,用来达到自动化部署的目的

      8. 上面流水线的作业中打印的 my first test ci 是怎么打印的呢 ?

        # 查看容器
        [root@centOS ~]# docker ps
        CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                  PORTS                                                          NAMES
        e75210ca74ba        gitlab_runner_gitlab-runner     "/usr/bin/dumb-init …"   6 hours ago         Up 6 hours                                                                             gitlab-runner
        c38a72730a24        twang2218/gitlab-ce-zh:11.1.4   "/assets/wrapper"        22 hours ago        Up 21 hours (healthy)   0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   gitlab
        
        # 进入容器内部
        [root@centOS ~]# docker exec -it e7 bash
        root@e75210ca74ba:/# cd /home/
        root@e75210ca74ba:/home# ll
        total 0
        drwxr-xr-x. 3 gitlab-runner gitlab-runner 51 Aug 30 07:47 gitlab-runner/
        
        # 进入 容器内的gitlab-runner 
        root@e75210ca74ba:/home# cd gitlab-runner/
        root@e75210ca74ba:/home/gitlab-runner# ll
        total 8
        drwxrwxr-x. 3 gitlab-runner gitlab-runner   22 Aug 30 07:47 builds/
        root@e75210ca74ba:/home/gitlab-runner# cd builds/
        root@e75210ca74ba:/home/gitlab-runner/builds# ll
        total 0
        drwxrwxr-x. 3 gitlab-runner gitlab-runner 15 Aug 30 07:47 b13c47e0/
        
        # 进入build后可以看到一个 字符串,这个是之前配置ci/di的时候成功后,在Runner下看的可用的runner 
        root@e75210ca74ba:/home/gitlab-runner/builds# cd b13c47e0/
        root@e75210ca74ba:/home/gitlab-runner/builds/b13c47e0# ll
        total 0
        drwxrwxr-x. 3 gitlab-runner gitlab-runner 18 Aug 30 07:47 0/
        
        # 进入 0/root/ 可以看到我们的项目 testci
        root@e75210ca74ba:/home/gitlab-runner/builds/b13c47e0# cd 0/
        root@e75210ca74ba:/home/gitlab-runner/builds/b13c47e0/0# ll
        total 0
        drwxrwxr-x. 4 gitlab-runner gitlab-runner 38 Aug 30 07:47 root/
        root@e75210ca74ba:/home/gitlab-runner/builds/b13c47e0/0# cd root/
        root@e75210ca74ba:/home/gitlab-runner/builds/b13c47e0/0/root# ll
        total 0
        drwxrwxr-x. 4 gitlab-runner gitlab-runner 84 Aug 30 07:47 testci/
        drwxrwxr-x. 3 gitlab-runner gitlab-runner 26 Aug 30 07:47 testci.tmp/
        
        root@e75210ca74ba:/home/gitlab-runner/builds/b13c47e0/0/root# cd testci
        root@e75210ca74ba:/home/gitlab-runner/builds/b13c47e0/0/root/testci# ll
        
        # 实际上,那个 .gitlab-ci.yml的命令是在这个地方执行的,但是由谁执行的呢 ? 虽然在这个位置可以使用mvn -v 命令,但是实际上在这个位置 mvn 命令是无效的,这个位置执行 mvn -v 的是 gitlab,所以,如果想要在这个位置使用mvn,需要使用全路径,此时 mvn 的安装路径是在 /usr/local/maven/apache-maven-3.6.3/bin,所以我们需要在gitlab-ci.yml中的配置文件里添加mvn 命令的时候,使用的就是全路径命令了。其他容器内的命令也是相同的道理。
        total 12
        drwxrwxr-x. 4 gitlab-runner gitlab-runner  84 Aug 30 07:47 ./
        drwxrwxr-x. 4 gitlab-runner gitlab-runner  38 Aug 30 07:47 ../
        drwxrwxr-x. 6 gitlab-runner gitlab-runner 113 Aug 30 07:47 .git/
        -rw-rw-r--. 1 gitlab-runner gitlab-runner  66 Aug 30 07:47 .gitignore
        -rw-rw-r--. 1 gitlab-runner gitlab-runner  78 Aug 30 07:47 .gitlab-ci.yml
        -rw-rw-r--. 1 gitlab-runner gitlab-runner 451 Aug 30 07:47 pom.xml
        drwxrwxr-x. 3 gitlab-runner gitlab-runner  18 Aug 30 07:47 src/
        
        
1.4 使用gitlab-runner持续集成
1.4.1 创建docker文件夹

在pom.xml文件同级目录下创建docker 文件夹,用来存放dockerfile文件和.war文件

1.4.2 配置dockerfile文件
FROM daocloud.io/library/tomcat:8.5.15-jre8
COPY testci.war /usr/local/tomcat/webapps
1.4.3 配置docker-compose.yml文件

与docker文件夹同级

version: "3.1"
services:
  testci:
   # 使用 同一个层级下 docker 文件夹下的 文件进项构建项目
    build: docker
    restart: always
    # 配置容器名
    container_name: testci
    # 配置映射端口
    ports:
    - 8080:8080
1.4.4 配置.gitlab-ci.yml文件
stages:
  - test

test:
  stage: test
  script:
    - echo my first test ci
    # 首先对项目进项打包
    - /usr/local/maven/apache-maven-3.6.3/bin/mvn package
    # 把target目录下打包好的war文件复制到 docker目录下
    - cp target/testci-1.0-SNAPSHOT.wara docker/testci.war
    # 关掉之前启动的docker-compose 容器 (这一步是最开始配置runner的时候配置runner可以调用宿主机的docker权限)
    - docker-compose down
    # 重新构建docker-compose 容器并启动
    - docker-compose -up -d --build  
    # 删除由于重新构建镜像导致出现镜像名是 null 的镜像
    - docker rmi $(docker images -qf dangling=true)
1.4.6 推送到gitlab上,从ci/di -> 作业下看到报错误
$ cp target/testci-1.0-SNAPSHOT.war docker/testci.war
$ docker-compose down
bash: line 77: docker-compose: command not found
ERROR: Job failed: exit status 1

报这个错的原因是在搭建 gitlab-runner 环境的时候,environment文件夹下的Dockerfile文件中没有配置 docker-compose ,在容器内找不到docker-compose 命令,所以报错,

在gitlab-runner 的 environment 中的 Dockerfile文件中添加 下面

# 安装 Docker Compose
WORKDIR /usr/local/bin
RUN wget https://raw.githubusercontent.com/topsale/resources/master/docker/docker-compose
RUN chmod +x docker-compose

进入容器内部,可以发现

# 进入容器 
[root@centOS environment]# docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                    PORTS                                                          NAMES
677925b104a0        testci_testci                   "catalina.sh run"        4 minutes ago       Up 4 minutes              0.0.0.0:8080->8080/tcp                                         testci
ee754f5779f8        gitlab_runner_gitlab-runner     "/usr/bin/dumb-init …"   37 minutes ago      Up 10 minutes                                                                            gitlab-runner
# 进入 /usr/local/bin 
root@ee754f5779f8:/usr/local/bin# pwd
/usr/local/bin
# 已经安装了 compose 命令
root@ee754f5779f8:/usr/local/bin# ls
docker-compose

解决完这个问题,再次运行,发现运行成功

  1. 在浏览器中输入 172.16.195.134:8080/testci/index.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值