如之前的文章安装 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直接提供的功能。