#云原生征文# 持续集成CI/CD之工具快速搭建 原创 精华

老梅mqm
发布于 2022-6-1 15:57
浏览
6收藏

下一章:持续集成CI/CD之配置管理最佳实践

jenkins快速搭建与配置

安装文档:https://www.jenkins.io/doc/book/installing/docker/#downloading-and-running-jenkins-in-docker

镜像地址:https://hub.docker.com/r/jenk
ins/jenkins

容器内的Docker部署

1.创建jenkins网络

docker network create jenkins

2.增加daemon.json配置

设置insecure-registrie是因为,后续使用docker编译时,需要docker镜像仓库存储镜像的。

sudo mkdir /data/jenkins
cat <<EOF | sudo tee /data/jenkins/daemon.json
{
  "registry-mirrors": ["https://XXX.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.XXX.XXX:5000"] 
}
EOF

3.部署运行docker

docker run --name jenkins-docker --privileged \
--network jenkins  --network-alias docker \
-e DOCKER_TLS_CERTDIR=/certs \
-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime:ro \
-v /data/jenkins/jenkins-docker-certs:/certs/client \
-v /data/jenkins/jenkins-data:/var/jenkins_home \
-v /data/jenkins/daemon.json:/etc/docker/daemon.json \
-p 2376:2376  --restart=always -m 4GB --cpus 2 -d docker:dind \
--storage-driver overlay2

修改jenkins-data目录权限

docker run --rm --privileged -u root --name jenkins-test \
-v /data/jenkins/jenkins-data:/var/jenkins-data \
jenkins/jenkins:2.332.2-lts mkdir .m2 && chown -R jenkins:jenkins /var/jenkins-data

jenkins部署(docker)

1.自定义jenkins的docker镜像

(注意编译的 jenkins插件版本号问题)

