Dockerfile整合ansible实现容器自动拉取代码并执行
dockerfile:
FROM baseimages
MAINTAINER zuoxi
WORKDIR /opt/ansible/files
ADD ansible.sh /opt/ansible/files
ADD main.yml /opt/ansible/files
ENTRYPOINT sh ansible.sh
编写shell脚本
ansible.sh
#!/bin/bash
cd /opt/ansible/files
if [ "
D
Y
N
A
M
I
C
A
S
S
E
M
B
L
Y
"
x
!
=
"
f
a
l
s
e
"
x
]
;
t
h
e
n
a
n
s
i
b
l
e
−
p
l
a
y
b
o
o
k
m
a
i
n
.
y
m
l
f
i
i
f
[
"
DYNAMIC_ASSEMBLY"x != "false"x ];then ansible-playbook main.yml fi if [ "
DYNAMICASSEMBLY"x!="false"x];thenansible−playbookmain.ymlfiif["ANSIBLE_KEEPRUN"x = "true"x ];then
tail -f /dev/null
fi
##“DYNAMIC_ASSEMBLY”:判断此环境变量的值,若为flase,则取消自动执行ansible脚本
##“ANSIBLE_KEEPRUN”:判断此环境变量的值,若只true,则让docker执行完代码后持续开启
编写ansible脚本
main.yml
- name: an example playbook
hosts: 127.0.0.1
connection: local
tasks:
- name: clone code
local_action: git repo=http://
u
s
e
r
n
a
m
e
:
{username}:
username:{password}@
a
d
d
r
e
s
s
d
e
s
t
=
/
o
p
t
/
a
n
s
i
b
l
e
3
/
f
i
l
e
s
−
n
a
m
e
:
r
u
n
c
o
d
e
c
o
m
m
a
n
d
:
"
p
y
t
h
o
n
3
/
o
p
t
/
a
n
s
i
b
l
e
3
/
f
i
l
e
s
/
{address} dest=/opt/ansible3/files - name: run code command: "python3 /opt/ansible3/files/
addressdest=/opt/ansible3/files−name:runcodecommand:"python3/opt/ansible3/files/{filename}"
建立两个任务,一个为从git上拉取代码,一个为执行拉取后的代码,
##username:获取此环境变量,变量值应为git账号
##password:获取此环境变量,变量值应为git密码
##address:获取此环境变量,变量值为git地址,(需去除http://,保留后面的内容)
##filename:获取此环境变量,变量值为git上需要执行代码的绝对路径