系统架构图

网络架构

一、安装docker,确保hostname没有问题 ,查看/etc/hostname、/etc/hosts。

https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#install-docker-ce-1

二、安装dcoekr-compose,这边还是要去官网看看,每次的链接不一定都一样。

sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

三、docker加速源

https://cr.console.aliyun.com/#/accelerator

四、docker-compose.yml,通过nginx-proxy访问gitlab,这里我就不设置默认网络,因为我后面要利用ansible镜像拉取gitlab中项目,如果设置默认网络就会产生两个网桥,届时会无法通信。

  nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx-proxy/certs:/etc/nginx/certs:ro
- ./nginx-proxy/vhost:/etc/nginx/vhost.d
- ./nginx-proxy/html:/usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: 'true' letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt
restart: always
volumes:
- ./nginx-proxy/certs:/etc/nginx/certs:rw
- ./nginx-proxy/vhost:/etc/nginx/vhost.d
- ./nginx-proxy/html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro gitlab:
image: 'gitlab/gitlab-ce:latest'
container_name: 'gitlab'
restart: always
hostname: 'gitlab.yourdomain'
environment:
GITLAB_OMNIBUS_CNOFIG: |
external_url 'http://gitlab.yourdomain'
VIRTUAL_HOST: gitlab.yourdomain
VIRTUAL_PORT: 80
VIRTUAL_PROTO: http
LETSENCRYPT_HOST: gitlab.yourdomain
LETSENCRYPT_EMAIL: bill.weiwei@foxmail.com
external_url: http://gitlab.yourdomain
ports:
- '30022:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
- './nginx-proxy/certs:/etc/gitlab/ssl' gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
container_name: 'gitlab-runner'
restart: 'always'
volumes:
- '/srv/gitlab-runner/confg:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'

五、注册gitlab-runner

docker exec -it gitlab-runner gitlab-ci-multi-runner register

参考:

docker exec -it <id container> gitlab-runner register -n
--url your https://gitlab.your.domain \
--registration-token you token in your gitlab (AdminArea > Runners you can see token) \
--executor docker \
--description "your name which you wante" \
--docker-image "node" \
--docker-privileged true \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-volumes /srv/gitlab-runner/config:/etc/gitlab-runner \

修改配置文件

vim /srv/gitlab-runner/config/config.toml
pull_policy = "if-not-present"
shm_size = 0

六、添加ssh公钥到gitlab上

ssh-keygen
cat .ssh/id_rsa.pub

七、ansible部署

将ansible的配置文档放在gitlab上,方便在构建镜像的时候加载到镜像中。

####create project your-name-project/ansibleinventory
####create folders inventory and playbooks

##inventory

filename: young-prod-server

[young-prod-server]
****

##playbooks、、two files

#filename:deploy_entrypoint.yml

- hosts: all
tasks:
- name: Creating the directory
file: path=/var/projects/{{ project_name }}-{{ env }}/ state=directory - name: Clean src
file:
state: absent
path: "/var/projects/{{ project_name }}-{{ env }}/src" - name: Clean app
file:
state: absent
path: "/var/projects/{{ project_name }}-{{ env }}/app" - name: copy
unarchive:
src: "{{ src }}/package.tar"
dest: /var/projects/{{ project_name }}-{{ env }}/ # - name: run if exist entrypoint.sh
# shell: /var/projects/{{ project_name }}/entrypoint.sh
# when: $(-s /var/projects/{{ project_name }}/entrypoint.sh) - name: stop project
shell: docker-compose -f docker-compose.yml -f docker-compose.{{ env }}.yml stop
args:
chdir: /var/projects/{{ project_name }}-{{ env }}/ - name: start project
shell: docker-compose -f docker-compose.yml -f docker-compose.{{ env }}.yml up --build -d
args:
chdir: /var/projects/{{ project_name }}-{{ env }}/ - name: run entrypoint.sh
shell: ./entrypoint.sh
args:
chdir: /var/projects/{{ project_name }}-{{ env }}/ #filename:deploy.yml - hosts: all
tasks:
- name: Creating the directory
file: path=/var/projects/{{ project_name }}-{{ env }}/ state=directory - name: copy
unarchive:
src: "{{ src }}/package.tar"
dest: /var/projects/{{ project_name }}-{{ env }}/ # - name: run if exist entrypoint.sh
# shell: /var/projects/{{ project_name }}/entrypoint.sh
# when: $(-s /var/projects/{{ project_name }}/entrypoint.sh) - name: stop project
shell: docker-compose -f docker-compose.yml -f docker-compose.{{ env }}.yml stop
args:
chdir: /var/projects/{{ project_name }}-{{ env }}/ - name: start project
shell: docker-compose -f docker-compose.yml -f docker-compose.{{ env }}.yml up --build -d
args:
chdir: /var/projects/{{ project_name }}-{{ env }}/

