基于docker的gitlab+gitlabrunner+ansible自动部署

本文不适合与新手!!!需要对底层非常的熟悉,这个在国内不是很常用,是为了跟老外的环境兼容。

过多的理论知识这里就不去过多的阐述。

系统架构图

网络架构

一、安装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: [email protected]
       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  [email protected]: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  [email protected]:root/young_ansibleinventory.git /ansible
fi

cd /ansible

git pull

# run cmds
exec "[email protected]"

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

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

[email protected]:~/.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               

[email protected]:~/.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,就是其中的镜像。实际操作中会遇到很多问题。

时间: 2024-10-29 20:28:05

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

基于最新RHEL7系统的Packstack自动部署RDO(OpenStack Icehouse)

本篇文章是通过最新发布的Red Hat Enterpise Linux 7 系统部署OpenStack,集成到RHEL系统的OpenStack 简称为RDO.此篇是通过制作应答文件answer.conf自动化部署OpenStack Icehouse 版本. 由于采用RHEL7系统在部署中或多或少碰到不少报错的问题,这里只列出我的几张截图,在部署中还是需要根据实际情况来决定,多看下报错及日志文件:例如:解决包的依赖,服务不能没有启动起来,数据库密码设置未成功等:希望本篇可以给部署RDO的同学带来一

Ansible自动部署LNAMP

前言: 借助Ansible自动部署LNAMP,实现高可用nginx反代服务器,中部http+php提供web服务,后端链接同一台mysql数据库 实验环境: ansible主机:10.0.0.10/8 nginx(主):10.0.0.11/8 nginx(备):10.0.0.12/8 虚拟IP:10.0.0.111/32 http1:10.0.0.21/8 http2:10.0.0.22/8 mysql:10.0.0.30/8 编辑Ansible的hosts文件 ####Nginx反代主机地址及

ansible自动部署 zabbix-agent 的模块

ansible自动部署 zabbix-agent 模块  的准备阶段 ansible所在的服务端可以免密钥登录所被部署的机器称为客户端. 免密钥的做法 服务端 ssh-keygen  一路回车生成密钥对 ssh-copy-id 指定IP 将公钥发给指定的ip 即可 ssh-copy-id 192.168.1.18 下面红色是代表文件或目录  黑色字体代表是内容 使用了 roles 方法  整体的目录结构是 /etc/ansible/zabbix-agent.yml [[email protect

GitLab 实现代码自动部署(转载自https://segmentfault.com/a/1190000011561808)

在当下使用 GIT 来管理代码已经是一种非常流行的方式了.使用 GIT 可以很方便的给代码创建分支,撤销不需要的提交,与他人合作共同编写代码. GitLab 是基于 GIT 实现的现代化的开发者协作平台,它将 issues, code review, CI 和 CD 整合到独立的网站UI,弥补了 GIT 在可视化操作方面的不足. 本文目的 本文的目的是配置实现在 GitLab 平台上的代码自动部署.想要达到的效果是这样子的,当客户端向 GitLab 服务器的特定分支(如:prod)提交代码时,G

Gitlab+Jenkins实现自动部署

系统环境: Gitlab主机 IP:192.168.1.2 Jenkins主机 IP:192.168.1.3 一.为何要做自动部署 #为什么要做自动部署,因为懒啊!!! 二.配置Gitlab #首先,你得有一个代码仓库,赶紧到gitlab上创建一个,然后创建个分支并创建一个文件. #其次,你得配置一个ssh公钥到gitlab上,这样才能模拟开发上传代码到gitlab. #至于ssh公钥私钥怎么生成,自己百度去. #克隆代码仓库,然后测试是否能够上传代码到gitlab git clone [ema

使用docker实现半自动化代码自动部署与回滚

最近开发docker的caas平台,目前已经开发完成,在优化性能与套模板.对于docker最近是很好,很多人把docker做为vm来使用,当然作为测试来说是没问题,但我感觉docker本身在做沙箱.自动化部署与回滚方面更适合,下面介绍一下我这里是如何通过docker实现代码半自动化部署. 目前我这里已经实现能结合svn或者git代码库,对node.php.java代码进行半自动化部署,先给大家截图看效果,感觉满意在继续细看. 总界面如下 点击左上角的"新增开放项目"就可以新建立测试,下

ansible自动部署集群服务

上面的思路大致是: 首先配置yum仓库,之后搭建http+php,之后搭建数据库,其次搭建nginx反代,最后设置keepalived自动化安装. [[email protected] ansible]# pwd /etc/ansible [[email protected] ansible]# tree -L 3 roles/ roles/ ├── base │   ├── files │   │   ├── mage6.repo │   │   └── mage7.repo │   └──

docker、maven、tomcat8自动部署配置方法

1.先要选取一个基板docker镜像,此处选用tomcat:8-jre8 2.通过基板镜像,build一个自有镜像: Dockerfile: FROM tomcat:8-jre8 MAINTAINER "Liu Li <[email protected]>"  ADD settings.xml /usr/local/tomcat/conf/ ADD tomcat-users.xml /usr/local/tomcat/conf/ settings.xml: <?xml

linux下基于docker搭建gitlab

1.输入以下命令安装 gitlab docker pull beginor/gitlab-ce:11.0.1-ce.0 下载可能需要等一段时间,最好使用阿里云的加速镜像 创建gitlab的配置 创建gitlab的配置(etc).日志(log).数据(data)放到容器之外,便于日后升级,因此准备三个目录 mkdir -p /mygitlab/gitlab/etc mkdir -p /mygitlab/gitlab/log mkdir -p /mygitlab/gitlab/data 运行gitl