#云原生征文# 持续集成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参数、参数多选插件
-
安装权限控制插件
Role-based Authorization Strategy
-
安装git参数插件
Git Parameter
-
安装参数多选(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
-
输入您的 GitLab 实例 URL(也称为
gitlab-ci coordinator URL
)。 -
输入您获得的令牌以注册runner。
yo9jx2CdqcoDAVgTf44A
-
输入runner的描述。您可以稍后在 GitLab 用户界面中更改此值。
docker
-
输入与 runner 关联的标签,用逗号分隔。您可以稍后在 GitLab 用户界面中更改此值。
shell docker
-
输入流道的任何可选维护说明。
XXX
-
提供runner executor。对于大多数用例,输入
docker
.docker
-
如果您
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://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
告诉我,为啥你这么屌
牛,赞起!
学习了,恰好可以体统的了解一下整个CI搭建过程