##Create file in ansible.cfg

[defaults]
transport = ssh
log_path = ./.ansible/ansible.log
host_key_checking = False
hostfile = inventory
sudo_user = root
roles_path = roles
ansible_managed = Ansible managed file modified on %Y-%m-%d %H:%M:%S, do not edit directly
retry_files_save_path = ./.ansible
private_key_file = ~/.ssh/id_rsa
#remote_user = root [ssh_connection]
ssh_args = -o ForwardAgent=yes

以上这些在gitlab上部署完成之后,可以写Dockerfile了。
我是在.ssh中写的。

###filename:  Dockerfile
FROM williamyeh/ansible:alpine3
MAINTAINER bill ARG SSH_PRIVATE_KEY=. RUN echo "@main35 http://dl-cdn.alpinelinux.org/alpine/v3.5/main" >> /etc/apk/repositories \
&& apk update \
&& apk --no-cache add \
git \
bash ADD id_rsa /root/.ssh/id_rsa RUN chmod 700 /root/.ssh/id_rsa RUN mkdir -p ~/.ssh RUN echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config RUN echo "gitlab-ce的ip地址(docker inspect container-id|grep IPA) gitlab.yourdomain">>/etc/hosts &&git clone git@gitlab.yourdomain:root/young_ansibleinventory.git /ansible COPY entrypoint.sh / ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
###filename:entrypoint.sh

#!/bin/bash

echo "172.17.0.4  gitlab.yourdomain">>/etc/hosts

if [ ! -d "/ansible" ];then
git clone git@gitlab.yourdomain:root/young_ansibleinventory.git /ansible
fi cd /ansible git pull # run cmds
exec "$@"

为了防止出错,还是要进行如下的配置。

After this you need on your server in folder root/.ssh/autorizade_key
put you id_rsa.pub key
copy your id_rsa.pub and paste in autorized_key

在本地服务器,不是容器,,,这个是为了不出错。
cat id_rsa.pub >>authorized_keys
chmod 644 authorized_keys

最后一点需要在.gitlab.yml里面修改image为你部署的ansible的镜像名。

八、最后报错的问题的解决方法

第一个问题:
当遇到上传的文件过大时,这个到了build的后期会遇到 vim /srv/gitlab/config/gitlab.rb
nginx['enable'] = true
nginx['client_max_body_size'] = '1024m' gitlab-ctl restart 在容器中修改nginx的配置,如果安装vim比较慢,可以选择安装lrzsz,,在本地改好后,再上传文件。
在http标签中添加,这个的作用就是全局的。
client_max_body_size 1024m; 第二个问题,,创建一个网桥
docker network create serverservices_default root@work:~/.ssh# docker network ls
NETWORK ID NAME DRIVER SCOPE
d79d0a24f1d6 bridge bridge local
b8d69d99856f host host local
cd9f5c333402 none null local
4f34f5ff823f root_default bridge local root@work:~/.ssh# brctl show
bridge name bridge id STP enabled interfaces
br-4f34f5ff823f 8000.0242f5270238 no veth08ac4e8
veth69afb8b
veth8d60b75
veth93ac6fc
docker0 8000.0242de39b14c no

  

九、将项目放到gitlab上,并配置.gitlab.yml,就是其中的镜像。实际操作中会遇到很多问题。

