安装CoreDNS、GitLab、Jenkins

在之前创建的 repository server 上安装下面的服务。

1)搭建 CoreDNS 服务

先从 Docer Hub 上拉取 CoreDNS 镜像。

docker pull coredns/coredns:1.8.3

停止 Ubuntu 上默认启动的 DNS 服务。

在下载 coredns 镜像之前先不要停止 DNS 服务,否则解析不到 docker 镜像仓库服务器。

sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved

在目录 /home/devops/dockerSrvStorage/coredns 下创建 2 个文件 Corefile hostsfile,内容如下:

192.168.0.1 是家里无线路由器的 IP 地址。我这里用的是 TL-WDR7650 千兆易展无线路由。

# ls
Corefile  hostsfile
# cat Corefile
.:53 {
    hosts /etc/coredns/hostsfile {
        fallthrough
    }
    forward . 192.168.0.1:53
    log
}

把之前创建的 Guest 虚拟机 IP 都加进来。

# cat hostsfile
devops@repositoryServer:~/dockerSrvStorage/coredns$ cat hostsfile
192.168.0.114 repositoryServer dnsServer gitlab jenkins gitlab.telbox.cn jenkins.telbox.cn
192.168.0.112 devopServer0
192.168.0.113 devopServer1
192.168.0.115 devopServer2

192.168.0.106 k8s-master-0
192.168.0.107 k8s-node-0
192.168.0.109 k8s-node-1
192.168.0.108 k8s-node-2

192.168.0.114 basehost0
192.168.0.111 ubuntu20Server

运行 CoreDNS 镜像

docker run -it -d --net=host \
--name=coredns --restart=always \
-v /home/devops/dockerSrvStorage/coredns:/etc/coredns/ \
coredns/coredns:1.8.3 \
-conf /etc/coredns/Corefile

备注:
–net=host 要指定,如果不指定,在同宿主机的容器中无法查询 DNS。如果指定了该项,则无须指定-p 选项。默认使用宿主机的端口。

Reference:

BIND, Dnsmasq 等常见 DNS Server(却不包含 CoreDNS):
https://computingforgeeks.com/bind-vs-dnsmasq-vs-powerdns-vs-unbound/
安装 Core DNS Docker:
https://blog.csdn.net/weixin_36938307/article/details/105390004

2)GitLab

各种 docker 服务一般都需要持久化映射,以方便配置、数据的保存。本地使用 /home/devops/dockerSrvStorage 作为各种应用存储的根目录。
其中参数 –hostname gitlab.telbox.cn 定义了用户访问 gitlab 服务的主机域名

mkdir -p /home/devops/dockerSrvStorage/gitlab
sudo docker pull gitlab/gitlab-ce:13.9.2-ce.0

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

可修改 /home/devops/dockerSrvStorage/gitlab/config 里的配置文件。如有需要,可进入 GitLab 容器进行配置。

sudo docker exec -it gitlab bash
cd /opt/gitlab/embedded/service/gitlab-rails/config
vi gitlab.yml

执行命令 gitlab-ctl reconfigure 使之生效

sudo docker exec gitlab gitlab-ctl reconfigure

第一次访问安装好的 GitLab 服务http://gitlab.telbox.cn:9180/需要设置root用户的口令。

Reference:
https://www.jianshu.com/p/080a962c35b6
https://zhuanlan.zhihu.com/p/63786567

3)Jenkins

mkdir -p /home/devops/dockerSrvStorage/jenkins


sudo docker run -p 9183:8080 -p 9184:50000 \
--name jenkins -d \
-v /home/devops/dockerSrvStorage/jenkins:/var/jenkins_home \
-v /home/devops/dockerSrvStorage/jdk/java-se-8u41-ri:/var/jenkins_home/tools/jdk/java-se-8u41-ri \
-v /home/devops/dockerSrvStorage/jdk/jdk-11.0.2:/var/jenkins_home/tools/jdk/jdk-11.0.2 \
-v /home/devops/dockerSrvStorage/apache-maven-3.6.3:/var/jenkins_home/tools/apache-maven-3.6.3 \
jenkins/jenkins:lts

上面通过-v 的方式把 JDK 和 Maven mount 给 Jenkins 容器,之后可以通过 Jenkins Tools 配置他们给 Pipline 使用。
启动后,进入 docker 查看初始密码。首次访问 jenkins.telbox.cn:9183 时会用到这个密码。

sudo docker exec -it jenkins bash
jenkins@e061aa64ed7b:/$ cat /var/jenkins_home/secrets/initialAdminPassword

访问 jenkins.telbox.cn:9183 输入初始密码,选择安装建议的插件。
插件安装完毕后,要求输入 Jenkins URL,这里输入 jenkins.telbox.cn:9183

The Jenkins URL is used to provide the root URL for absolute links to various Jenkins resources. That means this value is required for proper operation of many Jenkins features including email notifications, PR status updates, and the BUILD_URL environment variable provided to build steps.
The proposed default value shown is not saved yet and is generated from the current request, if possible. The best practice is to set this value to the URL that users are expected to use. This will avoid confusion when sharing or viewing links.

如果需要,可以给 Jenkins 配置日志

mkdir -p /home/devops/dockerSrvStorage/jenkins/data
cat > /home/devops/dockerSrvStorage/jenkins/data/log.properties <<EOF
handlers=java.util.logging.ConsoleHandler
jenkins.level=FINEST
java.util.logging.ConsoleHandler.level=FINEST
EOF
docker run --name myjenkins -p 8080:8080 -p 50000:50000 --env JAVA_OPTS="-Djava.util.logging.config.file=/var/jenkins_home/log.properties" -v `pwd`/data:/var/jenkins_home jenkins

如果 Jenkins 插件安装比较慢,可以使用国内插件镜像源,参考https://blog.csdn.net/oYinHeZhiGuang/article/details/104867525。

Reference:
https://github.com/jenkinsci/docker/blob/master/README.md
https://www.cnblogs.com/xiaoqi/p/docker-jenkins-cicd.html