美文网首页
通过gitlab-runner使用ansible对远程主机执行d

通过gitlab-runner使用ansible对远程主机执行d

作者: 橘子基因 | 来源:发表于2020-05-18 18:39 被阅读0次

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,设置相应的用户和密码


Variables.png
add variable.png

3.2 创建ansible文件夹

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


project.png
#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执行情况


result.png

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


docker image.png
这里只写了拉取镜像的操作,更多操作可自行实践测试。

相关文章

网友评论

      本文标题:通过gitlab-runner使用ansible对远程主机执行d

      本文链接:https://www.haomeiwen.com/subject/lyquohtx.html