-
持续集成
自动化编译,测试,部署。即代码提交后,后续部署一键完成。
开发人员提交代码到代码仓库(github,gitlab)后,通知持续集成服务器,持续集成服务器去自动拉取更新的代码,编译,打包,部署,再传给测试服务或者生产服务。实现自动化的过程。
-
Jenkins的安装,docker方式(在添加JDK,MAVEN时可能会出问题)
-
下载镜像,
docker pull jenkins/jenkins
-
自定义jenkins配置的目录,
mkdir -p /var/jenkins_mount chmod 777 /var/jenkins_mount
-
启动容器
docker run -d -p 10240:8080 -p 10241:50000 -v /var/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime --name myjenkins jenkins/jenkins
-
查看是否启动成功,看端口号是否存在,不存在则失败
docker ps -l
-
镜像加速
cd /var/jenkins_mount/ vi hudson.model.UpdateCenter.xml
内容 修改为
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
-
访问,IP:10240 即可
-
密码的获取
cat /var/jenkins_mount/secrets/initialAdminPassword
-
-
jenkins安装,yum方式
-
安装JDK yum -y install java-1.8.0-openjdk-devel
-
yum的repos中默认是没有Jenkins的,需要先将Jenkins存储库添加到yum repos。
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
-
yum安装Jenkins
yum install jenkins
-
启动
sudo service jenkins start
-
-
装配MAVEN
-
下载压缩包
-
发送在/usr/local下
-
进入目录
cd /usr/local
-
解压
tar -zxvf apache-maven-3.5.4-bin.tar.gz
-
配置环境变量/etc/profile
最后追加两行
export MAVEN_HOME=/usr/local/apache-maven-3.5.4 export PATH=$MAVEN_HOME/bin:$PATH
-
刷新
source /etc/profile
-
check
mvn -v
-
-
git安装
yum -y install git
路径在/usr/libexec/git-core下
-
将jar包打入image并启动的shell
project=DervousJar.jar
pathName=MyMission2
echo "拷贝文件"
rm -rf /usr/local/src/app/$project
sudo cp /var/lib/jenkins/workspace/$pathName/target/$project /usr/local/src/app/$pathName/$project
echo "切换路径"
cd /usr/local/src/app/$pathName/
pid=`ps -ef | grep $dir$project | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
kill -9 $pid
echo "杀死存在进程"
fi
BUILD_ID=dontKillMe
#echo "执行"
#nohup java -jar $project
echo "执行build"
nohup docker build -t myproject2 .
echo "执行login"
nohup docker login 10.3.80.90 -u admin -p cyg@123
echo "执行tag"
nohup docker tag myproject2 10.3.80.90/prs3000/dervousimagethird
echo "执行push"
nohup docker push 10.3.80.90/prs3000/dervousimagethird
{
nohup docker stop myproject2 &&\
echo "执行stop" &&\
nohup docker rm myproject2 &&\
echo "执行rm"
}||{
echo "不用执行stop和rm捏O(∩_∩)O"
}
echo "run一手"
nohup docker run --name myproject2 -d -p 8088:8080 myproject2
echo "成功!"
shell脚本实现try catch,shell脚本实际上最根本的东西就是true和false,每条指令都会返回执行成功或失败,如果失败的结果返回给最高层,shell脚本会执行失败,但如果用{包住}||true,那么返给最高级的永远是true,当然也可以把true替换为永远不可能报错的输出语句echo,来返回true。
但有一点,在{}中,当上一条一句执行失败后如果又下一条会继续执行下一条,如上面代码,nohup如果报错会继续执行echo,然后返回true,后面的{}中的内容将不会被执行。
-
钩子,想要在代码提交后自动构建而不是手动点击,需要配置钩子
jenkins端
http://119.23.44.107:8080/job/MyMission/build?token=Dervous http://jenkins的IP和端口/job/自己创的任务名/build?token=自己填的令牌
git端 settings->webhook->add
将URL填进去即可。
实际上就是GIT在收到代码的push后调用jenkins的接口,jenkins就回去执行构建,把手动点击构建变成了GIT帮用户点击。
-
实际上,高版本的jenkins的配置文件不再是/etc/sysconfig/jenkins了,虽然他还存在,不过并无暖用
而是/usr/lib/systemd/system/jenkins.service
修改配置后需要
systemctl daemon-reload
以刷新配置
再重启
service jenkins restart
查看是否修改成了root用户和端口9095
ps -ef | grep jenkins
-
GIT 钩子不生效问题,跨站请求伪造保护任然打开
关闭即可,但是高版本的jenkins无法在可视化页面关闭。
配置文件中
Environment="JAVA_OPTS=-Djava.awt.headless=true" 改为 Environment="JAVA_OPTS=-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
reload然后重启即可
如此便关闭了。
然而还是不行。
此时是没有验证。在jenkins中安装插件Build Authorization Token Root。
然后将GITEE的webhook 的URL改为
http://119.23.44.107:9095/buildByToken/build?job=MyMission&token=Dervous http://Jenkins的IP和端口/buildByToken/build?job=[jenkens的任务名字]&token=[任务自己设置的TOKEN]
-
GITLAB的安装(基于docker)
-
查看哪些可用
docker search gitlab
-
PULL下来一个中文社区版
docker pull twang2218/gitlab-ce-zh
-
启动
docker run -d -p 8443:443 -p 8095:80 -p 8022:22 --restart always --name gitlab -v /usr/local/gitla b/etc:/etc/gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab --privileged=true twang2218/gitlab-ce-zh
倘若第二次或以上重复安装gitlab,在run的时候,3个容器卷的地址必须要改,不然无权限访问,会导致容器反复重启。随便新建三个文件夹即可。
-
进入容器的系统
docker exec -it gitlab bash
-
修改配置
cd /etc/gitlab vim gitlab.rb
随意空的一排加上
external_url 'http://10.3.30.240' gitlab_rails['gitlab_ssh_host'] = '10.3.30.240' gitlab_rails['gitlab_shell_ssh_port'] = 8022 # 是否启用 gitlab_rails['smtp_enable'] = true # SMTP服务的地址 gitlab_rails['smtp_address'] = "smtp.qq.com" # 端口 gitlab_rails['smtp_port'] = 465 # 你的QQ邮箱(发送账号) gitlab_rails['smtp_user_name'] = "1014155959@qq.com" # 授权码 gitlab_rails['smtp_password'] = "********" # 域名 gitlab_rails['smtp_domain'] = "smtp.qq.com" # 登录验证 gitlab_rails['smtp_authentication'] = "login" # 使用了465端口,就需要配置下面三项 gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['smtp_openssl_verify_mode'] = 'none' # 你的QQ邮箱(发送账号) gitlab_rails['gitlab_email_from'] = '1014155959@qq.com'
-
重新加载配置文件
gitlab-ctl reconfigure
-
修改端口
cd /opt/gitlab/embedded/service/gitlab-rails/config vim gitlab.yml
port修改为上述run的时候的8095
-
重启
gitlab-ctl restart
-
退出
exit
-
浏览器访问 IP+8095即可
-
高版本的GITLAB roo用户的密码在容器中的系统的
cat /etc/gitlab/initial_root_password
位置下
中文社区版的直接设置密码。
-
Webhook
中文社区版的钩子在
须登录root用户,否则没有扳手按钮。
如果勾选多个,可能会同时触发多次请求,导致多次部署。
-
-