在Jenkins中执行容器间连接和作业执行
首先
这篇文章是上一篇的续集。上一篇文章中,我们在AzureVM上作为Docker主机安装了Docker,并创建了Jenkins和Ansible的容器。这次我们将进行Jenkins的配置,设置构建环境。构建的内容将以在Ansible容器中执行Ansible为形式。
■预定
选项1:
V1: 从安装Docker,创建Dockerfile(使用Jenkins),启动镜像,直接连接到容器进行SSH。
URL: 在Jenkins中进行容器间连接和任务执行。
V2: 启动Ansible镜像,设置容器之间的SSH配置,确认Ansible的运行状态。
URL: 在Docker容器中执行Ansible。
V3: 配置Jenkins(通过Jenkins进行SSH连接),执行任务到远程主机。
V4: 创建Ansible Playbook(用于创建Azure虚拟机和相关资源),确认运行状态(从Jenkins中执行)。
URL: 使用Ansible进行云构建(Azure)。
■环境
【Docker 主机】
Azure 虚拟机:CentOS
主机名:VMDO01
端口:ssh,7033,8033
【容器1(Jenkins容器)】
容器角色:Jenkins
※这是在前一篇文章(V1)中创建的容器。
【容器2(Ansible容器)】
容器角色: Ansible
※这是在前一篇文章(V2)中创建的容器。
■ 注意事项
– 确保拥有 Azure 帐户。
– 确保计算机可以登录到 Azure。
■要做的事情
【1】启动Docker容器
【2】进行Jenkins的初始设置
【3】添加和配置Jenkins的SSH插件
【4】执行Jenkins的构建(使用Ansible)
■步骤
【1】运行Docker容器
(1)在Docker主机上登录并启动[Jenkins容器]和[Ansible容器]。
docker run -p <hostport(8033):8080> -p <hostport(7033):22> -itd --privileged <REPOSITORY(Jenkinsコンテナ):TAG> /sbin/init
docker run -p <hostport(9033):22> -itd --privileged <REPOSITORY(Ansibleコンテナ):TAG> /sbin/init
[root@VMDO001 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@VMDO001 ~]# docker run -p 8033:8080 -p 7033:22 -itd --privileged centos/jenkinsbuild:latest /sbin/init
efadf1d923a41d08ff413bbb06d71818e5d201a3b648a2108f2191cbc8e5e006
[root@VMDO001 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
efadf1d923a4 centos/jenkinsbuild:latest "/sbin/init" 38 seconds ago Up 36 seconds 0.0.0.0:7033->22/tcp, 0.0.0.0:8033->8080/tcp cocky_keller
[root@VMDO001 ~]# docker run -p 9033:22 -itd --privileged centos/ansiblebuild:1 /sbin/init
1650f986860ebb59f505055af5f2c52719e81530d056f70e827f0f275a335208
[root@VMDO001 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1650f986860e centos/ansiblebuild:1 "/sbin/init" 7 seconds ago Up 5 seconds 0.0.0.0:9033->22/tcp thirsty_kare
efadf1d923a4 centos/jenkinsbuild:latest "/sbin/init" 3 minutes ago Up 3 minutes 0.0.0.0:7033->22/tcp, 0.0.0.0:8033->8080/tcp cocky_keller
[root@VMDO001 ~]#
2. 从[SSH客户端]登录到[Jenkins容器]和[Ansible容器]。
【2】Jenkins的初始配置
(1)从浏览器访问以下URL:
http://(主机IP):8033
从[Jenkins容器]的提示中解锁。
cat /var/lib/jenkins/secrets/initialAdminPassword
[root@efadf1d923a4 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
1a1d6be0bdab4a7e9c8f7ceec2a0e7ba # ←内容をコピー
[root@efadf1d923a4 ~]#
将复制的内容粘贴到浏览器中的[管理员密码],然后点击[继续]。
点击安装建议的插件。
请保持冷静观察
创建adminuser用户,并点击[保存并完成]
用户名:jenkinsadmin
密码:p@ssw0rd
全名:jenkinsadmin
电子邮件地址:jenkinsadmin@example
点击 “开始使用 Jenkins” 按钮。
初期设定完成
【3】添加和配置Jenkins(SSH插件)。
以下是一种汉语的表达方式:为了让Jenkins用户(jenkinsadmin)能够连接到Ansible容器并执行构建,需要添加插件。本步骤将作为步骤【2】的继续进行。
为了使Jenkins可以进行远程连接,添加[SSH]插件。
(6) 勾选”安装完成后,如果没有作业则重新启动Jenkins”。
(7)在重新启动后,使用Jenkins用户登录。
创建一个用户,以便Jenkins能够连接到远程主机。
(1)选择[认证信息]
(2)选择[System]
(3)选择全球域名
(4)点击[此认证域未设置。请添加认证信息。]的链接
进行以下设置,创建Jenkins用户并点击[保存]。
(6)返回Jenkins首页
【3-3】Jenkins SSH设置
在Jenkins中进行SSH配置。通过此步骤,您可以使用在【3-2】中创建的用户登录到远程主机。
(1)点击【Jenkins管理】
(2)点击【系统设置】
(3)点击【添加】,在【SSH远程主机/SSH站点】下
(4)进行以下设置,然后点击【检查连接】
主机名:连接的服务器(Ansible容器)的IP地址
端口:SSH端口(22)
凭据:使用【3-2】中创建的用户(root)
请确认[检查连接]的结果为[成功连接],然后点击[添加]按钮。
按下”保存”按钮。
执行Jenkins构建(Ansible)
由于在前面步骤中已经完成了从Jenkins到SSH的连接设置,现在我们将在Jenkins上创建作业并执行Ansible。这次要执行的是Ansible而不是playbook。
上次我们是通过Ansible容器来执行Ansible,但这次我们将使用从Jenkins容器创建的SSH用户连接到Ansible容器并执行。另外为了避免用户输入,我们将在Ansible的清单文件中输入执行用户的信息并进行执行。
此外,清单文件将使用我们在上一篇文章中创建的[/playbook/hosts]。
【4-1】Ansible执行用户信息
由于上次只在清单文件中记录了主机信息,因此我们需要手动执行命令并手动进行密码认证。通过在清单文件中记录SSH用户和密码,可以避免依赖用户输入而导致命令的中断。
(1)在 Ansible 容器中登录
(2)在清单文件中记录执行用户的信息
vi /playbook/hosts
# 前記事にて入力
# 実行ホストを[]で区切られたグループに分ける
[con]
172.17.0.2
[hostmachine]
10.10.1.4
# 以下今回の記事で追記して保存
# [con:vars] ⇒ [変数を有効にさせるグループ:vars(固定)]
# ansible_ssh_user ⇒ ansible実行ユーザ
# ansible_ssh_pass ⇒ 実行ユーザのパスワード
# ansible_connection ⇒ 接続指定
[con:vars]
ansible_ssh_user=root
ansible_ssh_pass=p@ssw0rd
ansible_connection=ssh
通过使用“exit”命令来退出[Ansible容器]
【4-2】通过Jenkins执行Ansible
创建一个Jenkins任务,并向Ansible容器发送执行指令。这需要使用在【3-2】中创建的SSH用户。
(1)从Jenkins的首页点击[新建任务]
(2)在[输入项目名称]中输入[任意的任务名称(AnsibleJOB1)],然后点击[自由风格项目构建]
从“构建”、“添加构建步骤”中选择“在远程主机上执行shell”
在SSH网站和shell脚本中分别进行设置并保存
SSH网站:根据步骤【3-2】创建的SSH网站
shell脚本:在Ansible容器中执行的命令
#実行ユーザ確認
whoami
#Ansible実行
ansible con -i /playbook/hosts -m ping
在接下来的画面上,点击”执行构建”。
点击“执行构建”。
点击“控制台输出”以确认执行内容并结束。
■总结
目前,我认为Jenkins和Ansible已经能够进行整合。我的感觉是,如果不添加SSH插件,就无法在Jenkins中对远程主机执行操作,我发现了这一点。
接下来,我将创建一个从[Jenkins]执行的Ansible容器,用于创建Azure资源的playbook。