DevOps
Docker:
## 安装Docker
yum remove docker docker-client docker-client-latest docker-common docker-latest \
docker-latest-logrotate docker-logrotate docker-engine && \
yum install -y yum-utils && \
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && \
yum install -y docker-ce docker-ce-cli containerd.io
Docker-Compose:
- 安装
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
要安装不同版本的 Compose,请将 1.29.2 替换为您要使用的 Compose 版本
- 授权
## 对二进制文件应用可执行权限
chmod +x /usr/local/bin/docker-compose
## 查看是否安装完成
docker-compose --version
- 配置软链(可选)
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Nexus3:
# Dockerfile
FROM sonatype/nexus3:3.33.0
VOLUME /home/nexus-data:/nexus-data
EXPOSE 8081
# mkdir /home/nexus-data docker run
mkdir /home/nexus-data && \
chmod -R 777 /home/nexus-data && \
docker run -d -p 8081:8081 -v /home/nexus-data:/nexus-data --name nexus sonatype/nexus3:3.33.0
Jenkins:
# Dockerfile
FROM jenkins/jenkins:lts-jdk11
VOLUME /home/jenkins_home:/var/jenkins_home
EXPOSE 8080 50000
# mkdir /home/jenkins_home docker run
mkdir /home/jenkins_home && chmod -R 777 /home/jenkins_home && \
docker run -p 8080:8080 -p 50000:50000 -v /home/jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins:lts-jdk11
SonarQube:
#Dockerfile
FROM sonarqube:lts-enterprise
VOLUME /home/sonarqube/data:/opt/sonarqube/data
VOLUME /home/sonarqube/logs:/opt/sonarqube/logs
VOLUME /home/sonarqube/extensions:/opt/sonarqube/extensions
## Docker Host Requirements(Docker的宿主机需要的一些配置)
## 宿主机的内存至少2G或以上,不然会出现连接不上ES的错误
## 查看
sysctl vm.max_map_count && sysctl fs.file-max && ulimit -n && ulimit -u
## 修改
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
# mkdir -p /home/sonarqube/{data,logs,extensions} && chmod -R 777 /home/sonarqube
mkdir -p /home/sonarqube/{data,logs,extensions} && chmod -R 777 /home/sonarqube && \
docker run -it -p 9000:9000 -v /home/sonarqube/data:/opt/sonarqube/data -v /home/sonarqube/logs:/opt/sonarqube/logs -v /home/sonarqube/extensions:/opt/sonarqube/extensions --name sonarQube sonarqube:lts-enterprise
建议为以下目录创建卷:
/opt/sonarqube/data
: 数据文件,例如嵌入式 H2 数据库和 Elasticsearch 索引/opt/sonarqube/logs
: 包含有关访问、Web 进程、CE 进程、Elasticsearch 日志的 SonarQube 日志/opt/sonarqube/extensions
: 第 3 方插件
Docker-Compose:
使用docker-compose部署jenkins,nexus3,sonarqube,postgreSql.
- docker-compose.yml
version: "3"
services:
sonarqube:
image: sonarqube:8.9.2-community
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000"
db:
image: postgres:12
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
ports:
- "5432:5432"
jenkins:
image: jenkins/jenkins:lts-jdk11
volumes:
- jenkins_home:/var/jenkins_home
ports:
- "8088:8080"
- "50000:50000"
extra_hosts:
- "gitlab-dev.jinkosolar.com:172.18.2.170"
nexus:
image: sonatype/nexus3:3.32.0
volumes:
- nexus_data:/nexus-data
ports:
- "8081:8081"
# 这个端口给docker私有仓库使用,在创建仓库时指定,并且在Dockers中需要添加配置 "insecure-registries":["172.18.2.170:5000"]
- "5000:5000"
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
jenkins_home:
nexus_data:
-
启动这些服务
## 启动 docker-compose -f devops/docker-compose.yml up -d
配置Jenkins:
- 登录jenkins,
默认的密码位置在 /var/lib/docker/volumes/devops_jenkins_home/_data/secrets/initialAdminPassword 文件中
/var/lib/docker/volumes/devops_jenkins_home/_data是jenkins容器卷在宿主机的挂载位置
- 安装默认插件和其他常用插件
搜索关键字:roles,git,gitlab,sonar,pipeline,chinese等
- 配置全局凭证
- 新建项目
-
配置源码
-
全局工具配置
-
Jdk
-
Git
-
Maven
-
-
其他
Gitlab+Jenkins
-
配置gitlab-Hook
-
Gitlab中的配置
Sonarqube+Jenkins
-
在Sonarqube中新建一个项目并生成一个token
-
配置sonarqube(需要插件SonarQube Scanner支持)
以下配置都可以参考这个官方文档
-
使用 Maven 或 Gradle 分析 Java 项目
这个我没有照着上面的官方文档,因为对照文档我没弄出来,这个相当于使用Maven进行分析,如果把命令复制到本地也是可以运行的,所以这种做法要配置好Maven
-
使用Pipeline的方式集成sonarqube
- 配置凭证和sonarqube服务器地址,执行代码分析需要
- 配置SonarQube Scanner(这种方式很麻烦,推荐使用Maven)
-
Jenkinsfile
node { stage("check out"){ // credentialsId: jenkins配置的凭证Id url: 仓库地址 git credentialsId: 'xuyuansheng', url: 'http://gitlab-dev.jinkosolar.com/xuyuansheng/jenkins-test.git' } stage('SCM') { checkout scm } // 使用Maven的方式 (推荐) stage('SonarQube Analysis') { def mvn = tool 'apache-maven-3.5.4'; withSonarQubeEnv(credentialsId: 'sonarqube', installationName: 'sonarqube') { // sonar.projectKey 如果不指定这个 默认为: groupId:artifactId sh "${mvn}/bin/mvn package sonar:sonar -Dsonar.projectKey=jinko-test1" } } // 使用Jenkins配置SonarQube Scanner全局工具方式,project.settings // 配置文件默认为sonar-project.properties // 这种方式需要提供.class文件目录,太麻烦了 不推荐使用 // 官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/ https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/ // stage('SonarQube analysis') { // def scannerHome = tool 'SonarQube Scanner'; // withSonarQubeEnv(credentialsId: 'sonarqube', installationName: 'sonarqube') { // // credentialsId:jenkins配置的凭证Id , // //installationName:全局配置的SonarQube server 的名称,如果有多个,需要选择其中一个 // sh "${scannerHome}/bin/sonar-scanner -Dproject.settings=./sonar-setting.properties" // } // } }
-
-
end
配置nexus3:
- 登录nexus
默认的密码位置在 /var/lib/docker/volumes/devops_nexus_data/_data/nexus-data/admin.password 文件中
/var/lib/docker/volumes/devops_nexus_data/_data 是nexus容器卷在宿主机的挂载位置
- 创建自己的仓库文件存储位置
- 创建私有仓库,用于上传自己的Jar包
- 把自己新建的仓库关联到maven-pulic,之后maven的mirror都配置这个地址即可
Mysql启动和配置:
- docker-compose.yml
version: "3"
services:
mysql:
image: mysql:5.7
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
volumes:
- mysql_logs:/var/log/mysql
- mysql_data:/var/lib/mysql
- mysql_config:/etc/mysql
- D:/Linux/docker-desktop-data/mysql:/home
volumes:
mysql_config:
mysql_logs:
mysql_data:
-
配置,进入容器,复制/etc/mysql/my.cnf文件到/home中,方便在宿主机中修改,因为容器中默认没有vi命令
my.cnf文件中需要加上 [mysqld]
- 修改表名大小写敏感配置,lower_case_table_names=1
-
把修改后的配置文件复制回到/etc/mysql/目录,然后重启Mysql容器
SqlServer:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" \
-p 1433:1433 --name sql1 -h sql1 \
-d mcr.microsoft.com/mssql/server:2019-latest