radar parlamentar
Gerência de Configuração de Software
tecnologias utilizadas
- FABRIC
- CHEF
- JENKINS
- SONARQUBE
Resultados
receita de deploy do radar
Criação de usuário
default.rb
template "#{repo_folder}/radar_parlamentar/create_user.py" do
mode '777'
owner user
group user
source "create_user.py.erb"
variables({
:user => 'radar',
:password => node['radar']['database_user_password']
})
end
execute "create_user" do
command "#{venv_folder}/bin/python create_user.py"
environment ({"DJANGO_SETTINGS_MODULE" => "settings.production"})
cwd "#{repo_folder}/radar_parlamentar/"
user user
group user
action :run
endcreate_user.py.erb
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.defaults")
from django.contrib.auth.models import User
if __name__ == "__main__":
try:
user = User.objects.create_user('<%= @user %>', '', '<%= @password %>')
user.is_staff = True
user.is_superuser = True
user.save()
except:
passImportação dos dados
default.rb
template "#{home}/importar_dados.sh" do
mode '777'
owner user
group user
source "importar_dados.sh.erb"
variables({
:user => 'radar',
:password => node['radar']['database_user_password'],
:server_user => node['radar']['user']
})
end
execute "importar_dados" do
command "sh importar_dados.sh"
cwd "#{home}"
user user
group user
action :run
endimportar_dados.sh.erb
touch /home/<%= @server_user %>/cookies.txt
LOGIN_URL=http://localhost/admin/
USERNAME='<%= @user %>'
PASSWORD='<%= @password %>'
COOKIES=/home/<%= @server_user %>/cookies.txt
CURL_BIN="curl -s -c $COOKIES -b $COOKIES -e $LOGIN_URL"
$CURL_BIN $LOGIN_URL > /dev/null
DJANGO_TOKEN="csrfmiddlewaretoken=$(grep csrftoken $COOKIES | sed 's/^.*csrftoken\s*//')"
$CURL_BIN \
-d "$DJANGO_TOKEN&username=$USERNAME&password=$PASSWORD&next=/admin/" \
-X POST $LOGIN_URL
$CURL_BIN \
-d "$DJANGO_TOKEN&..." \
-X POST http://localhost/importar/cdep/
rm $COOKIESResultados
receita jenkins
Configuração do jenkins
jenkins.rb
xml_radar = File.join(Chef::Config[:file_cache_path], 'jobRadar_config.xml')
template xml_radar do
source 'jobRadar_config.xml.erb'
variables ({
:venv_folder => venv_folder
})
end
jenkins_job 'build_radar' do
config xml_radar
action :create
endjenkins.rb
xml_chef = File.join(Chef::Config[:file_cache_path], 'jobChef_config.xml')
template xml_chef do
source 'jobChef_config.xml.erb'
variables ({
:home => home,
:venv_folder => venv_folder
})
end
python_pip "fabric" do
virtualenv "#{venv_folder}"
end
template "#{home}/fabfile.py" do
source "fabfile.py.erb"
variables ({
:user => user,
:password => password,
:home => home
})
end
jenkins_job 'deploy_radar' do
config xml_chef
action :create
end
jenkins_command "safe-restart" xml de configuração do job
jobChef_config.xml.erb
<?xml version='1.0' encoding='UTF-8'?>
<project>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers/>
<concurrentBuild>false</concurrentBuild>
<builders>
<hudson.tasks.Shell>
<command>
bash -l -c "source <%= @venv_folder %>/bin/activate
&& fab -f <%= @home %>/fabfile.py localhost deploy "</command>
</hudson.tasks.Shell>
</builders>
<publishers/>
<buildWrappers/>
</project>resultados
receita sonar
configuração do sonar
sonar.rb
package "openjdk-7-jdk" do
action :install
end
postgresql_database 'sonar' do
connection(
:host => 'localhost',
:port => 5432,
:username => 'postgres',
:password => node['postgresql']['password']['postgres']
)
template 'DEFAULT'
encoding 'DEFAULT'
tablespace 'DEFAULT'
connection_limit '-1'
owner 'postgres'
action :create
end
postgresql_database_user node["sonar"]["user"] do
connection postgresql_connection_info
password node["sonar"]["password"]
action :create
endsonar.rb
template "/opt/sonarqube-4.4/conf/sonar.properties" do
mode '0644'
source "sonar.properties.erb"
variables({
:user => node["sonar"]["user"],
:password => node["sonar"]["password"],
:port => node["sonar"]["port"]
})
end
remote_file "/opt/sonarqube-4.4/extensions/plugins/sonar-python-plugin-1.3.jar" do
source "http://repository.codehaus.org/org/codehaus/sonar-plugins/python/sonar-python
-plugin/1.3/sonar-python-plugin-1.3.jar"
action :create_if_missing
end
remote_file "#{home}/sonar-runner.zip" do
source "http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/
2.4/sonar-runner-dist-2.4.zip"
action :create_if_missing
end
execute "unzip sonnar-runnser" do
command "unzip -u sonar-runner.zip -d /opt/"
cwd "#{home}"
action :run
endsonar.properties.erb
sonar.jdbc.username=<%= @user %>
sonar.jdbc.password=<%= @password %>
sonar.jdbc.url=jdbc:postgresql://localhost/sonar
sonar.jdbc.maxActive=20
sonar.jdbc.maxIdle=5
sonar.jdbc.minIdle=2
sonar.jdbc.maxWait=5000
sonar.jdbc.minEvictableIdleTimeMillis=600000
sonar.jdbc.timeBetweenEvictionRunsMillis=30000
sonar.web.port: <%= @port %>
sonar.notifications.delay=60sonar-runner.sh.erb
#!/bin/bash
find . -type f -name "*.pyc" -exec rm -rf "{}" \;
source <%= @venv %>/bin/activate
<%= @coverage %> erase
<%= @coverage %> run --source='.' manage.py test modelagem analises exportadores
importadorInterno importadores testes_integracao
<%= @coverage %> xml -o sonar/reports/coverage.xml
sudo /opt/sonar-runner-2.4/bin/sonar-runnerdificuldades encontradas
dificuldades encontradas
-
Travis CI
- Manter senha especificada no repositório.
- Executar comandos com sudo localmente.
-
Diferenças entre versões do Chef
- Receita inicial utilizando Chef v10.
- Necessidade de utilizar alguns cookboks incompatíveis.
-
Configurações de jobs no Jenkin
- "Permission denied".
-
Integração Vagrant + Chef
- Receita atualizada para a versão 11 do Chef.
Obrigado :)
Radar-GCS-EntregaFinal
By Matheus Fernandes
Radar-GCS-EntregaFinal
- 386