30分钟搞定 Jenkins CI

本文首发于:Jenkins 中文社区java

原文连接    做者:Gunter Rotsaertlinux

译者:Yanjun Shigit

30分钟搞定 Jenkins CI

设置新的 Jenkins CI,以即可以开始测试新的 Jenkins 插件github

你想在本地设置中使用 Jenkins CI 进行实验吗?在本文中,咱们将设置一个本地 Jenkins CI 服务,为一个简单的 Spring Boot Maven 项目建立一个构建工做,并将建立的 Docker 镜像推送到 DockerHub。这将是一个本地实验的设置,但若是你想尝试一个 Jenkins 插件,它会很是方便。spring

1.先决条件

开始以前,咱们须要如下先决条件:docker

  • 咱们使用了 Ubuntu 18.04;
  • 必须安装 Docker,有关安装说明,请参见此处
  • 咱们须要在 Docker registry 来推送咱们的 Docker 镜像。最简单的方法是在DockerHub上建立一个账户。你能够免费建立账户。也不会收到垃圾广告邮件;
  • 构建工做的 Spring Boot 应用程序。咱们将使用前一篇文章中的 Spring Boot MVC 应用程序。源代码能够在GitHub上找到,相应的Docker图像能够在DockerHub上找到。该应用程序包含 http://localhost:8080/hello 上的一个 HTTP 端点,并只返回一条 Hello Kubernetes 欢迎消息。apache

    2.运行 Jenkins CI

    咱们将使用 Jenkins CI Docker 官方镜像运行 Jenkins 服务。完整的文档能够在这里找到。用如下命令启动容器:ubuntu

$ docker run -p 8080:8080 --name myjenkins -v jenkins_home:/var/jenkins_home -v jenkins_downloads:/var/jenkins_home/downloads jenkins/jenkins:lts

让咱们来仔细看看咱们正在作什么:浏览器

  • -p 8080:8080:咱们将内部 Jenkins 端口(冒号后)映射到外部端口,该端口可从咱们的 Docker 主机访问;
  • –name myjenkins:咱们为容器提供一个名称;不然,Docker将为你生成一个名称。最好给它起个名字;这样,你能够轻松地启动和中止容器;
  • -v jenkins_home:/var/jenkins_home:咱们但愿将内部 Jenkins 主目录(冒号以后)映射到 Docker 主机上的一个目录。经过这种方式,Jenkins 数据将被保存在咱们的主机上,这让咱们有机会备份数据;
  • -v jenkins_downloads:/var/jenkins_home/downloads:咱们须要在Jenkins中安装额外的工具; 所以,咱们建立一个目录来复制 *.tar.gz 文件。在这篇文章的后面,咱们将清楚地知道咱们将使用目录作什么;
  • jenkins/jenkins:lts:要使用的 Docker 镜像。咱们将使用 LTS 版本,但若是你愿意,也可使用不太稳定的版本。在撰写本文时,v2.150.1 是 LTS 版本。 在此以后,你能够经过其名称中止和启动容器:

··· $ docker stop myjenkins $ docker start myjenkins ···安全

3.配置 Jenkins 以供首次使用

一旦容器启动后,咱们就能够访问 Jenkins Web 控制台了。固然,咱们须要知道 Jenkins 实例的 IP 地址。所以,请执行如下命令:

$ docker inspect myjenkins

这将显示一些 JSON 输出。转到该 Networks 部分,参数 IPAddress 显示咱们的 Jenkins IP 地址(在咱们的例子中为172.17.0.3):

"Networks": {
  "bridge": {
    "IPAMConfig": null,
    ...
    "IPAddress": "172.17.0.3",
    ...
    "DriverOpts": null
  }
}

Jenkins Web 控制台可经过浏览器访问 http://172.17.0.3:8080/

这将向咱们显示如下页面:

jenkins-first-login

咱们使用临时密码,启动容器后在控制台输出中显示:

*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
f586346583e04fa78e2cc8edbf7566e1
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************

输入临时密码后,将显示一个页面,在这里咱们能够选择要安装的默认插件集或自定义插件集。咱们将选择默认设置。

jenkins-plugins

如今,坐等插件安装好:

jenkins-install-plugins

接下来,建立第一个管理员用户:

jenkins-create-first-user

最后,配置 Jenkins 实例:

jenkins-instance-configuration

太棒了!Jenkins 如今已经准备好可使用了:

jenkins-up-and-running

4.安装所需的工具

咱们的构建须要在 Jenkins 中提供一些工具。咱们须要 JDK11,Maven 和 Docker。在下一节中,咱们将展现如何在容器中使用这些属性。

在启动容器期间,咱们在容器中建立了 /var/jenkins_home/downloads 的挂载卷。首先,咱们将验证是否能够从容器中访问此路径。执行如下命令:

··· $ docker exec -it myjenkins ls -l /var/jenkins_home/downloads total 0 ···

如上所述返回0个结果时,那么咱们就能够继续了。不然,你必须检查在启动容器期间是否输入正确。

4.1 安装 JDK 11

咱们将使用 Adopt OpenJDK 11,可在此处下载。咱们必须将下载的 *.tar.gz 文件复制到已安装在主机上的卷 jenkins_home/downloads 中。为了检索咱们机器上的路径,咱们再次执行 docker inspect 命令,就像之前检索Jenkins IP地址同样。这一次,转到分段 Mounts

"Mounts": [
  ...
  {
    "Type": "volume",
    "Name": "jenkins_downloads",
    "Source": "/var/lib/docker/volumes/jenkins_downloads/_data",
    "Destination": "/var/jenkins_home/downloads",
    ...
  }
],