基于docker的gitlab+gitlabrunner+ansible自动部署的更多相关文章

  1. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  2. 如何搭建基于Docker的gitlab服务器集成CI/CD实现DEVOPS(完整版)

    From this lesson you will learn about 1,How to install and configure a docker based gitlab server 2, ...

  3. 从Docker 到Jenkins 到Ansible的部署经验

    从Docker 到Jenkins 到Ansible的部署经验 工作中,除了开发功能,还负责系统的部署工作.我从频繁的部署工作中,逐渐找到了一些偷懒的方法.从传统的Java -jar命令启动服务,到通过 ...

  4. Gitlab+Jenkins实现自动部署

    Gitlab+Jenkins实现自动部署   系统环境: Gitlab主机 IP:192.168.1.2 Jenkins主机 IP:192.168.1.3 一.为何要做自动部署 #部署Tomcat的在 ...

  5. 庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署

    庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署 一.简介      我们在上一篇文章<庐山真面目之八微服务架构 NetCore 基于 Dockerfile ...

  6. .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker

    之前写过使用Jenkins实现自动化部署,最近正好没事研究了下GitLab的自动化部署,顺便记录一下. 使用GitLab部署我们需要准备两件事,第一个起码你得有个GitLab,自己搭建或者使用官方的都 ...

  7. 三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境

    写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 文章和搭建环境所需要的yml文件已收 ...

  8. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  9. 基于Docker+Jenkins+Gitlab搭建持续集成环境

    随着DevOps理念和敏捷理念的发展,我们希望通过自动化技术,加快项目的迭代.尤其是当使用微服务方案后,面临在大量的项目构建和部署工作,借助于jenkins的持续集成,可以快速把应用打包成docker ...

随机推荐

  1. C# 布局 Anchor&Dock

    编写c#的时候,希望里面的空间能够随窗口的改变自动调整大小.就需要用到Anchor和Dock属性. 参考链接: http://www.cnblogs.com/yuyijq/archive/2010/0 ...

  2. 【BZOJ】1047: [HAOI2007]理想的正方形(单调队列/~二维rmq+树状数组套树状数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1047 树状数组套树状数组真心没用QAQ....首先它不能修改..而不修改的可以用单调队列做掉,而且更 ...

  3. iOS开发 - CALayer图层

    CALayer的基本使用 在iOS中.你能看得见摸得着的东西基本上都是UIView.比方一个button.一个文本标签.一个文本输入框.一个图标等等.这些都是UIView 事实上UIView之所以能显 ...

  4. 国际化信息-->MVC

    假设我们正在开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面——这便是典型的i18n国际化问题.对 ...

  5. Visio2010如何安装

    双击setup.   点击我接受此协议的条款,然后点击继续.   这里选择自定义,很重要哦,不要选择立即安装,不然,一会装完后,你会找不到快捷方式的.   文件位置这里选择好存放路径,一会我们要去这里 ...

  6. Struts2_day04--课程介绍_Struts2拦截器概述&底层原理_重要的概念

    Struts2_day04 上节内容 今天内容 Struts2拦截器概述 拦截器底层原理 重要的概念 自定义拦截器 自定义登录拦截器 Struts2的标签库 Struts2表单标签(会用) Strut ...

  7. 第三篇:C++ 中的几种初始化

    前言 阅读C++教材时,想必你听过复制初始化,直接初始化,值初始化这三个概念吧.笔者本人常将其混淆,遂在此记录下它们的具体含义以便日后查阅. 复制初始化( copy-initialization ) ...

  8. poj_1125 Floyd最短路

    题目大意 N个股票经纪人,每个股票经纪人都会将得到的消息传播给另外一些股票经纪人,传播的速度均不固定,且从A传到B的速度和B传到A的速度不一定相等.给定一个消息,并不一定能够传遍所有的股票经纪人,因为 ...

  9. 【Python算法】图与树的实现

    邻接列表及其类似结构 对于图结构的实现来说,最直观的方式之一就是使用邻接列表.下面我们来实现一个最简单的:假设现在我们有n个节点,编号分别为0,...,n-1. 然后,每个邻接列表就是一个数字列表,我 ...

  10. 唯品会的Service Mesh三年进化史 2018 年 Service Mesh 元年,被誉为是下一代微服务架构

    2018 年 Service Mesh 元年,被誉为是下一代微服务架构 https://www.sohu.com/a/225324586_465914 唯品会的Service Mesh三年进化史 - ...