#生成dockerfile文件
cat <<\EOF | tee Dockerfile
FROM jenkins/jenkins:2.332.2-lts
USER root
RUN sed -e 's/deb.debian.org/mirrors.aliyun.com/g' -i  /etc/apt/sources.list; \
apt-get update && apt-get install -y lsb-release && rm -rf /var/lib/apt/lists/*
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://mirrors.aliyun.com/docker-ce/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://mirrors.aliyun.com/docker-ce/linux/debian \
  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli && rm -rf /var/lib/apt/lists/*; 
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.25.3 docker-workflow:1.28"
EOF
#编译
docker build -t my-jenkins-blueocean:1.1 .

2.部署运行jenkins容器

默认本地映射目录在/data/jenkins中

docker run --name jenkins-blueocean \
--network jenkins --env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
--env TZ=Asia/Shanghai \
--publish 8080:8080 --publish 50000:50000 \
--volume /data/jenkins/jenkins-data:/var/jenkins_home \
--volume /data/jenkins/jenkins-docker-certs:/certs/client:ro \
--volume /etc/localtime:/etc/localtime:ro \
--restart=always -m 4GB --cpus 2 -d my-jenkins-blueocean:1.1

jenkins插件安装

1.标准推荐安装

访问:http://192.168.XXX.XXX:8080/ --> 选择标准推荐安装

2.设置账号、pwd

标准插件安装完成后,进入到账号设置阶段

账号:admin
pwd: xxx

3.选择安装权限、git参数、参数多选插件

  1. 安装权限控制插件

    Role-based Authorization Strategy

  2. 安装git参数插件

    Git Parameter

  3. 安装参数多选(Active Choices)插件

    Active Choices

jenkins修改授权策略

1.选择Role-Based Strategy授权策略

系统管理 -> 全局安全配置 -> 授权策略 -> Role-Based Strategy -> 保存

2.增加角色

(管理角色设置可读read,创建执行任务create_job角色)

系统管理 -> Manage and Assign Roles -> Manage Roles
Global roles中增加:build-job【权限:全部read、任务build】 create-job【权限:任务 create】

3.用户分组权限配置

开放平台为例前缀为ssop-开头

1.系统管理 -> Manage and Assign Roles -> Manage Roles
Item roles中增加:安装到maven仓库【Role to add: 开发平台   Pattern: ssop-.+】【权限:凭据:create、update、view, 任务:全选】
2.系统管理 -> Manage and Assign Roles ->  Assign Roles
User/group to add:输入用户名 --> 勾选read	create-job
Item roles:输入用户名 -->开放平台

jenkins-LDAP认证配置

系统管理 -> 全局安全配置 -> 安全域 -> LDAP

####LDAP 服务器
Server:ldap://[IP地址]:489
User search base:dc=XXX
User search filter:cuuid={0}
Group membership attribute:[ldap组的属性]
Manager DN: [ldap管理DN]
Manager Password: [ldap管理DN的pwd]
Display Name LDAP attribute:displayname
Email Address LDAP attribute:mail

当ldap服务挂调用,需要在后台的配置文件中去掉ldap认证,才能访问

<!-- 修改../jenkins-data/config.xml的securityRealm如下:-->
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>

当ldap使用ssl私有证书情况,需要增加以下操作,才能正常访问ldap服务

# 生成证书cacerts,复制ldap的证书到/data/jenkins/ldapserver.crt
jdk_sec_dir=/opt/java/openjdk/lib/security
docker run --rm -u root --name test-jenkins -w ${jdk_sec_dir}  -v /data/jenkins/ldapserver.crt:${jdk_sec_dir}/ldapserver.crt -d jenkins/jenkins:2.332.2-lts
docker exec test-jenkins keytool -import  -trustcacerts -alias  ldap.talkweb.com.cn -file  ldapserver.crt  -keystore  cacerts  -storepass changeit  -noprompt
docker cp test-jenkins:/opt/java/openjdk/lib/security/cacerts /data/jenkins
docker stop test-jenkins

# 重新启动jenkins
docker stop jenkins-blueocean
docker rm jenkins-blueocean
docker run --name jenkins-blueocean \
--network jenkins --env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
--env TZ=Asia/Shanghai \
--publish 8080:8080 --publish 50000:50000 \
--volume /data/jenkins/jenkins-data:/var/jenkins_home \
--volume /data/jenkins/jenkins-docker-certs:/certs/client:ro \
--volume /etc/localtime:/etc/localtime:ro \
--volume /data/jenkins/cacerts:/opt/java/openjdk/lib/security/cacerts:ro \
--restart=always -m 4GB --cpus 2 -d my-jenkins-blueocean:1.1

docker镜像仓库registry快速搭建

https://docs.docker.com/registry/deploying/

1.生成登录password

mkdir -p /data/docker-registry/{auth,certs,registry};
docker run --rm --entrypoint htpasswd httpd:2 -Bbn [user] [password] > /data/docker-registry/auth/htpasswd

2.生成证书

自己生成证书

cd /data/docker-registry/certs
########生成发布机构的证书######
#1、创建ca.key
openssl genrsa -out ca.key 4096
#2、生成ca.crt
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Huna/L=Changsha/O=XXX/OU=manager/CN=XXX.XXX.com" \
-key ca.key \
-out ca.crt
########生成服务端证书######
#1、生成服务的domain.key
openssl genrsa -out domain.key 4096
#2、生服务的domain.csr
openssl req -sha512 -new \
-subj "/C=CN/ST=Huna/L=Changsha/O=mqm/OU=manager/CN=XXX.XXX.com" \
-key domain.key \
-out domain.csr
#3、生成V3.ext文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=XXX.XXX.com
IP.1=192.168.XXX.XXX
IP.2=127.0.0.1
EOF
#4、使用v3.ext文件生成证书domain.crt
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in domain.csr \
-out domain.crt

3.启动registry服务

#!/bin/bash
docker run -d -p 5000:5000 --restart=always \
--name registry \
-v /data/docker-registry/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v /data/docker-registry/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-v /data/docker-registry/registry:/var/lib/registry \
registry:2

4.验证

#登录
docker login 192.168.XXX.XXX:5000 --username=[user] --password=[password]

gitlab快速搭建

假设安装目录在 /data/gitlab

1.初始化

# 数据目录
export GITLAB_HOME=/data/gitlab
# 版本号依次改变
export GITLAB_VERSION=latest # 可以是具体的版本号:如14.8.2-ce.0
# 创建数据目录
mkdir -p ${GITLAB_HOME}/{config,logs,data}
# 复制配置文件
docker run --rm --detach \
--hostname gitlab.example.com \
--name gitlab-test \
--shm-size 256m \
gitlab/gitlab-ce:$GITLAB_VERSION
docker cp gitlab-test:/etc/gitlab/gitlab.rb /data/gitlab/config
# 根据具体的需求修改gitlab.rb

2.使用docker部署gitlab

# 数据目录
export GITLAB_HOME=/data/gitlab
# 版本号依次改变
export GITLAB_VERSION=latest # 可以是具体的版本号:如14.8.2-ce.0
# 运行服务
docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab --restart always -e TZ=Asia/Shanghai \
--volume /etc/localtime:/etc/localtime:ro \
--volume $GITLAB_HOME/config:/etc/gitlab:Z \
--volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
--volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
--shm-size 256m \
gitlab/gitlab-ce:$GITLAB_VERSION

gitlab-runner快速搭建

1.gitlab-runner运行

# 数据目录
export GITLAB_RUNNER_HOME=/data/gitlab-runner
# 版本号依次改变
export GITLAB_RUNNER_VERSION=latest # 可以是具体的版本号:如v14.8.2
#运行
docker run -d --name gitlab-runner --restart always \
-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime:ro \
-v $GITLAB_RUNNER_HOME/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:$GITLAB_RUNNER_VERSION

2.gitlab-runner注册

docker exec -i gitlab-runner gitlab-runner register
  1. 输入您的 GitLab 实例 URL(也称为gitlab-ci coordinator URL)。

    https://gitlab.example.com

  2. 输入您获得的令牌以注册runner。

    yo9jx2CdqcoDAVgTf44A

  3. 输入runner的描述。您可以稍后在 GitLab 用户界面中更改此值。

    docker

  4. 输入与 runner 关联的标签,用逗号分隔。您可以稍后在 GitLab 用户界面中更改此值。

    shell docker

  5. 输入流道的任何可选维护说明。

    XXX

  6. 提供runner executor。对于大多数用例,输入 docker.

    docker

  7. 如果您docker作为执行者输入,系统会要求您为未在.gitlab-ci.yml.

    docker:dind

rancher快速搭建

githup官网:https://github.com/rancher/rancher

1.rancher运行部署

docker run --privileged -d --restart=unless-stopped \
--name=rancher -p 80:80 -p 443:443 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/rancher/db:/var/lib/rancher \
-e TZ=Asia/Shanghai \
-m 4GB --cpus 2 rancher/rancher:v2.6.4

2.rancher配置

# 访问https://127.0.0.1
设置账号:admin,
password:XXX
创建开发环境可读用户:dev,password:XXX

portainer快速搭建

官网:https://www.portainer.io/

安装网址:https://docs.portainer.io/v/ce-2.11/start/install/server

1.portainer服务端安装

服务端

# 服务端运行容器
docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
--restart=always --env TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /data/portainer/portainer_data:/data \
portainer/portainer-ce:2.11.0

访问配置

# 访问
https://localhost:9443/
#设置账号
账号:admin 
password:XXX

2.portainer代理端安装

# 代理端运行容器
docker run -d -p 9001:9001 --name portainer_agent \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:2.11.0

【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2022-6-1 16:15:01修改
22
收藏 6
回复
举报
3条回复
按时间正序
/
按时间倒序
从小就很悬
从小就很悬

告诉我,为啥你这么屌

1
回复
2022-6-1 17:41:27
民之码农
民之码农

牛,赞起!

回复
2022-6-7 11:45:32
wx62a2efc5ad74b
wx62a2efc5ad74b

学习了,恰好可以体统的了解一下整个CI搭建过程

回复
2022-6-10 15:17:46
回复
    相关推荐