在咱们的示例中,卷位于 /var/lib/docker/volumes/jenkins_downloads/_data 上。将 *.tar.gz 文件复制到此位置。

跳转到 Manage Jenkins – Global Tool Configuration 和 *JDK 安装部分*。单击 Add JDK 按钮。默认状况下,java.sun.com 会添加安装程序。咱们不会使用这个,因此删除它并添加一个 Extract *.zip/*.tar.gzinstaller。根据下面的屏幕截图填写字段。二进制存档的路径是 file:/var/jenkins_home/downloads/OpenJDK11U-jdk_x64_linux_hotspot_11.0.1_13.tar.gzLabel 留空是很重要的;不然,JDK的安装将失败。

jenkins-install-jdk

跳转到 *Manage Jenkins – Configure System*,到 Global properties 部分并启用 *环境变量*。为其添加环境变量 JAVA_HOME并填充路径 /var/jenkins_home/tools/hudson.model.JDK/JDK11/jdk-11.0.1+13

jenkins-java_home-1

4.2 安装 Maven

咱们将使用 Maven 3.6.0,能够在这里下载。安装过程与 JDK 安装相同:下载 *.tar.gz 文件并将其复制到 jenkins_home/downloads

转到 Manage Jenkins – Global Tool Configuration 和 Maven 安装部分。单击 Add Maven 按钮。默认状况下,Apache 会添加安装程序。咱们不会使用这个,因此删除它并添加一个 Extract *.zip/*.tar.gzinstaller。根据下面的屏幕截图填写字段。二进制存档的路径是 file:/var/jenkins_home/downloads/apache-maven-3.6.0-bin.tar.gzLabel 留空是很重要的;不然,Maven 的安装将失败。将子目录设置为 apache-maven-3.6.0 也很重要;不然,Maven 主目录没有正确设置,mvn 可执行文件将没法找到。

jenkins-install-maven-1

4.3 配置 Docker

在 Docker 内部安装 Docker 不是一个好主意,请参阅本文。所以,咱们将使用宿主机的 Docker 安装,并将宿主机的 Docker 套接字挂载到容器。实际上,这也不是一个好主意,可是对于咱们的 Jenkins 实验环境来讲,这是能够的,可是出于安全缘由,永远不要以这种方式暴露 Docker 套接字。

咱们删除现有的容器(这不是有害的,由于咱们的全部数据都保存在咱们的主机上,咱们不会丢失任何数据),而后使用 -v /var/run/docker.sock:/var/run/docker.sock 从新启动容器。

$ docker rm myjenkins
$ docker run -p 8080:8080 --name myjenkins -v /var/run/docker.sock:/var/run/docker.sock -v jenkins_home:/var/jenkins_home -v jenkins_downloads:/var/jenkins_home/downloads jenkins/jenkins:lts

为了使其工做,咱们还必须设置 docker.sock 的权限给 jenkins 用户。默认状况下,它被挂载为 root,所以,因为 Permission Denied 错误,咱们的构建将失败。

以 root 身份登陆 Docker 容器:

$ docker exec -it -u root myjenkins

检查权限 docker.sock,这代表它拥有者 root

$ ls -l /var/run/docker.sock
srw-rw---- 1 root 999 0 Jan 6 11:45 /var/run/docker.sock

让 jenkins 成为新全部者,并再次列出权限:

$ chown jenkins: /var/run/docker.sock
$ ls -l /var/run/docker.sock
srw-rw---- 1 jenkins jenkins 0 Jan 6 11:45 /var/run/docker.sock

如今,jenkins 是全部者,咱们不会再获得 Permission Denied 的错误。

为了将 Docker 镜像推入 Docker registry,咱们须要经过 settings.xml 将凭据提供给 Maven。咱们能够经过配置文件提供程序插件轻松地提供 settings.xml。去 Manage Jenkins – Manage plugins 并安装插件(不重启安装)。

转到 *Manage Jenkins – Managed files*,而后单击 *Add a new Config*。建立 Global Maven settings.xml 并使用 DockerHub 账户凭据添加如下部分:

<servers>
  <server>
    <id>docker.io</id>
    <username>docker_username</username>
    <password>docker_password</password>
  </server>
</servers>

5.建立构建工做

最后要作的是建立咱们的构建工做。转到 Jenkins CI 主页,而后单击 *New Item*。咱们将把构建工做命名为 *MyKubernetesPlanet*,并选择一个 *Freestyle Project*。

在构建工做的配置部分,咱们转到 Source Code Management 部分,并填写 Git URL https://github.com/mydeveloperplanet/mykubernetesplanet.git 和 branch */feature/jenkinsci

jenkins-job-scm

在 Build 部分,咱们添加了一个 Invoke top-level Maven targets 的构建步骤。咱们将调用如下 Maven 目标来构建咱们的应用程序并将 Docker 镜像推送到 Docker registry:

$ clean install dockerfile:push

咱们还须要设置以前建立的 Maven版本 和 *全局配置文件*。

jenkins-job-build-1

手动为咱们的工做启动构建,这将建立 jar 文件,建立咱们的 Docker 镜像,并将其推送到 Docker registry。

6.结论

在本文中,咱们提供了一种让 Jenkins 实例运行的快速方法,包括执行 Maven 构建、建立 Docker 镜像并将其推入 Docker registry 的构建做业。请注意,这不是一种安全的方法,可是对于实验用例来讲,它并无太大的危害。如今咱们已经有了一个彻底运行的 Jenkins 实例,咱们可使用它来测试新的 Jenkins 插件。

相关文章
相关标签/搜索