前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过Jenkins pipeline build Maven项目

通过Jenkins pipeline build Maven项目

作者头像
dhyuan
发布2022-05-30 14:29:50
1.2K0
发布2022-05-30 14:29:50
举报
文章被收录于专栏:响应式编程响应式编程

如之前的文章安装 CoreDNS、GitLab、Jenkins 容器 所述熟悉了基本的容器安装之后就可以配置 Jenkins pipeline 构建基于 maven 的 Java 项目了。

1)安装 JDK 及 Maven

不要通过 apt install 的方式安装,而通过下载 zip 解压的方式安装。

代码语言:javascript
复制
mkdir -p /home/devops/dockerSrvStorage/jenkins/tools/
cd /home/devops/dockerSrvStorage/jenkins/tools/
wget https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
tar xvzf openjdk-11+28_linux-x64_bin.tar.gz
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.zip
unzip apache-maven-3.8.1-bin.zip

2)启动 GitLab、Jenkins 容器。

停止并删除旧的 Jenkins, GitLab 容器:

代码语言:javascript
复制
docker stop jenkins gitlab
docker rm jenkins gitlab

Jenkins 和 GitLab 容器的互联互通至少有下面两种方式。一种是通过先定义出一个 network,然后 Jenkins 和 GitLab 加入这个网络来完成,这时容器间的访问是在 docker 自己内部网络上完成的而与宿主机 IP 无关。。一种是通过外部 DNS Server 完成容器间域名字的解析,这时容器间的访问是通过宿主机的 IP+映射到宿主机的端口完成的。

docker 网络内部互联的方式,如果是跨主机容器间通讯可以通过 overlay 完成。(如果跨主机这种方式,就没有理由不上 K8S 了。)下面是用于在同一宿主机下的命令: 首先创建一个网络:

代码语言:javascript
复制
docker network create devopNet

启动 Jenkins 和 GitLab 容器,注意这里通过–net 设定它们的网络都是 devNet

代码语言:javascript
复制
docker run --detach \
--name jenkins \
--net devopNet \
--hostname jenkins.telbox.cn \
--publish 9183:8080 --publish 9184:50000 \
--restart always \
-v /home/devops/dockerSrvStorage/jenkins:/var/jenkins_home \
jenkins/jenkins:2.277.4-lts-jdk11

docker run --detach \
--name gitlab \
--net devopNet \
--hostname gitlab.telbox.cn \
--publish 9181:443 --publish 9180:80 --publish 9182:22 \
--restart always \
-v /home/devops/dockerSrvStorage/gitlab/config:/etc/gitlab \
-v /home/devops/dockerSrvStorage/gitlab/logs:/var/log/gitlab \
-v /home/devops/dockerSrvStorage/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:13.11.3-ce.0

通过 DNS 来通讯的容器,相当于容器可以使用传入的 DNS 服务,也就可以通过 DNS 中定义的机器名通讯了。这样 jenkins 容器和 gitlab 容器运行在不同的主机,DNS 解析不同宿主机 IP/域名。这种情形, Jenkins 容器 ssh 到非 22 的 GitLab 上(假设 gitlab 容器映射 22 端口到其宿主机的 9182 端口),那么就需要设置 Jenkins 里 ssh config 文件。比如下面的/home/devops/dockerSrvStorage/jenkins/.ssh/config 这样:

代码语言:javascript
复制
Host gitlab.telbox.cn
    Hostname gitlab.telbox.cn
    Port 9182
    User dhyuan

这样在 jenkins 容器的 ssh 才能默认连接到 gitlab 容器宿主机的 9182 端口。

代码语言:javascript
复制
docker run --detach \
--name jenkins \
--dns 192.168.0.114 \
--hostname jenkins.telbox.cn \
--publish 9183:8080 --publish 9184:50000 \
--restart always \
-v /home/devops/dockerSrvStorage/jenkins:/var/jenkins_home \
jenkins/jenkins:2.277.4-lts-jdk11

docker run --detach \
--name gitlab \
--dns 192.168.0.114 \
--hostname gitlab.telbox.cn \
--publish 9181:443 --publish 9180:80 --publish 9182:22 \
--restart always \
-v /home/devops/dockerSrvStorage/gitlab/config:/etc/gitlab \
-v /home/devops/dockerSrvStorage/gitlab/logs:/var/log/gitlab \
-v /home/devops/dockerSrvStorage/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:13.11.3-ce.0

另外,之前使用的 GitLab 容器镜像 gitlab/gitlab-ce:13.9.2-ce.0 的 Integration-Jenkins CI 部分有 bug,换用 gitlab/gitlab-ce:13.11.3-ce.0 后 webhook 就可以工作了。

3)配置 Jenkins 使用 JDK、Maven, 如图:

配置 JDK

配置 Maven

4)通过 ssh-gen 生成 RSA 公私钥对,并配置 Jenkins 和 GitLab

代码语言:javascript
复制
ssh-keygen -t rsa -b 2048 -C "Used for dhyuan GitLab"

把生成的私钥通过 Jenkins 界面:Dashboard –> Credentials –> System Global credentials 设置为 GitLab 账号的私钥。

把生成的公钥通过 GitLab 界面进行设置, 如下图:

4)创建一个 Pipeline 项目并以从 GitLab 获取 Jenkinsfile 的形式定义 pipeline。

设置 pipeline 文件来自 git 管理的仓库:

需要注意的是,如果 branch 设置为/master,那么就不要勾选 Lightweight checkout。如果勾选了 Lightweight checkout,可把 branch 设置为/*。

设置 pipeline 可由 GitLab 代码仓库事件触发执行,并在其高级选项中生成 Secret token。

5) 设置当 GitLab 发生 push 等操作来触发 Jenkins Pipeline 运行。

如图设置完毕就可以通过点击测试按钮发送“push”消息来触发 pipeline 的运行了。

以上只是个基本步骤适合小团队环境devops环境的搭建。物质条件较好、人力配置强的工作环境中可基于k8s来做或者直接利用Openshift直接提供的功能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 响应式编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1)安装 JDK 及 Maven
  • 2)启动 GitLab、Jenkins 容器。
  • 3)配置 Jenkins 使用 JDK、Maven, 如图:
  • 4)通过 ssh-gen 生成 RSA 公私钥对,并配置 Jenkins 和 GitLab
  • 4)创建一个 Pipeline 项目并以从 GitLab 获取 Jenkinsfile 的形式定义 pipeline。
  • 5) 设置当 GitLab 发生 push 等操作来触发 Jenkins Pipeline 运行。
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档