在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)。

DOC03.png

■环境
【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容器]。

DOC04.png

【2】Jenkins的初始配置

(1)从浏览器访问以下URL:
http://(主机IP):8033

DOC05.png

从[Jenkins容器]的提示中解锁。

cat /var/lib/jenkins/secrets/initialAdminPassword
[root@efadf1d923a4 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
1a1d6be0bdab4a7e9c8f7ceec2a0e7ba # ←内容をコピー
[root@efadf1d923a4 ~]#

将复制的内容粘贴到浏览器中的[管理员密码],然后点击[继续]。

DOC06.png

点击安装建议的插件。

DOC07.png

请保持冷静观察

DOC08.png

创建adminuser用户,并点击[保存并完成]
用户名:jenkinsadmin
密码:p@ssw0rd
全名:jenkinsadmin
电子邮件地址:jenkinsadmin@example

DOC09.png

点击 “开始使用 Jenkins” 按钮。

DOC10.png

初期设定完成

DOC11.png

【3】添加和配置Jenkins(SSH插件)。

以下是一种汉语的表达方式:为了让Jenkins用户(jenkinsadmin)能够连接到Ansible容器并执行构建,需要添加插件。本步骤将作为步骤【2】的继续进行。

为了使Jenkins可以进行远程连接,添加[SSH]插件。

DOC12.png

(6) 勾选”安装完成后,如果没有作业则重新启动Jenkins”。

DOC13.png

(7)在重新启动后,使用Jenkins用户登录。

创建一个用户,以便Jenkins能够连接到远程主机。

(1)选择[认证信息]
(2)选择[System]
(3)选择全球域名
(4)点击[此认证域未设置。请添加认证信息。]的链接

DOC14.png

进行以下设置,创建Jenkins用户并点击[保存]。

設定項目意味本記事での設定値種類ユーザ名とパスワードデフォルトスコープグローバルデフォルトユーザ名Jenkinsユーザと関連付けるユーザrootパスワードユーザのパスワードp@ssw0rdIDJenkinsユーザの名前jenkins01説明なしなし
DOC15.png

(6)返回Jenkins首页

【3-3】Jenkins SSH设置
在Jenkins中进行SSH配置。通过此步骤,您可以使用在【3-2】中创建的用户登录到远程主机。

(1)点击【Jenkins管理】
(2)点击【系统设置】
(3)点击【添加】,在【SSH远程主机/SSH站点】下
(4)进行以下设置,然后点击【检查连接】
主机名:连接的服务器(Ansible容器)的IP地址
端口:SSH端口(22)
凭据:使用【3-2】中创建的用户(root)

DOC16.png

请确认[检查连接]的结果为[成功连接],然后点击[添加]按钮。

DOC17.png

按下”保存”按钮。

执行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)],然后点击[自由风格项目构建]

DOC18.png

从“构建”、“添加构建步骤”中选择“在远程主机上执行shell”

DOC19.png

在SSH网站和shell脚本中分别进行设置并保存
SSH网站:根据步骤【3-2】创建的SSH网站
shell脚本:在Ansible容器中执行的命令

#実行ユーザ確認
whoami
#Ansible実行
ansible con -i /playbook/hosts -m ping
DOC20.png

在接下来的画面上,点击”执行构建”。

DOC21.png

点击“执行构建”。

DOC22.png

点击“控制台输出”以确认执行内容并结束。

DOC23.png

■总结

目前,我认为Jenkins和Ansible已经能够进行整合。我的感觉是,如果不添加SSH插件,就无法在Jenkins中对远程主机执行操作,我发现了这一点。
接下来,我将创建一个从[Jenkins]执行的Ansible容器,用于创建Azure资源的playbook。

广告
将在 10 秒后关闭
bannerAds