1. 环境
- gitlab
- gitlab runner
- docker registry
- 远程机器上具有docker
runner的安装可参考:https://www.jianshu.com/p/b29816cbf444
(此runner是用helm deploy)
此处只演示了在远程主机拉取镜像的操作,更多操作可自行发挥。
我的远程主机上本来安装了docker,这里没有进行docker的安装也没有进行ansible远程执行dokcer安装,有兴趣可将docker的安装写进playbook进行安装。
2. 创建ansible的docker image
2.1 Dockerfile
FROM alpine:3.10
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk update && \
apk add --no-cache openssh-server tzdata ansible openssh && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key && \
ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key && \
ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key && \
apk add --no-cache sshpass
RUN mkdir -p /etc/ansible && \
echo -e "[dev]\nhost1\nhost2" >/etc/ansible/hosts && \
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
EXPOSE 22
2.3 构建ansible的镜像
使用命令docker build -t ansible:2.4 .
构建ansible镜像,并修改tag上传至你的私有仓库。
可用以下脚本change_tag.sh 修改tag:bash change_tag.sh
#!/bin/bash
docker_registry=ip:port #你的私有仓库地址
old_tag=`docker images | awk '{print $1":"$2 }' | head -2 | tail -1`
echo $old_tag
new_tag=$docker_registry/$old_tag
echo $new_tag
docker tag $old_tag $new_tag
docker rmi $old_tag
docker push $new_tag
3.deploy
3.1 设置变量
添加ANSIBLE_SSH_PASS和ANSIBLE_SSH_USER,设置相应的用户和密码


3.2 创建ansible文件夹
在ansible目录下创建hosts文件和ansible.cfg文件,project的结构如下:

#cat ansible.cfg
[defaults]
ansible_managed = ANISBLE MANAGED : DO NOT EDIT !!!
host_key_checking = False
transport = ssh
#cat hosts
##星号输入目标地址的ip
[registry]
*.*.*.* ansible_ssh_port=22 ansible_ssh_user=ANSIBLE_SSH_USER ansible_ssh_pass=ANSIBLE_SSH_PASS
3.3 创建docker_pull.yaml
- hosts: registry
tasks:
- name: docker pull images
docker_image:
name: ip:por/ansible:2.4 #填写你的私有仓库地址和端口
source: pull
3.4 创建.gitlab-ci.yaml文件,并填写相关的信息
#just a test
image: ip:port/docker:stable-dind #填写你的私有仓库地址和端口
variables:
DOCKER_DRIVER: overlay2
stages:
- build
docker-build:
image: ip:port/ansible:2.4
stage: build
script:
- sed -i "s/ANSIBLE_SSH_USER/$ANSIBLE_SSH_USER/g" ansible/hosts
- sed -i "s/ANSIBLE_SSH_PASS/$ANSIBLE_SSH_PASS/g" ansible/hosts
- cp ansible/hosts /etc/ansible/
- cp ansible/ansible.cfg /etc/ansible/
- ansible-playbook pull_image.yml
4. 在目标ip上安装ansible
4.1 安装ansible
我是目标机器是一台centos
yum -y install ansible
4.2 安装docker-py
pip install docker-py
5 在远程镜像上进行docker操作
将project发布到gitlab上git push -u origin master
项目的创建与remote add已略过……
在gitlab上查看Jobs执行情况

在远程主机上查看docker镜像是否拉取成功

这里只写了拉取镜像的操作,更多操作可自行实践测试。
网友评论